diff --git a/plugins/org.eclipse.jst.common.project.facet.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.common.project.facet.core/META-INF/MANIFEST.MF
index 88d7d17..4ade267 100644
--- a/plugins/org.eclipse.jst.common.project.facet.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.common.project.facet.core/META-INF/MANIFEST.MF
@@ -7,13 +7,12 @@
 Bundle-ClassPath: .
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jst.common.project.facet.core,
- org.eclipse.jst.common.project.facet.core.internal;x-internal:=true
+ org.eclipse.jst.common.project.facet.core.internal;x-friends:="org.eclipse.jst.common.project.facet.ui"
 Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,4.0)",
  org.eclipse.core.runtime;bundle-version="[3.2.0,4.0)",
  org.eclipse.jdt.core;bundle-version="[3.2.0,4.0)",
  org.eclipse.wst.common.project.facet.core;bundle-version="[1.3.0,2.0.0)",
- org.eclipse.jdt.launching;bundle-version="[3.4.0,4.0.0)",
- org.eclipse.wst.common.project.facet.ui;bundle-version="[1.3.0,2.0.0)",
- org.eclipse.ui.ide;bundle-version="[3.4.0,4.0.0)"
+ org.eclipse.jdt.launching;bundle-version="[3.4.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-Activator: org.eclipse.jst.common.project.facet.core.FacetCorePlugin
diff --git a/plugins/org.eclipse.jst.common.project.facet.core/about.html b/plugins/org.eclipse.jst.common.project.facet.core/about.html
index 73db36e..2199df3 100644
--- a/plugins/org.eclipse.jst.common.project.facet.core/about.html
+++ b/plugins/org.eclipse.jst.common.project.facet.core/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>June 06, 2007</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
diff --git a/plugins/org.eclipse.jst.common.project.facet.core/build.properties b/plugins/org.eclipse.jst.common.project.facet.core/build.properties
index c4aeebe..12ae70d 100644
--- a/plugins/org.eclipse.jst.common.project.facet.core/build.properties
+++ b/plugins/org.eclipse.jst.common.project.facet.core/build.properties
@@ -5,5 +5,4 @@
                META-INF/,\
                plugin.properties,\
                component.xml,\
-               about.html,\
-               images/
+               about.html
diff --git a/plugins/org.eclipse.jst.common.project.facet.core/images/java-facet.gif b/plugins/org.eclipse.jst.common.project.facet.core/images/java-facet.gif
deleted file mode 100644
index 37cb4e7..0000000
--- a/plugins/org.eclipse.jst.common.project.facet.core/images/java-facet.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.common.project.facet.core/images/standard-jre-component.gif b/plugins/org.eclipse.jst.common.project.facet.core/images/standard-jre-component.gif
deleted file mode 100644
index cb55e33..0000000
--- a/plugins/org.eclipse.jst.common.project.facet.core/images/standard-jre-component.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.common.project.facet.core/plugin.xml b/plugins/org.eclipse.jst.common.project.facet.core/plugin.xml
index d5362fb..d9b24bb 100644
--- a/plugins/org.eclipse.jst.common.project.facet.core/plugin.xml
+++ b/plugins/org.eclipse.jst.common.project.facet.core/plugin.xml
@@ -51,19 +51,8 @@
       <type class="org.eclipse.jst.common.project.facet.core.IClasspathProvider"/>
     </adapter>
 
-    <adapter>
-      <runtime-component id="standard.jre"/>
-      <factory class="org.eclipse.jst.common.project.facet.core.internal.StandardJreComponentLabelProvider$Factory"/>
-      <type class="org.eclipse.wst.common.project.facet.ui.IRuntimeComponentLabelProvider"/>
-    </adapter>
-
   </extension>
 
-  <extension point="org.eclipse.wst.common.project.facet.ui.images">
-    <image runtime-component-type="standard.jre"
-       path="images/standard-jre-component.gif"/>
-  </extension>
-  
   <extension point="org.eclipse.wst.common.project.facet.core.facets">
   
     <project-facet id="jst.java">
@@ -107,10 +96,6 @@
 
   </extension>
   
-  <extension point="org.eclipse.wst.common.project.facet.ui.images">
-    <image facet="jst.java" path="images/java-facet.gif"/>
-  </extension>
-  
   <extension point="org.eclipse.wst.common.project.facet.core.listeners">
      <listener
        class="org.eclipse.jst.common.project.facet.core.internal.JavaFacetRuntimeChangedListener"
@@ -133,13 +118,4 @@
     <persistent value="true"/>
   </extension>
   
-  <extension
-    point="org.eclipse.ui.ide.markerResolution">
-	<markerResolutionGenerator
-      markerType="org.eclipse.jst.common.project.facet.core.javaVersionMismatch"
-      class="org.eclipse.jst.common.project.facet.core.internal.JavaVersionMismatchMarkerResolutions">
-    </markerResolutionGenerator>
-  </extension>
-  
-  
 </plugin>
diff --git a/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/FacetCorePlugin.java b/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/FacetCorePlugin.java
new file mode 100644
index 0000000..eb05f4e
--- /dev/null
+++ b/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/FacetCorePlugin.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * 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:
+ *     IBM Corporation - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.jst.common.project.facet.core;
+
+import org.eclipse.core.runtime.ILog;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+
+public final class FacetCorePlugin 
+
+    extends Plugin
+
+{
+    public static final String PLUGIN_ID = "org.eclipse.jst.common.project.facet.core"; //$NON-NLS-1$
+    public static final String OUTPUT_FOLDER = "outputFolder"; //$NON-NLS-1$
+    public static final String PROD_PROP_SOURCE_FOLDER_LEGACY = "defaultSource"; //$NON-NLS-1$    
+    private static final String PROD_PROP_SOURCE_FOLDER = "defaultJavaSourceFolder"; //$NON-NLS-1$
+    public static final String DEFAULT_SOURCE_FOLDER = "src"; //$NON-NLS-1$
+    
+    private static FacetCorePlugin inst;
+
+    /**
+     * Get the plugin singleton.
+     */
+    
+    public static FacetCorePlugin getDefault() 
+    {
+        return inst;
+    }
+    
+    public FacetCorePlugin() {
+    	super();
+		if (inst == null)
+			inst = this;
+	}
+    public String getPluginID() 
+    {
+        return PLUGIN_ID;
+    }
+    
+    public static void log( final Exception e )
+    {
+        final ILog log = FacetCorePlugin.getDefault().getLog();
+        final String msg = "Encountered an unexpected exception."; //$NON-NLS-1$
+        
+        log.log( new Status( IStatus.ERROR, PLUGIN_ID, IStatus.OK, msg, e ) );
+    }
+    
+    
+    public static String getJavaSrcFolder(){
+    	String srcFolder = FacetCorePlugin.getDefault().getPluginPreferences().getString(PROD_PROP_SOURCE_FOLDER_LEGACY);
+    	if( srcFolder == null || srcFolder.equals("") ){
+    		if( Platform.getProduct() != null ){
+    			srcFolder = Platform.getProduct().getProperty( PROD_PROP_SOURCE_FOLDER );
+    		    if( srcFolder == null || srcFolder.equals("")){ //$NON-NLS-1$
+    		    	srcFolder = Platform.getProduct().getProperty( PROD_PROP_SOURCE_FOLDER_LEGACY );
+    		    }      			
+    		}
+	    	if( srcFolder == null || srcFolder.equals("") ){
+	    		srcFolder = DEFAULT_SOURCE_FOLDER;
+	    	}
+
+    	}
+	    return srcFolder;
+    }
+}
diff --git a/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/JavaFacetInstallConfig.java b/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/JavaFacetInstallConfig.java
index 3d51d0c..ed2c1f9 100644
--- a/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/JavaFacetInstallConfig.java
+++ b/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/JavaFacetInstallConfig.java
@@ -28,9 +28,9 @@
 
 public class JavaFacetInstallConfig
 {
-    private static final String PROD_PROP_SOURCE_FOLDER = "defaultJavaSourceFolder"; //$NON-NLS-1$
-    private static final String PROD_PROP_SOURCE_FOLDER_LEGACY = "defaultSource"; //$NON-NLS-1$
-    private static final String DEFAULT_SOURCE_FOLDER = "src"; //$NON-NLS-1$
+//    private static final String PROD_PROP_SOURCE_FOLDER = "defaultJavaSourceFolder"; //$NON-NLS-1$
+//    private static final String PROD_PROP_SOURCE_FOLDER_LEGACY = "defaultSource"; //$NON-NLS-1$
+//    private static final String DEFAULT_SOURCE_FOLDER = "src"; //$NON-NLS-1$
 
     private static final String PROD_PROP_OUTPUT_FOLDER = "defaultJavaOutputFolder"; //$NON-NLS-1$
     private static final String PROD_PROP_OUTPUT_FOLDER_LEGACY = "outputFolder"; //$NON-NLS-1$
@@ -78,17 +78,7 @@
         this.sourceFoldersReadOnly = Collections.unmodifiableList( this.sourceFolders );
         this.defaultOutputFolder = null;
         
-        String sourceFolder = getProductProperty( PROD_PROP_SOURCE_FOLDER );
-        
-        if( sourceFolder == null )
-        {
-            sourceFolder = getProductProperty( PROD_PROP_SOURCE_FOLDER_LEGACY );
-        }
-        
-        if( sourceFolder == null )
-        {
-            sourceFolder = DEFAULT_SOURCE_FOLDER;
-        }
+        String sourceFolder = FacetCorePlugin.getJavaSrcFolder();
         
         this.sourceFolders.add( new Path( sourceFolder ) );
         
diff --git a/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/internal/JavaVersionMismatchMarkerResolutions.java b/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/internal/JavaVersionMismatchMarkerResolutions.java
deleted file mode 100644
index 685964f..0000000
--- a/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/internal/JavaVersionMismatchMarkerResolutions.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/******************************************************************************
- * Copyright (c) 2008 BEA Systems, 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:
- *    Konstantin Komissarchik - initial implementation and ongoing maintenance
- ******************************************************************************/
-
-package org.eclipse.jst.common.project.facet.core.internal;
-
-import java.util.Collections;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.dialogs.ErrorDialog;
-import org.eclipse.jst.common.project.facet.core.JavaFacet;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.ui.IMarkerResolution;
-import org.eclipse.ui.IMarkerResolutionGenerator;
-import org.eclipse.wst.common.project.facet.core.IFacetedProject;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
-import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
-
-/**
- * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
- */
-
-public final class JavaVersionMismatchMarkerResolutions
-
-    implements IMarkerResolutionGenerator
-    
-{
-    public IMarkerResolution[] getResolutions( final IMarker marker )
-    {
-        return new IMarkerResolution[] 
-        { 
-            new Resolution1( marker ), 
-            new Resolution2( marker ) 
-        };
-    }
-    
-    private static final class Resolution1
-    
-        implements IMarkerResolution
-        
-    {
-        private final IMarker marker;
-        
-        public Resolution1( final IMarker marker )
-        {
-            this.marker = marker;
-        }
-        
-        public String getLabel()
-        {
-            final IProjectFacetVersion fv = getProjectFacetVersion();
-            return NLS.bind( Resources.changeFacetVersion, fv );
-        }
-
-        public void run( final IMarker marker )
-        {
-            final Action action
-                = new Action( Action.Type.VERSION_CHANGE, 
-                              getProjectFacetVersion(), null );
-
-            final IProject proj = this.marker.getResource().getProject();
-            
-            try
-            {
-                final IFacetedProject fproj 
-                    = ProjectFacetsManager.create( proj );
-                
-                fproj.modify( Collections.singleton( action ), null );
-            }
-            catch( CoreException e )
-            {
-                ErrorDialog.openError( null, Resources.errorDialogTitle,
-                                       Resources.errorDialogMessage,
-                                       e.getStatus() );
-            }
-        }
-        
-        private IProjectFacetVersion getProjectFacetVersion()
-        {
-            final String level 
-                = this.marker.getAttribute( JavaFacetValidator.ATTR_COMPILER_LEVEL, null );
-            
-            return JavaFacetUtil.compilerLevelToFacet( level );
-        }
-    }
-
-    private static final class Resolution2
-    
-        implements IMarkerResolution
-        
-    {
-        private final IMarker marker;
-        
-        public Resolution2( final IMarker marker )
-        {
-            this.marker = marker;
-        }
-        
-        public String getLabel()
-        {
-            final String level = getCompilerLevel();
-            return NLS.bind( Resources.changeCompilerLevel, level );
-        }
-    
-        public void run( final IMarker marker )
-        {
-            final IProject project = this.marker.getResource().getProject();
-            final String level = getCompilerLevel();
-            
-            try
-            {
-                JavaFacetUtil.setCompilerLevel( project, level );
-                JavaFacetUtil.scheduleFullBuild( project );
-            }
-            catch( CoreException e )
-            {
-                ErrorDialog.openError( null, Resources.errorDialogTitle,
-                                       Resources.errorDialogMessage,
-                                       e.getStatus() );
-            }
-        }
-        
-        private String getCompilerLevel()
-        {
-            final String fvstr
-                = this.marker.getAttribute( JavaFacetValidator.ATTR_FACET_VERSION, null);
-            
-            final IProjectFacetVersion fv = JavaFacet.FACET.getVersion( fvstr );
-            
-            return JavaFacetUtil.facetToCompilerLevel( fv );
-        }
-    }
-    
-    private static final class Resources
-    
-        extends NLS
-        
-    {
-        public static String changeFacetVersion;
-        public static String changeCompilerLevel;
-        public static String errorDialogTitle;
-        public static String errorDialogMessage;
-        
-        static
-        {
-            initializeMessages( JavaVersionMismatchMarkerResolutions.class.getName(), 
-                                Resources.class );
-        }
-    }
-    
-}
diff --git a/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/internal/JavaVersionMismatchMarkerResolutions.properties b/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/internal/JavaVersionMismatchMarkerResolutions.properties
deleted file mode 100644
index 227ca0a..0000000
--- a/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/internal/JavaVersionMismatchMarkerResolutions.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-changeFacetVersion = Change Java project facet version to {0}
-changeCompilerLevel =Change Java compiler level to {0}
-errorDialogTitle = Error
-errorDialogMessage = Failed while applying the quick fix.
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/internal/StandardJreComponentLabelProvider.java b/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/internal/StandardJreComponentLabelProvider.java
deleted file mode 100644
index 8e0685b..0000000
--- a/plugins/org.eclipse.jst.common.project.facet.core/src/org/eclipse/jst/common/project/facet/core/internal/StandardJreComponentLabelProvider.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/******************************************************************************
- * Copyright (c) 2008 BEA Systems, 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:
- *    Konstantin Komissarchik - initial implementation and ongoing maintenance
- ******************************************************************************/
-
-package org.eclipse.jst.common.project.facet.core.internal;
-
-import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.wst.common.project.facet.core.runtime.IRuntimeComponent;
-import org.eclipse.wst.common.project.facet.core.runtime.IRuntimeComponentVersion;
-import org.eclipse.wst.common.project.facet.ui.IRuntimeComponentLabelProvider;
-
-/**
- * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
- */
-
-public final class StandardJreComponentLabelProvider 
-
-    implements IRuntimeComponentLabelProvider 
-    
-{
-    private final IRuntimeComponent rc;
-
-    public StandardJreComponentLabelProvider( final IRuntimeComponent rc ) 
-    {
-        this.rc = rc;
-    }
-
-    public String getLabel() 
-    {
-        final IRuntimeComponentVersion rcv = this.rc.getRuntimeComponentVersion();
-        return "Java Runtime Environment v" + rcv.getVersionString();
-    }
-    
-    public static final class Factory
-    
-        implements IAdapterFactory
-        
-    {
-        private static final Class[] ADAPTER_TYPES = { IRuntimeComponentLabelProvider.class };
-
-        public Class[] getAdapterList()
-        {
-            return ADAPTER_TYPES;
-        }
-
-        public Object getAdapter( final Object adaptableObject, 
-                                  final Class adapterType )
-        {
-            return new StandardJreComponentLabelProvider( (IRuntimeComponent) adaptableObject );
-        }
-    }
-    
-}
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.project.facet.core/META-INF/MANIFEST.MF
index a3c810c..1c6380c 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.project.facet.core/META-INF/MANIFEST.MF
@@ -13,8 +13,8 @@
  org.eclipse.wst.common.project.facet.core.runtime.events,
  org.eclipse.wst.common.project.facet.core.util,
  org.eclipse.wst.common.project.facet.core.util.internal;x-friends:="org.eclipse.wst.common.project.facet.ui,org.eclipse.wst.common.project.facet.core.tests"
-Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0)",
- org.eclipse.core.expressions;bundle-version="[3.2.0,4.0)"
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/about.html b/plugins/org.eclipse.wst.common.project.facet.core/about.html
index 73db36e..2199df3 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/about.html
+++ b/plugins/org.eclipse.wst.common.project.facet.core/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>June 06, 2007</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/schemas/facets.exsd b/plugins/org.eclipse.wst.common.project.facet.core/schemas/facets.exsd
index 06541f0..b117579 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/schemas/facets.exsd
+++ b/plugins/org.eclipse.wst.common.project.facet.core/schemas/facets.exsd
@@ -1,10 +1,10 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.project.facet.core">
+<schema targetNamespace="org.eclipse.wst.common.project.facet.core" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
-      <appInfo>
+      <appinfo>
          <meta.schema plugin="org.eclipse.wst.common.project.facet.core" id="facets" name="Project Facets Extension Point"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          This is the main extension point in the faceted project framework. It is used for defining project facets. A project facet can be thought of as a unit of functionality that the user can add to the project when the functionality is needed.
       </documentation>
@@ -46,9 +46,9 @@
                <documentation>
                   An optional name of the extension instance.
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute translatable="true"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
@@ -272,9 +272,9 @@
                <documentation>
                   The version comparator class name. Has to implement java.util.Comparator&amp;lt;String&amp;gt; interface.
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute kind="java" basedOn="java.util.Comparator"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
@@ -303,9 +303,9 @@
 
    <element name="preset">
       <annotation>
-         <appInfo>
+         <appinfo>
             <meta.element deprecated="true"/>
-         </appInfo>
+         </appinfo>
          <documentation>
             Declares a preset. A preset represents a common configuration of facets and their versions that a user might want to utilize on several projects. Presets can be supplied via this extension point or created by the user.
          </documentation>
@@ -334,6 +334,8 @@
       <complexType>
          <sequence>
             <element ref="label"/>
+            <element ref="fixed" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="preset"/>
          </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
@@ -345,6 +347,18 @@
       </complexType>
    </element>
 
+   <element name="fixed">
+      <complexType>
+         <attribute name="facet" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
    <element name="action">
       <annotation>
          <documentation>
@@ -417,9 +431,9 @@
                <documentation>
                   The config factory class name. Has to implement org.eclipse.wst.common.project.facet.core.IActionConfigFactory interface.
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute kind="java" basedOn="org.eclipse.wst.common.project.facet.core.IActionConfigFactory"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
@@ -437,9 +451,9 @@
                <documentation>
                   The delegate class name. Has to implement org.eclipse.wst.common.project.facet.core.IDelegate interface.
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute kind="java" basedOn="org.eclipse.wst.common.project.facet.core.IDelegate"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
@@ -447,9 +461,9 @@
 
    <element name="event-handler">
       <annotation>
-         <appInfo>
+         <appinfo>
             <meta.element deprecated="true"/>
-         </appInfo>
+         </appinfo>
          <documentation>
             Adds an event handler for one of the events in the faceted project life cycle. The event-handler element can be used standalone or embeded inside the project-facet-version element. If used inside the project-facet-version element, the facet and version attributes are implied and should not be specified.&lt;br/&gt;&lt;br/&gt;
 
@@ -545,9 +559,9 @@
                <documentation>
                   Specifies the version provider that will be consulted in order to determine the default version. If this attribute is used, the &lt;code&gt;version&lt;/code&gt; attribute will be ignored if present.
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute kind="java" basedOn="org.eclipse.wst.common.project.facet.core.IDefaultVersionProvider"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
@@ -593,9 +607,9 @@
 
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="examples"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          &lt;p&gt;The following example illustrates the various facilities exposed by this extension point. This example is taken from the &lt;i&gt;Building Project Facets&lt;/i&gt; tutorial.&lt;/p&gt;
 
@@ -659,9 +673,9 @@
 
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="copyright"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          Copyright (c) 2005-2007 BEA Systems, Inc.
 All rights reserved. This program and the accompanying materials
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/schemas/presets.exsd b/plugins/org.eclipse.wst.common.project.facet.core/schemas/presets.exsd
index 75cf7d6..ebc8395 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/schemas/presets.exsd
+++ b/plugins/org.eclipse.wst.common.project.facet.core/schemas/presets.exsd
@@ -1,10 +1,10 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.wst.common.project.facet.core">
+<schema targetNamespace="org.eclipse.wst.common.project.facet.core" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
-      <appInfo>
+      <appinfo>
          <meta.schema plugin="org.eclipse.wst.common.project.facet.core" id="presets" name="Faceted Project Presets"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          A preset represents a common configuration of facets and their versions that give a user a starting point when configuring a project. Presets can either be static or dynamic. Static presets are fully specified in this extension point. Dynamic presets are created using an extender-supplied factory that can take into account the context in which the preset will be used in. Static presets can also extend other presets.
 
@@ -37,9 +37,9 @@
                <documentation>
                   
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute translatable="true"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
@@ -146,27 +146,27 @@
                <documentation>
                   The name of the factory class.
                </documentation>
-               <appInfo>
+               <appinfo>
                   <meta.attribute kind="java" basedOn="org.eclipse.wst.common.project.facet.core.IPresetFactory"/>
-               </appInfo>
+               </appinfo>
             </annotation>
          </attribute>
       </complexType>
    </element>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="since"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          2.0
       </documentation>
    </annotation>
 
    <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="examples"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          &lt;pre&gt;
 &lt;extension point=&quot;org.eclipse.wst.common.project.facet.core.presets&quot;&gt;
@@ -177,46 +177,31 @@
        versions. If project targets one or more runtime, this preset will contain facets that are specified
        to be the default for the primary runtime. --&gt;
        
-  &lt;preset id=&quot;default.configuration&quot;&gt;
+  &lt;dynamic-preset id=&quot;default.configuration&quot;&gt;
     &lt;factory class=&quot;org.eclipse.wst.common.project.facet.core.internal.DefaultConfigurationPresetFactory&quot;/&gt;
-  &lt;/preset&gt;
+  &lt;/dynamic-preset&gt;
 
   &lt;!-- Creates a preset which extends the &quot;default.configuration&quot; preset and adds two facets. --&gt; 
        
-  &lt;preset id=&quot;my.favorite.preset&quot; extends=&quot;default.configuration&quot;&gt;
+  &lt;static-preset id=&quot;my.favorite.preset&quot; extends=&quot;default.configuration&quot;&gt;
     &lt;label&gt;My Favorite Configuration&lt;/label&gt;
     &lt;description&gt;Here is the description of my favorite configuration.&lt;/description&gt;
     &lt;facet id=&quot;facet_a&quot; version=&quot;1.2&quot;/&gt;
     &lt;facet id=&quot;facet_b&quot; version=&quot;2.0&quot;/&gt;
-  &lt;/preset&gt;
+  &lt;/static-preset&gt;
   
 &lt;/extension&gt;
 &lt;/pre&gt;
       </documentation>
    </annotation>
 
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
+
+
 
    <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
+      <appinfo>
          <meta.section type="copyright"/>
-      </appInfo>
+      </appinfo>
       <documentation>
          Copyright (c) 2005-2007 BEA Systems, Inc.&lt;br/&gt;
 All rights reserved. This program and the accompanying materials
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/DefaultConfigurationPresetFactory.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/DefaultConfigurationPresetFactory.java
index 13bbd84..24f8509 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/DefaultConfigurationPresetFactory.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/DefaultConfigurationPresetFactory.java
@@ -25,9 +25,9 @@
  * 
  * <ol>
  *   <li>If a runtime is selected, this preset will contain default facets as specified by
- *     {@see IRuntime.getDefaultFacets(Set)}.</li>
+ *     {@link IRuntime#getDefaultFacets(Set)}.</li>
  *   <li>If no runtime is selected, this preset will contain default versions for all of the 
- *     fixed facets as specified by {@see IProjectFacet.getDefaultVersion()}.
+ *     fixed facets as specified by {@link IProjectFacet#getDefaultVersion()}.
  * </ol>
  * 
  * @since 3.0
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/DefaultVersionComparator.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/DefaultVersionComparator.java
index b8e6e91..0ab1612 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/DefaultVersionComparator.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/DefaultVersionComparator.java
@@ -83,7 +83,7 @@
      * @param version the full version string
      * @param segment the version segment
      * @param position the position of the segment in the version string
-     * @return the parsed representation of the segment as a {@see Comparable}
+     * @return the parsed representation of the segment as a {@link Comparable}
      * @throws VersionFormatException if encountered an error while parsing
      */
     
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/FacetedProjectFramework.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/FacetedProjectFramework.java
index 4698f4d..6ffb261 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/FacetedProjectFramework.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/FacetedProjectFramework.java
@@ -19,6 +19,7 @@
 import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
 import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectFrameworkImpl;
 import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectNature;
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
 
 /**
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
@@ -35,9 +36,9 @@
      * 
      * <ol>
      *   <li>If a runtime is selected, this preset will contain default facets as specified by
-     *     {@see IRuntime.getDefaultFacets(Set)}.</li>
+     *     {@link IRuntime#getDefaultFacets(Set)}.</li>
      *   <li>If no runtime is selected, this preset will contain default versions for all of the 
-     *     fixed facets as specified by {@see IProjectFacet.getDefaultVersion()}.
+     *     fixed facets as specified by {@link IProjectFacet#getDefaultVersion()}.
      * </ol>
      * 
      * @since 2.0
@@ -65,13 +66,13 @@
      * Project Framework if the project is not faceted. For the code that
      * operates in the context where it can be assumed that the framework has
      * started already, better performance can be achieved by storing 
-     * {@see IProjectFacet} and {@see IProjectFacetVersion} instances using the
+     * {@link IProjectFacet} and {@link IProjectFacetVersion} instances using the
      * singleton pattern and using the
-     * {@see IFacetedProject.hasProjectFacet(IProjectFacet)} or
-     * {@see IFacetedProject.hasProjectFacet(IProjectFacetVersion)} methods.</p>
+     * {@link IFacetedProject#hasProjectFacet(IProjectFacet)} or
+     * {@link IFacetedProject#hasProjectFacet(IProjectFacetVersion)} methods.</p>
      * 
      * <p>This method is equivalent to calling 
-     * {@see hasProjectFacet(IProject,String,String)} with <code>null</code>
+     * {@link #hasProjectFacet(IProject,String,String)} with <code>null</code>
      * version expression parameter.</p>
      * 
      * @param project the project to check for the facet presence
@@ -97,10 +98,10 @@
      * Project Framework if the project is not faceted. For the code that
      * operates in the context where it can be assumed that the framework has
      * started already, better performance can be achieved by storing 
-     * {@see IProjectFacet} and {@see IProjectFacetVersion} instances using the
+     * {@link IProjectFacet} and {@link IProjectFacetVersion} instances using the
      * singleton pattern and using the
-     * {@see IFacetedProject.hasProjectFacet(IProjectFacet)} or
-     * {@see IFacetedProject.hasProjectFacet(IProjectFacetVersion)} methods.</p>
+     * {@link IFacetedProject#hasProjectFacet(IProjectFacet)} or
+     * {@link IFacetedProject#hasProjectFacet(IProjectFacetVersion)} methods.</p>
      * 
      * @param project the project to check for the facet presence
      * @param fid the project facet id
@@ -159,9 +160,9 @@
      * @param types the types of the events to listen for
      * @throws IllegalArgumentException if <code>listener</code> parameter is <code>null</code> or
      *   the <code>types</code> parameter is <code>null</code> or empty.
-     * @see removeListener(IFacetedProjectListener)
-     * @see IFacetedProject.addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
-     * @see IFacetedProject.removeListener(IFacetedProjectListener)
+     * @see #removeListener(IFacetedProjectListener)
+     * @see IFacetedProject#addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
+     * @see IFacetedProject#removeListener(IFacetedProjectListener)
      */
     
     public static void addListener( final IFacetedProjectListener listener,
@@ -180,14 +181,14 @@
     
     /**
      * Removes the faceted project listener that was previously registered using the
-     * {@see addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])} method. If the
+     * {@link #addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])} method. If the
      * specified listener is not present in the listener registry, this call will be ignored.
      * 
      * @param listener the faceted project listener
      * @throws IllegalArgumentException if <code>listener</code> parameter is <code>null</code>
-     * @see addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
-     * @see IFacetedProject.addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
-     * @see IFacetedProject.removeListener(IFacetedProjectListener)
+     * @see #addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
+     * @see IFacetedProject#addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
+     * @see IFacetedProject#removeListener(IFacetedProjectListener)
      */
     
     public static void removeListener( final IFacetedProjectListener listener )
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IConstraint.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IConstraint.java
index 530909d..019eec6 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IConstraint.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IConstraint.java
@@ -17,6 +17,7 @@
 import java.util.Map;
 
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
 
 /**
  * Models a single constraint in the constraint expression. 
@@ -91,9 +92,9 @@
      * Checks this constraint against the given set of project facets.
      * 
      * @param facets a set of project facets
-     * @return a status object with severity of {@see IStatus#OK} if the
-     *   constraint was satisfied or otherwise a {@see MultiStatus} composed of
-     *   {@see ValidationProblem} status objects
+     * @return a status object with severity of {@link IStatus#OK} if the
+     *   constraint was satisfied or otherwise a {@link MultiStatus} composed of
+     *   individual status objects for each of the problems
      */
     
     IStatus check( Collection<IProjectFacetVersion> facets );
@@ -104,9 +105,9 @@
      * @param facets a set of project facets
      * @param validateSoftDependencies if <code>true</code> soft dependencies
      *   will be treated as required
-     * @return a status object with severity of {@see IStatus#OK} if the
-     *   constraint was satisfied or otherwise a {@see MultiStatus} composed of
-     *   {@see ValidationProblem} status objects
+     * @return a status object with severity of {@link IStatus#OK} if the
+     *   constraint was satisfied or otherwise a {@link MultiStatus} composed of
+     *   individual status objects for each of the problems
      */
 
     IStatus check( Collection<IProjectFacetVersion> facets,
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IDynamicPreset.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IDynamicPreset.java
index 6a345c2..b20a283 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IDynamicPreset.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IDynamicPreset.java
@@ -13,9 +13,11 @@
 
 import java.util.Map;
 
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
+
 /**
  * A dynamic preset is type of preset that needs to be resolved before it can be used. The resolve
- * operation relies the {@see IPresetFactory} specified when the dynamic preset is registered via
+ * operation relies the {@link IPresetFactory} specified when the dynamic preset is registered via
  * the <code>presets</code> extension point and can take into account the context in which the 
  * preset will be used. 
  * 
@@ -29,7 +31,7 @@
     
 {
     /**
-     * The key of the context map entry whose value is an {@see IFacetedProjectBase} object.
+     * The key of the context map entry whose value is an {@link IFacetedProjectBase} object.
      * 
      * @since 3.0
      */
@@ -37,14 +39,14 @@
     static final String CONTEXT_KEY_FACETED_PROJECT = "CONTEXT_KEY_FACETED_PROJECT"; //$NON-NLS-1$
     
     /**
-     * The key of the context map entry whose value is a set of {@see IProjectFacet} objects
+     * The key of the context map entry whose value is a set of {@link IProjectFacet} objects
      * representing the fixed facets.
      */
     
     static final String CONTEXT_KEY_FIXED_FACETS = "CONTEXT_KEY_FIXED_FACETS"; //$NON-NLS-1$
     
     /**
-     * The key of the context map entry whose value is the primary runtime ({@see IRuntime}) or
+     * The key of the context map entry whose value is the primary runtime ({@link IRuntime}) or
      * <code>null</code> if no runtime has been selected.
      */
     
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IFacetedProject.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IFacetedProject.java
index 9fdf7e3..aba8ce3 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IFacetedProject.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IFacetedProject.java
@@ -22,7 +22,7 @@
 
 /**
  * This interface is used for manipulating the set of facets installed on a
- * project. Use {@see ProjectFacetsManager#create(IProject)} to get an instance 
+ * project. Use {@link ProjectFacetsManager#create(IProject)} to get an instance 
  * of this interface.
  * 
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
@@ -185,7 +185,7 @@
     
     /**
      * <p>Installs a project facet on this project. This method is equivalent to 
-     * calling the {@see #modify(Set, IProgressMonitor)} method with a single 
+     * calling the {@link #modify(Set, IProgressMonitor)} method with a single 
      * install action.</p>
      * 
      * <p>This method should not be called from the UI thread as it is long-
@@ -209,7 +209,7 @@
     
     /**
      * <p>Uninstalls a project facet from this project. This method is 
-     * equivalent to calling the {@see #modify(Set, IProgressMonitor)} method 
+     * equivalent to calling the {@link #modify(Set, IProgressMonitor)} method 
      * with a single uninstall action.</p>
      * 
      * <p>This method should not be called from the UI thread as it is long-
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IFacetedProjectBase.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IFacetedProjectBase.java
index 9de8a75..fb752bb 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IFacetedProjectBase.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IFacetedProjectBase.java
@@ -22,7 +22,7 @@
 
 /**
  * This interface is used for manipulating the set of facets installed on a
- * project. Use {@see ProjectFacetsManager#create(IProject)} to get an instance 
+ * project. Use {@link ProjectFacetsManager#create(IProject)} to get an instance 
  * of this interface.
  * 
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
@@ -156,9 +156,9 @@
      * @param types the types of the events to listen for
      * @throws IllegalArgumentException if <code>listener</code> parameter is <code>null</code> or
      *   the <code>types</code> parameter is <code>null</code> or empty.
-     * @see removeListener(IFacetedProjectListener)
-     * @see FacetedProjectFramework.addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
-     * @see FacetedProjectFramework.removeListener(IFacetedProjectListener)
+     * @see #removeListener(IFacetedProjectListener)
+     * @see FacetedProjectFramework#addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
+     * @see FacetedProjectFramework#removeListener(IFacetedProjectListener)
      */
     
     void addListener( IFacetedProjectListener listener,
@@ -166,14 +166,14 @@
     
     /**
      * Removes the faceted project listener that was previously registered using the
-     * {@see addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])} method. If the
+     * {@link #addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])} method. If the
      * specified listener is not present in the listener registry, this call will be ignored.
      * 
      * @param listener the faceted project listener
      * @throws IllegalArgumentException if <code>listener</code> parameter is <code>null</code>
-     * @see addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
-     * @see FacetedProjectFramework.addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
-     * @see FacetedProjectFramework.removeListener(IFacetedProjectListener)
+     * @see #addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
+     * @see FacetedProjectFramework#addListener(IFacetedProjectListener,IFacetedProjectEvent.Type[])
+     * @see FacetedProjectFramework#removeListener(IFacetedProjectListener)
      */
     
     void removeListener( IFacetedProjectListener listener );
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IGroup.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IGroup.java
index 6e2ab65..6c972f2 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IGroup.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IGroup.java
@@ -14,7 +14,7 @@
 import java.util.Set;
 
 /**
- * A group is a named collection of {@see IProjectFacetVersion}  objects. It is 
+ * A group is a named collection of {@link IProjectFacetVersion}  objects. It is 
  * used primarily as a parameter to the "requires" and "conflicts" constraints 
  * and allows a level of indirection where a facet does not need to know about 
  * all the members of the group. A given project facet version can belong to 
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IPreset.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IPreset.java
index ac2555a..1a5dddb 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IPreset.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IPreset.java
@@ -41,8 +41,8 @@
         /**
          * Dynamic presets are created by registering a factory in the <code>presets</code>
          * extension point and are not fully specified until they are resolved within the context
-         * of use. To resolve a dynamic preset, cast the preset object to {@see IDynamicPreset} and
-         * then use the {@see IDynamicPreset.resolve(java.util.Map)} method. 
+         * of use. To resolve a dynamic preset, cast the preset object to {@link IDynamicPreset} and
+         * then use the {@link IDynamicPreset#resolve(java.util.Map)} method. 
          */
         
         DYNAMIC,
@@ -64,8 +64,8 @@
     String getId();
     
     /**
-     * Returns the type of the preset. If the preset type is {@see Type.DYNAMIC}, then the preset
-     * object can be cast to {@see IDynamicPreset}.
+     * Returns the type of the preset. If the preset type is {@link Type#DYNAMIC}, then the preset
+     * object can be cast to {@link IDynamicPreset}.
      * 
      * @return the type of the preset
      * @since 2.0
@@ -103,7 +103,7 @@
      * 
      * @return <code>true</code> if the preset is user-defined,
      *   <code>false</code> otherwise
-     * @deprecated use the {@see getType()} method instead
+     * @deprecated use the {@link #getType()} method instead
      */
     
     boolean isUserDefined();
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IPresetFactory.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IPresetFactory.java
index 8e5bb7b..a1f563f 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IPresetFactory.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IPresetFactory.java
@@ -30,7 +30,7 @@
      * The factory method for creating a preset definition. The definition contains all of the 
      * information necessary for the system to create a preset. The factory can take into account 
      * the context that the preset will be used in when creating a preset definition. See
-     * {@see IDynamicPreset} for documentation on what type of information the context can contain.
+     * {@link IDynamicPreset} for documentation on what type of information the context can contain.
      *
      * @param presetId the id of the preset
      * @param context the information about context that this preset will be used in
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IProjectFacet.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IProjectFacet.java
index 636a2a4..7ac330f 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IProjectFacet.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IProjectFacet.java
@@ -143,7 +143,7 @@
     /**
      * Returns the facet version that should be selected by default. If the
      * default version is not explicitly specified in the facet definition, the
-     * latest version (as specified by {@see getLatestVersion()} method) will
+     * latest version (as specified by {@link #getLatestVersion()} method) will
      * be returned. 
      * 
      * @return the facet version that should be selected by default
@@ -168,7 +168,7 @@
     /**
      * Returns the version comparator specified for this project facet. If no 
      * version comparator is specified, this method will return an instance of 
-     * the {@see DefaultVersionComparator}.
+     * the {@link DefaultVersionComparator}.
      * 
      * @return the version comparator specified for this project facet
      */
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IProjectFacetVersion.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IProjectFacetVersion.java
index da5c29f..14f11dc 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IProjectFacetVersion.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/IProjectFacetVersion.java
@@ -88,7 +88,7 @@
      * @param type action type
      * @return <code>true</code> if this project facet supports the provided 
      *   action type, <code>false</code> otherwise
-     * @deprecated use {@link supports( Set, Action.Type)} instead
+     * @deprecated use {@link #supports( Set, IFacetedProject.Action.Type)} instead
      */
     
     boolean supports( Action.Type type );
@@ -118,7 +118,7 @@
     
     /**
      * Returns the action definition corresponding to a particular action type
-     * over this project facet version. The {@link supports( Set, Action.Type )} 
+     * over this project facet version. The {@link #supports( Set, IFacetedProject.Action.Type )} 
      * method can be used to check whether the action is supported prior to
      * calling this method.
      * 
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/MinimalConfigurationPresetFactory.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/MinimalConfigurationPresetFactory.java
index d11804c..de78903 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/MinimalConfigurationPresetFactory.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/MinimalConfigurationPresetFactory.java
@@ -18,6 +18,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.common.project.facet.core.internal.DefaultFacetsExtensionPoint;
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
 
 /**
  * Preset factory for the <code>minimal.configuration</code> preset. This preset only contains
@@ -25,9 +26,9 @@
  * 
  * <ol>
  *   <li>If a runtime is selected, the versions are looked up using 
- *     {@see IRuntime.getDefaultFacets(Set)}.</li>
+ *     {@link IRuntime#getDefaultFacets(Set)}.</li>
  *   <li>If no runtime is selected, this versions are the default versions as specified 
- *     by {@see IProjectFacet.getDefaultVersion()}.
+ *     by {@link IProjectFacet#getDefaultVersion()}.
  * </ol>
  * 
  * @since 3.0
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/PresetDefinition.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/PresetDefinition.java
index f724b27..24c481d 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/PresetDefinition.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/PresetDefinition.java
@@ -17,7 +17,7 @@
 
 /**
  * The preset definition is used in several contexts as a means of describing a preset. It is
- * different from {@see IPreset} in that the preset definition is not an actual preset that's
+ * different from {@link IPreset} in that the preset definition is not an actual preset that's
  * registered with the system. 
  * 
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/ProjectFacetsManager.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/ProjectFacetsManager.java
index 1ff0754..4546ec6 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/ProjectFacetsManager.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/ProjectFacetsManager.java
@@ -19,13 +19,14 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
 import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectFrameworkImpl;
 
 /**
  * This is the entry point to the project facet framework API. From here, you 
  * can (among other things) list available project facets and create instances 
- * of {@see IFacetedProject}.
+ * of {@link IFacetedProject}.
  * 
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
  */
@@ -406,9 +407,9 @@
      *
      * @param base the set of project facets that the actions will be applied to
      * @param actions the set of actions to evaluate
-     * @return a status object with severity of {@see IStatus#OK} if all of the
-     *   constraints were satisfied or otherwise a {@see MultiStatus} composed
-     *   of {@see ValidationProblem} status objects
+     * @return a status object with severity of {@link IStatus#OK} if all of the
+     *   constraints were satisfied or otherwise a {@link MultiStatus} composed of
+     *   individual status objects for each of the problems
      */
     
     public static IStatus check( final Set<IProjectFacetVersion> base,
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectEvent.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectEvent.java
index c34bef9..2bdbec9 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectEvent.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectEvent.java
@@ -38,7 +38,7 @@
         
         /**
          * Type of the event that gets triggered right before a facet is installed. Events of this 
-         * type can be cast to {@see IProjectFacetActionEvent} interface to get additional details 
+         * type can be cast to {@link IProjectFacetActionEvent} interface to get additional details 
          * about the change. 
          */
         
@@ -46,7 +46,7 @@
         
         /**
          * Type of the event that gets triggered right after a facet is installed. Events of this 
-         * type can be cast to {@see IProjectFacetActionEvent} interface to get additional details 
+         * type can be cast to {@link IProjectFacetActionEvent} interface to get additional details 
          * about the change. 
          */
         
@@ -54,7 +54,7 @@
         
         /**
          * Type of the event that gets triggered right before a facet is uninstalled. Events of this 
-         * type can be cast to {@see IProjectFacetActionEvent} interface to get additional details 
+         * type can be cast to {@link IProjectFacetActionEvent} interface to get additional details 
          * about the change. 
          */
         
@@ -62,7 +62,7 @@
         
         /**
          * Type of the event that gets triggered right after a facet is uninstalled. Events of this 
-         * type can be cast to {@see IProjectFacetActionEvent} interface to get additional details 
+         * type can be cast to {@link IProjectFacetActionEvent} interface to get additional details 
          * about the change. 
          */
         
@@ -70,7 +70,7 @@
         
         /**
          * Type of the event that gets triggered right before a facet version is changed. Events of 
-         * this type can be cast to {@see IProjectFacetActionEvent} interface to get additional 
+         * this type can be cast to {@link IProjectFacetActionEvent} interface to get additional 
          * details about the change. 
          */
         
@@ -78,7 +78,7 @@
         
         /**
          * Type of the event that gets triggered right after a facet version is changed. Events of 
-         * this type can be cast to {@see IProjectFacetActionEvent} interface to get additional 
+         * this type can be cast to {@link IProjectFacetActionEvent} interface to get additional 
          * details about the change. 
          */
         
@@ -86,7 +86,7 @@
         
         /**
          * Type of the event that gets triggered when project's fixed facets are changed. Events
-         * of this type can be cast to {@see IFixedFacetsChangedEvent} interface to get additional
+         * of this type can be cast to {@link IFixedFacetsChangedEvent} interface to get additional
          * details about the change.
          */
         
@@ -94,7 +94,7 @@
         
         /**
          * Type of the event that gets triggered when the set of runtimes that the project targets
-         * is changed. Events of this type can be cast to {@see ITargetedRuntimesChangedEvent} 
+         * is changed. Events of this type can be cast to {@link ITargetedRuntimesChangedEvent} 
          * interface to get additional details about the change.
          */
         
@@ -102,7 +102,7 @@
         
         /**
          * Type of the event that gets triggered when the primary targeted runtime of the project
-         * is changed. Events of this type can be cast to {@see IPrimaryRuntimeChangedEvent}
+         * is changed. Events of this type can be cast to {@link IPrimaryRuntimeChangedEvent}
          * interface to get additional details about the change. 
          */
         
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectFrameworkListener.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectFrameworkListener.java
index 4d00c94..28efd2b 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectFrameworkListener.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectFrameworkListener.java
@@ -11,10 +11,13 @@
 
 package org.eclipse.wst.common.project.facet.core.events;
 
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+
 /**
  * This interface is implemented by those who wish to receive events when a faceted project is
- * changed. There are three ways to register a listener: (a) using methods on {@see 
- * IFacetedProject}, (b) using methods on {@see FacetedProjectFramework}, or (c) using the provided
+ * changed. There are three ways to register a listener: (a) using methods on {@link 
+ * IFacetedProject}, (b) using methods on {@link FacetedProjectFramework}, or (c) using the provided
  * extension point. Method (a) catches only events for a specific faceted project while methods
  * (b) and (c) catch events for all faceted projects in the workspace.
  * 
@@ -29,7 +32,7 @@
      * <p>All events except for <code>PROJECT_MODIFIED</code> of this type are triggered in the 
      * lock context of the operation that caused the original change. This guarantees that the 
      * project has not changed further from the state it was in after the change was complete, 
-     * however the listener is unable to call any modifier methods on the {@see IFacetedProject} 
+     * however the listener is unable to call any modifier methods on the {@link IFacetedProject} 
      * interface. To do so, the listener must spin off a thread.</p>
      * 
      * <p>It is highly advised that any listener that performs non-critical or long-running tasks 
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectListener.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectListener.java
index 43ce60a..e673b33 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectListener.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/events/IFacetedProjectListener.java
@@ -11,10 +11,13 @@
 
 package org.eclipse.wst.common.project.facet.core.events;
 
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+
 /**
  * This interface is implemented by those who wish to receive events when a faceted project is
- * changed. There are three ways to register a listener: (a) using methods on {@see 
- * IFacetedProject}, (b) using methods on {@see FacetedProjectFramework}, or (c) using the provided
+ * changed. There are three ways to register a listener: (a) using methods on {@link 
+ * IFacetedProject}, (b) using methods on {@link FacetedProjectFramework}, or (c) using the provided
  * extension point. Method (a) catches only events for a specific faceted project while methods
  * (b) and (c) catch events for all faceted projects in the workspace.
  * 
@@ -29,7 +32,7 @@
      * <p>All events except for <code>PROJECT_MODIFIED</code> of this type are triggered in the 
      * lock context of the operation that caused the original change. This guarantees that the 
      * project has not changed further from the state it was in after the change was complete, 
-     * however the listener is unable to call any modifier methods on the {@see IFacetedProject} 
+     * however the listener is unable to call any modifier methods on the {@link IFacetedProject} 
      * interface. To do so, the listener must spin off a thread.</p>
      * 
      * <p>It is highly advised that any listener that performs non-critical or long-running tasks 
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectAdapter.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectAdapter.java
index f90d1e4..3a8a6b8 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectAdapter.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectAdapter.java
@@ -18,7 +18,7 @@
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 
 /**
- * Adapts {@see IProject} to {@see IFacetedProject}.
+ * Adapts {@link IProject} to {@link IFacetedProject}.
  * 
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
  */
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectFrameworkImpl.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectFrameworkImpl.java
index 26768d3..99510d1 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectFrameworkImpl.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectFrameworkImpl.java
@@ -82,7 +82,7 @@
 import org.osgi.service.prefs.Preferences;
 
 /**
- * The implementation of the {@see ProjectFacetsManager} abstract class.
+ * The implementation of the {@link ProjectFacetsManager} abstract class.
  * 
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
  */
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectWorkingCopy.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectWorkingCopy.java
index d33a5fd..f09c005 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectWorkingCopy.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/FacetedProjectWorkingCopy.java
@@ -1802,30 +1802,41 @@
         throws CoreException
         
     {
-        synchronized( this.lock )
+        final SubMonitor pm = SubMonitor.convert( monitor, 100 );
+        
+        try
         {
-            final SubMonitor pm = SubMonitor.convert( monitor, 100 );
+            // In order to avoid deadlocks, we clone the working copy. This allows us to release
+            // the lock on this working copy while running mergeChanges(). This is important since
+            // mergeChanges() can call out to third-party code.
             
-            try
+            final IFacetedProjectWorkingCopy clone;
+            
+            synchronized( this.lock )
             {
-                final IFacetedProject fpj;
+                clone = clone();
+            }
                 
-                if( this.project == null )
-                {
-                    fpj = ProjectFacetsManager.create( this.projectName,
-                                                       this.projectLocation, 
-                                                       pm.newChild( 10, SubMonitor.SUPPRESS_ALL_LABELS ) );
-                }
-                else
-                {
-                    fpj = this.project;
-                    pm.worked( 10 );
-                }
+            final IFacetedProject fpj;
+            
+            if( this.project == null )
+            {
+                fpj = ProjectFacetsManager.create( this.projectName,
+                                                   this.projectLocation, 
+                                                   pm.newChild( 10, SubMonitor.SUPPRESS_ALL_LABELS ) );
+            }
+            else
+            {
+                fpj = this.project;
+                pm.worked( 10 );
+            }
+            
+            ( (FacetedProject) fpj ).mergeChanges( clone, pm.newChild( 90 ) );
                 
-                ( (FacetedProject) fpj ).mergeChanges( this, pm.newChild( 90 ) );
-                
-                // Make sure that the working copy is still valid after changes are committed.
-                
+            // Reset the working copy so that it can be used again.
+            
+            synchronized( this.lock )
+            {
                 this.project = fpj;
                 this.projectName = null;
                 this.projectNameValidation = Status.OK_STATUS;
@@ -1833,10 +1844,10 @@
                 
                 revertChanges();
             }
-            finally
-            {
-                pm.done();
-            }
+        }
+        finally
+        {
+            pm.done();
         }
     }
     
@@ -1848,8 +1859,6 @@
         {
             synchronized( this.lock )
             {
-                // TODO: Both this method and the clone method ignore the action config objects.
-            
                 setProjectName( fpjwc.getProjectName() );
                 setProjectLocation( fpjwc.getProjectLocation() );
                 setFixedProjectFacets( fpjwc.getFixedProjectFacets() );
@@ -1863,6 +1872,9 @@
                 {
                     setSelectedPreset( selectedPreset.getId() );
                 }
+                
+                this.actions.clear();
+                this.actions.addAll( ( (FacetedProjectWorkingCopy) fpjwc  ).actions );
             }
         }
         finally
@@ -1924,6 +1936,9 @@
                 clone.setSelectedPreset( selectedPreset.getId() );
             }
             
+            clone.actions.clear();
+            clone.actions.addAll( this.actions );
+
             return clone;
         }
     }
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/Group.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/Group.java
index 92b2526..f93d068 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/Group.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/Group.java
@@ -19,7 +19,7 @@
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 
 /**
- * The implementation of the {@see IGroup} interface.
+ * The implementation of the {@link IGroup} interface.
  * 
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
  */
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/UserPreset.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/UserPreset.java
index 7d7116a..cf71da4 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/UserPreset.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/internal/UserPreset.java
@@ -19,7 +19,7 @@
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 
 /**
- * The implementation of the {@see IPreset} interface that's used for user-defined presets.
+ * The implementation of the {@link IPreset} interface that's used for user-defined presets.
  * 
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
  */
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntime.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntime.java
index 0534689..a3821b0 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntime.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntime.java
@@ -27,13 +27,13 @@
  * runtime components. 
  * 
  * <p>This interface is not intended to be implemented outside of this framework. Client code can 
- * get access to <code>IRuntime</code> objects by using methods on the {@see RuntimeManager} 
+ * get access to <code>IRuntime</code> objects by using methods on the {@link RuntimeManager} 
  * class.</p>  
  * 
- * @see RuntimeManager.getRuntimes()
- * @see RuntimeManager.getRuntime(String)
- * @see RuntiemManager.isRuntimeDefined(String)
- * @see RuntimeManager.defineRuntime(String,List<IRuntimeComponent>,Map<String,String>)
+ * @see RuntimeManager#getRuntimes()
+ * @see RuntimeManager#getRuntime(String)
+ * @see RuntimeManager#isRuntimeDefined(String)
+ * @see RuntimeManager#defineRuntime(String,List,Map)
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
  */
 
@@ -52,7 +52,7 @@
     
     /**
      * Returns the localized name of this runtime. If not specified, this will default to the name
-     * of the runtime as returned by the {@see getName()} method. 
+     * of the runtime as returned by the {@link #getName()} method. 
      * 
      * <p>The localized name should be used in all communications with the user while all metadata 
      * references to the runtime should use the unlocalized name. Note that there is an inherent 
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeBridge.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeBridge.java
index 7e9c32a..10b5ad7 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeBridge.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeBridge.java
@@ -33,7 +33,7 @@
      * Returns the set of names for runtimes that this bridge wants to export.
      * The system will try to accommodate these name choices, but may have to
      * disambiguate names due to collisions. However, even if the runtime name
-     * is changed, the name that will be passed into the {@see bridge(String)}
+     * is changed, the name that will be passed into the {@link #bridge(String)}
      * call will be the original name provided by this method call. 
      * 
      * @return the set of names for runtimes that this bridge wants to export
@@ -46,11 +46,11 @@
     
     /**
      * Returns a stub that represents the bridged runtime. The system will
-     * wrap this stub and expose it to the clients through the {@see IRuntime}
+     * wrap this stub and expose it to the clients through the {@link IRuntime}
      * interface.
      * 
      * @param name the name of the bridged runtime (as returned by the
-     *   {@see getExportedRuntimeNames()}) method
+     *   {@link #getExportedRuntimeNames()}) method
      * @return a stub that represents the bridged runtime
      * @throws CoreException if failed while bridging
      */
@@ -61,7 +61,7 @@
     
     /**
      * Represents a single bridged runtime. The system will wrap this interface
-     * and expose it to clients as {@see IRuntime}. All relevant calls will be
+     * and expose it to clients as {@link IRuntime}. All relevant calls will be
      * delegated to this interface.
      * 
      * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
@@ -85,8 +85,7 @@
          * contents will vary depending on how the runtime was created and 
          * what component types/versions it's comprised of.
          * 
-         * @return the properties associated with this runtime (key type: 
-         *   {@see String}, value type: {@see String})
+         * @return the properties associated with this runtime
          */
         
         Map<String,String> getProperties();
@@ -94,7 +93,7 @@
     
     /**
      * Represents a single bridged runtime. The system will wrap this interface
-     * and expose it to clients as {@see IRuntime}. All relevant calls will be
+     * and expose it to clients as {@link IRuntime}. All relevant calls will be
      * delegated to this interface.
      * 
      * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
@@ -123,8 +122,7 @@
          * contents will vary depending on how the runtime was created and 
          * what component types/versions it's comprised of.
          * 
-         * @return the properties associated with this runtime (key type: 
-         *   {@see String}, value type: {@see String})
+         * @return the properties associated with this runtime
          * @since 3.0
          */
         
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponent.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponent.java
index 7285f68..1292c38 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponent.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponent.java
@@ -21,10 +21,10 @@
  * 
  * <p>This interface is not intended to be implemented outside of this framework. Client code can 
  * get access to <code>IRuntimeComponent</code> objects by using methods on the 
- * {@see IRuntime} and {@see RuntimeManager} classes.</p>  
+ * {@link IRuntime} and {@link RuntimeManager} classes.</p>  
  * 
- * @see IRuntime.getRuntimeComponents()
- * @see RuntimeManager.createRuntimeComponent(IRuntimeComponentVersion,Map<String,String>) 
+ * @see IRuntime#getRuntimeComponents()
+ * @see RuntimeManager#createRuntimeComponent(IRuntimeComponentVersion,Map) 
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
  */
 
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponentType.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponentType.java
index 0c548ef..1e0c501 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponentType.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponentType.java
@@ -17,6 +17,7 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.wst.common.project.facet.core.DefaultVersionComparator;
 
 /**
  * Represents the type of a runtime component. A runtime instance is composed of  multiple runtime 
@@ -25,11 +26,11 @@
  * <p>This interface is not intended to be implemented outside of this framework. Runtime component
  * types are declared using <code>org.eclipse.wst.common.project.facet.core.runtimes</code>
  * extension point. Once declared, client code can get access to <code>IRuntimeComponentType</code> 
- * objects by using methods on the {@see RuntimeManager} class.</p>  
+ * objects by using methods on the {@link RuntimeManager} class.</p>  
  *
- * @see RuntimeManager.getRuntimeComponentTypes()
- * @see RuntimeManager.getRuntimeComponentType(String)
- * @see RuntimeManager.isRuntimeComponentTypeDefined(String)
+ * @see RuntimeManager#getRuntimeComponentTypes()
+ * @see RuntimeManager#getRuntimeComponentType(String)
+ * @see RuntimeManager#isRuntimeComponentTypeDefined(String)
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
  */
 
@@ -78,11 +79,11 @@
     boolean hasVersion( String version );
     
     /**
-     * Returns the {@see IRuntimeComponentVersion} object corresponding to the
+     * Returns the {@link IRuntimeComponentVersion} object corresponding to the
      * provided version string.
      * 
      * @param version the version string
-     * @return the {@see IRuntimeComponentVersion} object corresponding to the
+     * @return the {@link IRuntimeComponentVersion} object corresponding to the
      *   provided version string
      * @throws IllegalArgumentException if the version does not exist
      */
@@ -116,7 +117,7 @@
     /**
      * Returns the version comparator specified for this runtime component type.
      * If no version comparator is specified, this method will return an 
-     * instance of the {@see DefaultVersionComparator}.
+     * instance of the {@link DefaultVersionComparator}.
      * 
      * @return the version comparator specified for this runtime component type
      */
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponentVersion.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponentVersion.java
index 7046650..a24d472 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponentVersion.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/IRuntimeComponentVersion.java
@@ -21,14 +21,14 @@
  * versions are declared using <code>org.eclipse.wst.common.project.facet.core.runtimes</code>
  * extension point. Once declared, client code can get access to 
  * <code>IRuntimeComponentVersion</code> objects by using methods on the 
- * {@see IRuntimeComponentType} class.</p>  
+ * {@link IRuntimeComponentType} class.</p>  
  *
- * @see IRuntimeComponentType.getVersions()
- * @see IRuntimeComponentType.getVersions(String)
- * @see IRuntimeComponentType.getVersion(String)
- * @see IRuntimeComponentType.hasVersion(String)
- * @see IRuntimeComponentType.getLatestVersion()
- * @see IRuntimeComponentType.getSortedVersions(boolean)
+ * @see IRuntimeComponentType#getVersions()
+ * @see IRuntimeComponentType#getVersions(String)
+ * @see IRuntimeComponentType#getVersion(String)
+ * @see IRuntimeComponentType#hasVersion(String)
+ * @see IRuntimeComponentType#getLatestVersion()
+ * @see IRuntimeComponentType#getSortedVersions(boolean)
  * @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
  */
 
diff --git a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/RuntimeManager.java b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/RuntimeManager.java
index 0aab848..37588ee 100644
--- a/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/RuntimeManager.java
+++ b/plugins/org.eclipse.wst.common.project.facet.core/src/org/eclipse/wst/common/project/facet/core/runtime/RuntimeManager.java
@@ -54,11 +54,11 @@
     }
     
     /**
-     * Returns the {@see IRuntimeComponentType} object corresponding to the
+     * Returns the {@link IRuntimeComponentType} object corresponding to the
      * specified runtime component type id.
      * 
      * @param id the runtime componenet type id
-     * @return the {@see IRuntimeComponentType} object corresponding to the
+     * @return the {@link IRuntimeComponentType} object corresponding to the
      *   specified runtime componenet type id
      * @throws IllegalArgumentException if the runtime component type id is not
      *   recognized
@@ -148,7 +148,7 @@
     
     /**
      * Creates a new runtime componenet. This method is intended to be used in
-     * conjunction with the {@see defineRuntime(String,List,Map)} method.
+     * conjunction with the {@link #defineRuntime(String,List,Map)} method.
      * 
      * @param rcv the runtime component version
      * @param properties the runtime component properties
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/.project b/plugins/org.eclipse.wst.common.project.facet.doc.api/.project
deleted file mode 100644
index 6a74c76..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common.project.facet.doc.api</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.project.facet.doc.api/META-INF/MANIFEST.MF
deleted file mode 100644
index e4b8e32..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,6 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Vendor: %providerName
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.wst.common.project.facet.doc.api;singleton:=true
-Bundle-Version: 1.0.0.qualifier
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/build.properties b/plugins/org.eclipse.wst.common.project.facet.doc.api/build.properties
deleted file mode 100644
index 41997e1..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/build.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-bin.includes = META-INF/,\
-               content/,\
-               plugin.properties,\
-               plugin.xml,\
-               toc.xml
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/description.html b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/description.html
deleted file mode 100644
index e3c8a66..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/description.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta
-  http-equiv="Content-Type"
-  content="text/html; charset=iso-8859-1">
-<title>Checking WTP out</title>
-<link
-  rel="stylesheet"
-  type="text/css"
-  href="format.css">
-</head>
-
-<body>
-<p class="ueberschrift">Faceted Project Framework</p>
-
-<p>The Faceted Project Framework allows the plugin developer to think of 
-projects as composed of units of functionality, otherwise known as facets, that 
-can be added and removed by the user.</p>
-
-<p>Project facets are most frequently used for adding natures, builders, 
-classpath entries, and resources to a project.</p>
-
-<p>Primary Benefits</p>
-
-<ul>
-  <li>Consistent user experience.</li>
-  <li>Ability to accurately describe capabilities of the runtime platform.</li>
-</ul>
-
-</body>
-</html>
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/downloads/enablement-example.zip b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/downloads/enablement-example.zip
deleted file mode 100644
index 03e7c89..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/downloads/enablement-example.zip
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/enabling-based-on-facets.html b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/enabling-based-on-facets.html
deleted file mode 100644
index 50ce36a..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/enabling-based-on-facets.html
+++ /dev/null
@@ -1,108 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-  
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-  <title>Enabling UI Elements Based on Project Facets</title>
-  <link type="text/css" rel="stylesheet" href="tutorial/tutorial.css"/>
-</head>
-
-<body>
-
-<h1 align="center">Enabling UI Elements Based on Project Facets</h1>
-
-<p>User interface elements often need to be selectively enabled based on the
-presence of a facet in a project. The two most common examples are project 
-properties pages and menu actions associated with a facet. The Faceted Project
-Framework provides a way to do that via a property tester that can be used in
-any extension point that supports the Eclipse Platform's common expression
-language.</p>
-
-<p>
-  <b>Property Name:</b> <code>org.eclipse.wst.common.project.facet.core.projectFacet</code><br/>
-  <b>Property Value:</b> <code>[facet.id](:[version.expr])?</code>
-</p>
-
-<p>As you can see from the format of the property value, you can either test
-using just the project facet id or you can also include a version expression if
-only certain versions should be matched.</p>
-
-<p>The following two examples demonstrate how the facets property tester can be
-used. To explore further, you can also download the 
-<a href="downloads/enablement-example.zip">complete runnable source</a> of these
-examples.</p>
-
-<p><b>Example 1</b></p>
-
-<p>Enables a project properties page based on the presence of a facet. Note the
-use of the <code>forcePluginActivation</code> attribute. This attribute makes
-sure that the property tester will be invoked even if the Faceted Project
-Framework plugins have not been activated yet. Omitting this attribute will cause
-the test expression to return false in that situation. Also note the use of the
-<code>adapt</code> operator to adapt the object to <code>IProject</code>. This
-is necessary as some views may represent project entities using other types. For
-instance, in the JDT's Package Explorer the projects are instances of
-<code>org.eclipse.jdt.core.IJavaProject</code>.</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="<span class="code-text">org.eclipse.ui.propertyPages</span>"&gt;
-  &lt;page
-    id="<span class="code-text">ExampleFacetPropertiesPage</span>"
-    objectClass="<span class="code-text">org.eclipse.core.resources.IProject</span>"
-    adaptable="<span class="code-text">true</span>"
-    name="<span class="code-text">Example Facet Properties</span>"
-    class="<span class="code-text">org.eclipse.wst.project.facet.examples.enablement.ExampleFacetPropertiesPage</span>"&gt;
-    &lt;enabledWhen&gt;
-      &lt;adapt type="<span class="code-text">org.eclipse.core.resources.IProject</span>"&gt;
-        &lt;test 
-          forcePluginActivation="<span class="code-text">true</span>"
-          property="<span class="code-text">org.eclipse.wst.common.project.facet.core.projectFacet</span>"
-          value="<span class="code-text">example.facet1</span>"/&gt;
-      &lt;/adapt&gt;
-    &lt;/enabledWhen&gt;          
-  &lt;/page&gt;
-&lt;/extension&gt;</pre>
-</div>
-
-<p><b>Example 2</b></p>
-
-<p>Enables a menu action if either one of the two facets specified is installed
-in a project. Note the use of a version expression to match only certain versions.</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="<span class="code-text">org.eclipse.ui.popupMenus</span>"&gt;
-  &lt;objectContribution
-    id="<span class="code-text">exampleFacetPopup</span>"
-    objectClass="<span class="code-text">org.eclipse.core.resources.IProject</span>"
-    adaptable="<span class="code-text">true</span>"&gt;
-    &lt;action
-      id="<span class="code-text">exampleFacetPopupAction</span>"
-      label="<span class="code-text">Example Facet Popup</span>"
-      class="<span class="code-text">org.eclipse.wst.project.facet.examples.enablement.ExampleFacetPopupAction</span>"
-      menubarPath="<span class="code-text">additions</span>"
-      enablesFor="<span class="code-text">+</span>"&gt;
-    &lt;/action&gt;
-    &lt;enablement&gt;
-      &lt;adapt type="<span class="code-text">org.eclipse.core.resources.IProject</span>"&gt;
-        &lt;or&gt;
-          &lt;test 
-            forcePluginActivation="<span class="code-text">true</span>"
-            property="<span class="code-text">org.eclipse.wst.common.project.facet.core.projectFacet</span>"
-            value="<span class="code-text">example.facet1:1.0</span>"/&gt;
-          &lt;test 
-            forcePluginActivation="<span class="code-text">true</span>"
-            property="<span class="code-text">org.eclipse.wst.common.project.facet.core.projectFacet</span>"
-            value="<span class="code-text">example.facet2:[1.1-2.2]</span>"/&gt;
-        &lt;/or&gt;
-      &lt;/adapt&gt;
-    &lt;/enablement&gt;
-  &lt;/objectContribution&gt;  
-&lt;/extension&gt;</pre>
-</div>
-
-<br/><br/><br/><br/>
-
-</body>
-
-</html>
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/format.css b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/format.css
deleted file mode 100644
index c02625e..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/format.css
+++ /dev/null
@@ -1,35 +0,0 @@
-/* CSS Document */
-body {
-	font-family: Arial, Helvetica, sans-serif
-}
-
-.ueberschrift {
-	font-family: Arial, Helvetica, sans-serif;
-	font-size: x-large;
-	margin-top: 20px;
-}
-
-.code {
-	font-family: Courier, "Courier New", Arial, Helvetica, sans-serif;
-	font-size: 11px;
-	font-weight: normal;
-	line-height: 16px;
-	color: #0467B4;
-	background-color: #CCCCCC;
-	padding: 5px 7px 5px 13px;
-	border: 1px solid black;
-}
-
-.note {
-	font-size: smaller
-}
-
-.description {
-	font-family: "Times New Roman", Times, serif;
-	font-size: xx-large;
-}
-
-.schema {
-	font-style: italic;
-	font-size: large
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/listeners.html b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/listeners.html
deleted file mode 100644
index a9c725c..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/listeners.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-  
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-  <title>Listening for Changes to Faceted Projects</title>
-  <link type="text/css" rel="stylesheet" href="tutorial/tutorial.css"/>
-</head>
-
-<body>
-
-<style type="text/css">
-  
-  .subHeader
-  {
-    font-size: 16px;
-    font-weight: bold;
-  }
-  
-  .eventsTableHeaderCell
-  {
-    font-weight: bold;
-    border-bottom: 1px solid #000000;
-    padding: 2px;
-  }
-  
-  .eventsTableTypeCell
-  {
-    vertical-align: top;
-    padding-top: 2px;
-    padding-bottom: 2px;
-    padding-left: 2px;
-    padding-right: 20px;
-  }
-  
-  .eventsTableInterfaceCell
-  {
-    vertical-align: top;
-    padding-top: 2px;
-    padding-bottom: 2px;
-    padding-left: 2px;
-    padding-right: 20px;
-  }
-  
-  .eventsTableDescriptionCell
-  {
-    vertical-align: top;
-    padding: 2px;
-  }
-
-</style>
-
-<h1 align="center">Listening for Changes to Faceted Projects</h1>
-
-<p>The Faceted Project Framework provides a facility that will notify any interested parties when
-a change is made to the model of a faceted project. Listeners can be registered either via a direct
-API call or via an extension point. Listeners can be global or scoped to a specific project.</p>
-
-<p class="subHeader">Events</p>
-
-<table style="border-collapse:collapse">
-
-  <tr>
-    <td class="eventsTableHeaderCell">Event Type</td>
-    <td class="eventsTableHeaderCell">Event Object Interface</td>
-    <td class="eventsTableHeaderCell">Description</td>
-  </tr>
-
-  <tr>
-    <td class="eventsTableTypeCell">PROJECT_MODIFIED</td>
-    <td class="eventsTableInterfaceCell">IFacetedProjectEvent</td>
-    <td class="eventsTableDescriptionCell">
-      Gets triggered when faceted project metadata is modified in any way. No detailed information 
-      about the change is provided. Note that while listening for PROJECT_MODIFIED events is 
-      guaranteed to catch all other events, the inverse is not true. Listing on all the other 
-      events is not guaranteed to catch all PROJECT_MODIFIED events. This is because there are 
-      circumstances when the system does not have the details about the type of the change 
-      (such as when the faceted project metadata file is modified on disk).
-    </td>
-  </tr>
-  
-  <tr>
-    <td class="eventsTableTypeCell">PRE_INSTALL</td>
-    <td class="eventsTableInterfaceCell">IProjectFacetActionEvent</td>
-    <td class="eventsTableDescriptionCell">
-      Gets triggered right before a facet is installed.
-    </td>
-  </tr>
-  
-  <tr>
-    <td class="eventsTableTypeCell">POST_INSTALL</td>
-    <td class="eventsTableInterfaceCell">IProjectFacetActionEvent</td>
-    <td>Gets triggered right after a facet is installed.</td>
-  </tr>
-  
-  <tr>
-    <td class="eventsTableTypeCell">PRE_UNINSTALL</td>
-    <td class="eventsTableInterfaceCell">IProjectFacetActionEvent</td>
-    <td class="eventsTableDescriptionCell">
-      Gets triggered right before a facet is uninstalled.
-    </td>
-  </tr>
-  
-  <tr>
-    <td class="eventsTableTypeCell">POST_UNINSTALL</td>
-    <td class="eventsTableInterfaceCell">IProjectFacetActionEvent</td>
-    <td class="eventsTableDescriptionCell">
-      Gets triggered right after a facet is uninstalled.
-    </td>
-  </tr>
-  
-  <tr>
-    <td class="eventsTableTypeCell">PRE_VERSION_CHANGE</td>
-    <td class="eventsTableInterfaceCell">IProjectFacetActionEvent</td>
-    <td class="eventsTableDescriptionCell">
-      Gets triggered right before a facet version is changed.
-    </td>
-  </tr>
-  
-  <tr>
-    <td class="eventsTableTypeCell">POST_VERSION_CHANGE</td>
-    <td class="eventsTableInterfaceCell">IProjectFacetActionEvent</td>
-    <td class="eventsTableDescriptionCell">
-      Gets triggered right after a facet version is changed.
-    </td>
-  </tr>
-  
-  <tr>
-    <td class="eventsTableTypeCell">FIXED_FACETS_CHANGED</td>
-    <td class="eventsTableInterfaceCell">IFixedFacetsChangedEvent</td>
-    <td class="eventsTableDescriptionCell">
-      Gets triggered when project's fixed facets are changed.
-    </td>
-  </tr>
-  
-  <tr>
-    <td class="eventsTableTypeCell">TARGETED_RUNTIMES_CHANGED</td>
-    <td class="eventsTableInterfaceCell">ITargetedRuntimesChangedEvent</td>
-    <td class="eventsTableDescriptionCell">
-      Gets triggered when the set of runtimes that the project targets is changed.
-    </td>
-  </tr>
-  
-  <tr>
-    <td class="eventsTableTypeCell">PRIMARY_RUNTIME_CHANGED</td>
-    <td class="eventsTableInterfaceCell">IPrimaryRuntimeChangedEvent</td>
-    <td class="eventsTableDescriptionCell">
-      Gets triggered when the primary targeted runtime of the project is changed.
-    </td>
-  </tr>
-    
-</table>
-
-<p class="subHeader">Registering a Listener</p>
-
-<p>All listeners have to implement <code>IFacetedProjectListener</code> interface which looks like
-this:</p>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">package</span> org.eclipse.wst.common.project.facet.core.events;
-
-<span class="java-keyword">public interface</span> IFacetedProjectListener 
-{
-    <span class="java-keyword">void</span> handleEvent( IFacetedProjectEvent event );
-}
-</pre>
-</div>
-
-<p>Depending on the event type, it may be possible to cast the event object to a more specific
-interface in order to get details about the event. See the event table for information about which
-event object interface corresponds with which event type.</p>
-
-<p>There are three ways to register a listener:</p>
-
-<ol>
-  <li>IFacetedProject.addListener()</li>
-  <li>FacetedProjectFramework.addListener()</li>
-  <li>Extension Point: org.eclipse.wst.common.project.facet.core.listeners</p>
-</ol>
-
-<p>All of these methods allows you to specify which events the listener should be notified about. 
-Not specifying event types on registration will cause the listener to be notified about all events. 
-This is typically not desired. If a listener needs to react to any change in the project and has no 
-need to analyze specific events, it should be registered for the <code>PROJECT_MODIFIED</code> 
-event.</p>
-
-<p>The first method registers a listener that is scoped to a specific project. The last two
-register a global listener which will be notified about changes in all faceted projects that are
-present in the workspace. In most circumstances, if a global listener is needed, it should be 
-registered via the extension point rather than using <code>FacetedProjectFramework.addListener()</code>
-API. Using the extension point guarantees that the listener will not miss any events due to not
-being registered early enough. It also delays initialization of the plugin bundle containing the
-listener until an event that the listener is interested in is fired.</p>
-
-<p class="subHeader">Extension Point</p>
-
-<p>The extension point that's used for registering listeners is quite simple. Only two pices of
-information need to be supplied: the listener class name and an optional list of event types.</p>
-
-<div class="code">
-<pre class="xml-code">&lt;extension point="<span class="code-text">org.eclipse.wst.common.project.facet.core.listeners</span>"&gt;
-  &lt;listener 
-    class="<span class="code-text">{class:org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener}</span>"
-    eventTypes="<span class="code-text">{event.types}</span>"/> <i>(1 or more)</i>
-&lt;extension&gt;
-</pre>
-</div>
-
-<p>The <code>eventTypes</code> attribute value should be a comma-separated list of event types.</p>
-
-<p class="subHeader">Examples</p>
-
-<p>This example registers a very simple listener that prints out events received. The listener is
-registered several different ways for the purposes of this example.</p>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">package</span> com.mycorp.myproduct;
-
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
-
-<span class="java-keyword">public final class</span> ListenerImpl <span class="java-keyword">implements</span> IFacetedProjectListener 
-{
-    <span class="java-keyword">public void</span> handleEvent( <span class="java-keyword">final</span> IFacetedProjectEvent event )
-    {
-        System.out.println( event.toString() );
-    }
-}
-</pre>
-</div>
-
-<p>The following code snippet registers the above listener on a specific project to listen for
-changes in the runtimes that the project targets.</p>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">import</span> org.eclipse.core.resources.IProject;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.IFacetedProject;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
-
-...
-
-IProject pj;
-
-...
-
-<span class="java-keyword">final</span> IFacetedProject fpj = ProjectFacetsManager.create( pj );
-<span class="java-keyword">final</span> ListenerImpl listener = <span class="java-keyword">new</span> ListenerImpl();
-
-fpj.addListener( listener, 
-                 IFacetedProjectEvent.Type.TARGETED_RUNTIMES_CHANGED,
-                 IFacetedProjectEvent.Type.PRIMARY_RUNTIME_CHANGED );
-                 
-...
-
-fpj.removeListener( listener );
-</pre>
-</div>
-
-<p>The following code snippet register the above listener to listen for the PRE_INSTALL and
-PRE_UNINSTALL events in all faceted projects.</p>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
-
-...
-
-<span class="java-keyword">final</span> ListenerImpl listener = <span class="java-keyword">new</span> ListenerImpl();
-
-FacetedProjectFramework.addListener( listener, 
-                                     IFacetedProjectEvent.Type.PRE_INSTALL,
-                                     IFacetedProjectEvent.Type.PRE_UNINSTALL );
-                 
-...
-
-FacetedProjectFramework.removeListener( listener );
-</pre>
-</div>
-
-<p>The following code snippet accomplishes the same thing as the one above, except it does this
-via the extension point.</p>
-
-<div class="code">
-<pre class="xml-code">&lt;extension point="<span class="code-text">org.eclipse.wst.common.project.facet.core.listeners</span>"&gt;
-  &lt;listener class="<span class="code-text">com.mycorp.myproduct.ListenerImpl</span>" eventTypes="<span class="code-text">PRE_INSTALL,PRE_UNINSTALL</span>"/>
-&lt;extension&gt;
-</pre>
-</div>
-
-<br/><br/><br/><br/>
-
-</body>
-
-</html>
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/questions.html b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/questions.html
deleted file mode 100644
index b48b0d9..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/questions.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-  
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-  <title>Questions &amp; Answers</title>
-  <link rel="stylesheet" type="text/css" href="tutorial/tutorial.css"/>
-</head>
-</head>
-
-<body>
-
-<h1 align="center">Questions &amp; Answers</h1>
-
-<p><b><a name="configure.facets.button">Question: I'd like to be able to configure my 
-facet after it is installed using the Project Facets property page or the 
-Add/Remove Facets wizard. Why isn't there a configure button?</b></p>
-
-<p><b>Answer:</b> The Project Facets property page and the Add/Remove Facets wizard
-are intended for managing the set of facets that are installed on a project. 
-When configuration of an installed facet needs to be changed, the expectation is
-that the facet author will use existing Eclipse facilities to provide project
-property pages. For example, the <code>jst.java</code> facet is configured using 
-the <i>Java Build Path</i>, <i>Java Code Style</i>, and <i>Java Compiler</i> 
-property pages.</p>
-
-<br/><br/><br/>
-
-</body>
-
-</html>
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen01.gif b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen01.gif
deleted file mode 100644
index 6d8bfb7..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen01.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen02.gif b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen02.gif
deleted file mode 100644
index a481aef..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen02.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen03.gif b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen03.gif
deleted file mode 100644
index c61e29e..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen03.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen04.gif b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen04.gif
deleted file mode 100644
index fae4b62..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen04.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen05.gif b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen05.gif
deleted file mode 100644
index b33903e..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen05.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen06.gif b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen06.gif
deleted file mode 100644
index 977690b..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen06.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen07.gif b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen07.gif
deleted file mode 100644
index 3133e18..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen07.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen08.gif b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen08.gif
deleted file mode 100644
index e4040ca..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/images/screen08.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/materials/solution.zip b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/materials/solution.zip
deleted file mode 100644
index 499b7dc..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/materials/solution.zip
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/materials/starter.zip b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/materials/starter.zip
deleted file mode 100644
index bc20cab..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/materials/starter.zip
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/tutorial.css b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/tutorial.css
deleted file mode 100644
index 27036ad..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/tutorial.css
+++ /dev/null
@@ -1,120 +0,0 @@
-p, table, td, th {  font-family: arial, helvetica, geneva; font-size: 10pt}
-pre {  font-family: "Courier New", Courier, mono; font-size: 10pt}
-h2 { font-family: arial, helvetica, geneva; font-size: 18pt; font-weight: bold; line-height: 14px; margin-top: 30px}
-code {  font-family: "Courier New", Courier, mono; font-size: 10pt}
-sup {  font-family: arial,helvetica,geneva; font-size: 10px}
-h3 {  font-family: arial, helvetica, geneva; font-size: 14pt; font-weight: bold}
-li {  font-family: arial, helvetica, geneva; font-size: 10pt}
-h1 {  font-family: arial, helvetica, geneva; font-size: 28px; font-weight: bold}
-body {  font-family: arial, helvetica, geneva; font-size: 10pt; clip:   rect(   ); margin-top: 5mm; margin-left: 3mm}
-.indextop { font-size: x-large;; font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: bold}
-.indexsub { font-size: xx-small;; font-family: Arial, Helvetica, sans-serif; color: #8080FF}
-
-pre {
-    padding: 0px;
-    margin-top: 0px;
-    margin-left: 0px;
-    margin-bottom: 0px;
-    margin-right: 0px;
-    text-align: left;
-}
-
-.code {
- 	border: 1px dashed #3c78b5;
-    font-size: 11px;
-	font-family: Courier;
-    margin: 10px;
-	line-height: 13px;
-    text-align: left;
-    background-color: #f0f0f0;
-    padding: 10px;
-}
-
-.code-xml {
-  color: #000000;
-}
-
-.schema-type
-{
-  color: #009100;
-  background-color: inherit;
-}
-
-.schema-type-link a:link
-{
-  color: #009100;
-  text-decoration: none
-}
-
-.schema-type-link a:visited
-{
-  color: #009100;
-  text-decoration: none
-}
-
-.schema-control {
-  color: #009100;
-  font-style: italic;
-  background-color: inherit;
-}
-
-.code-text {
-  color: #009100;
-  background-color: inherit;
-}
-
-.context-code {
-  color: #767676;
-  background-color: inherit;
-}
-
-.xml-text
-{
-  color: #009100;
-}
-
-.java-code 
-{
-  color: #000000;
-}
-
-.java-comment 
-{
-  color: #009100;
-}
-
-.java-javadoc-keyword
-{
-  font-weight: bold;
-}
-
-.java-keyword
-{
-  color: #7f0055;
-  font-weight: bold;
-}
-
-.java-literal
-{
-  color: #009100;
-}
-
-.java-context
-{
-  color: #767676;
-}	
-
-.java-context-keyword
-{
-  font-weight: bold;
-}	
-
-.screen-shot 
-{
-    margin: 10px;
-}
-
-.block-indent 
-{
-    margin: 10px;
-}
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/tutorial.html b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/tutorial.html
deleted file mode 100644
index e2dc7fe..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/tutorial/tutorial.html
+++ /dev/null
@@ -1,1203 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-  
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-  <title>Extending WTP Using Project Facets</title>
-  <link type="text/css" rel="stylesheet" href="tutorial.css"/>
-</head>
-
-<body>
-
-<h1 align="center">Extending WTP Using Project Facets</h1>
-
-<blockquote>
-<b>Summary</b><br/>
-The Faceted Project Framework allows the plugin developer to think of Web Tools 
-Platform (WTP) projects as composed of units of functionality, otherwise known 
-as facets, that can be added and removed by the user. This tutorial walks you 
-through an example of creating a couple of basic facets and in the process 
-covers the majority of the framework's extension points. This tutorial has been
-written for version 1.5 of the Web Tools Platform.
-<br/><br/>
-
-<b>Konstantin Komissarchik</b><br/>
-BEA Systems, Inc.<br/>
-September 5, 2006
-</blockquote>
-
-<hr width="100%">
-
-<h2>Introduction</h2>
-
-<p>Faceted Project Framework provides a powerful mechanism for extending the
-capabilities of the Web Tools Platform. Project facets are typically used as
-a way of adding functionality to a project. When a facet is added to the
-project it can perform any necessary setup actions such as copying resources, 
-installing builders, adding natures, etc. Facets can also be used as markers for
-enabling user interface elements.</p>
-
-<p>Some of the readers may be wondering how
-facets are different from the project natures which are supported by the Eclipse
-platform. Natures are designed to be hidden from user's view. They are
-essentially markers that are set behind the scenes by tooling. Project facets,
-on the other hand, have been designed from the ground up to be manipulated by
-the end users. The Faceted Project Framework provides all the necessary user 
-interface elements for managing the facets on a project and since facets
-are self describing the user is prevented from creating invalid configurations.
-Basically, it is no longer necessary to write custom project creation wizards or
-the "Enable Feature X" menu actions. Common way of managing which facets are
-installed on a project means less burden on the plugin writer and better end user
-experience.</p>
-
-<p>This tutorial covers the extension points and Java API that are used for 
-creating project facets. The reader is assumed to be already familiar with 
-developing plugins for Eclipse and to have user-level knowledge of the Web Tools 
-Platform.</p>
-
-<h2>Tutorial Scenario</h2>
-
-<p>You are a developer for a company which develops a product called
-FormGen. FormGen is basically a servlet that generates HTML forms based on XML
-definition files. The product is composed of a jar containing the servlet and
-some basic widgets. There is also an add-on jar with some extra widgets. Users
-have been manually adding the jars into the WEB-INF/lib directories of their
-web projects and setting up the servlet definitions in web.xml by hand. Your
-task is to make this setup easier by writing a couple of project facets that
-will perform these actions automatically.</p>
-
-<h2>Table of Contents</h2>
-
-<div class="block-indent">
-1. <a href="#getting.started">Getting Started</a><br/>
-2. <a href="#creating.basic.facets">Creating Basic Facet Definitions</a><br/>
-3. <a href="#specifying.constraints">Specifying Constraints</a><br/>
-4. <a href="#implementing.actions">Implementing Actions</a><br/>
-5. <a href="#creating.categories">Creating Categories</a><br/>
-6. <a href="#decorating">Decorating</a><br/>
-7. <a href="#adding.wizard.pages">Adding Wizard Pages</a><br/>
-8. <a href="#defining.presets">Defining Presets</a><br/>
-9. <a href="#runtime.mappings">Specifying Runtime Support Mappings</a><br/>
-10. <a href="#summary">Summary</a><br/>
-Appendix A: <a href="#custom.version.comparators">Custom Version Comparators</a><br/>
-Appendix B: <a href="#version.expressions">Version Expressions</a><br/>
-Appendix C: <a href="#property.tester">Property Tester</a><br/>
-Appendix D: <a href="#wizard.context">Wizard Context</a><br/>
-</div>
-
-<h2><a name="getting.started">1. Getting Started</a></h2>
-
-<p>To follow along with this tutorial, you will need to have a working install 
-of Web Tools Platform v1.5. The tutorial is not designed to be used with 1.0.x
-version of WTP as there are numerous extension point and API differences. You 
-can download the install kits for WTP and its prerequisites, including Eclipse 
-Platform v3.2, at the following locations:</p>
-
-<ul>
-  <li><a href="http://download.eclipse.org/eclipse/downloads/">Eclipse Platform Download Site</a></li>
-  <li><a href="http://download.eclipse.org/webtools/downloads/">Web Tools Platform Download Site</a></li>
-</ul>
-
-<p>Once the required software has been installed you will need to
-create a new workspace and add the <a href="materials/starter.zip">starter project</a>
-to it. The starter project includes the materials and utility code that will
-be used in this tutorial. If you get stuck at any point you can take a peek at
-the <a href="materials/solution.zip">solution project</a>.</p>
-
-<h2><a name="creating.basic.facets">2. Creating Basic Facet Definitions</a></h2>
-
-<p>Project facets are declared via the <code>org.eclipse.wst.common.project.facet.core.facets</code>
-extension point. This is a pretty large extension point with lots of facilities,
-but we will start small and progress incrementally while building the tutorial
-facets. Here is the part of the schema that we will be working with initially:</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-
-  &lt;project-facet id="<span class="schema-type">{string}</span>"&gt; <span class="schema-control">(0 or more)</span>
-    &lt;label&gt;<span class="schema-type">{string}</span>&lt;/label&gt;
-    &lt;description&gt;<span class="schema-type">{string}</span>&lt;/description&gt; <span class="schema-control">(optional)</span>
-  &lt;/project-facet&gt;
-
-  &lt;project-facet-version facet="<span class="schema-type">{string}</span>" version="<span class="schema-type">{string}</span>"/&gt; <span class="schema-control">(0 or more)</span>
-  
-&lt;/extension&gt;</pre>
-</div>
-
-<p>As you can see, there are two top-level elements in this part of the extension
-point schema. The <code>&lt;project-facet&gt;</code> element is used to declare
-the facet itself. The <code>&lt;project-facet-version&gt;</code> element is used
-to declare versions of the facet. Every facet implementation needs to provide
-at least one facet version declaration. In fact, as you will see later in this
-tutorial, the bulk of the work happens in the <code>&lt;project-facet-version&gt;</code>
-declaration. For now all you need to remember is that a facet cannot be used
-unless it has at least one version.</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="<span class="code-text">org.eclipse.wst.common.project.facet.core.facets</span>"&gt;
-
-  &lt;project-facet id="<span class="code-text">formgen.core</span>"&gt;
-    &lt;label&gt;<span class="code-text">FormGen Core</span>&lt;/label&gt;
-    &lt;description&gt;
-      <span class="code-text">Enables generation of HTML forms based on XML definition files.</span>
-    &lt;/description&gt;
-  &lt;/project-facet&gt;
-
-  &lt;project-facet-version facet="<span class="code-text">formgen.core</span>" version="<span class="code-text">1.0</span>"/&gt;
-
-  &lt;project-facet id="<span class="code-text">formgen.ext</span>"&gt;
-    &lt;label&gt;<span class="code-text">FormGen Extensions</span>&lt;/label&gt;
-    &lt;description&gt;
-      <span class="code-text">Enables additional FormGen widgets.</span>
-    &lt;/description&gt;
-  &lt;/project-facet&gt;
-
-  &lt;project-facet-version facet="<span class="code-text">formgen.ext</span>" version="<span class="code-text">1.0</span>"/&gt;
-  
-&lt;/extension&gt;</pre>
-</div>
-
-<p>Insert the above code into your plugin.xml file and lets see it in action.
-Launch Eclipse with your FormGen plugin and then open the Dynamic Web Project
-wizard. Make sure that <code>&lt;none&gt;</code> is selected in the Target Runtime
-field on the first page and go to the second page. You should see a screen that
-looks like the following. Note that the FormGen facets that you have created
-are displayed.</p>
-
-<div class="screen-shot"><img src="images/screen01.gif"/></div>
-
-<h2><a name="specifying.constraints">3. Specifying Constraints</a></h2>
-
-<p>One of the problems with what we have so far is that the FormGen facets
-appear in other module project wizards such as the EJB Project Wizard. That, of
-course, makes no sense since FormGen is servlet-based technology and so is only
-applicable to J2EE web applications. To solve this problem we will use the 
-constraint mechanism to specify the dependencies.</p>
-
-<p>Here is what that part of the extension point schema looks like:</p>
-
-<div class="code">
-<pre class="code-xml"><span class="context-code">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  &lt;project-facet-version&gt;</span>
-    &lt;constraint&gt; <span class="schema-control">(optional)</span>
-      <span class="schema-control">[expr]</span>
-    &lt;/constraint&gt;
-  <span class="context-code">&lt;/project-facet-version&gt;
-&lt;/extension&gt;</span>
-
-<span class="schema-control">[expr] =</span>
-  &lt;requires facet="<span class="schema-type">{string}</span>" version="<span class="schema-type"><span class="schema-type-link">{<a href="#version.expressions">version.expr</a>}</span></span>" soft="<span class="schema-type">{boolean}</span>"/&gt; <span class="schema-control">or</span>
-  &lt;conflicts facet="<span class="schema-type">{string}</span>" version="<span class="schema-type"><span class="schema-type-link">{<a href="#version.expressions">version.expr</a>}</span></span>"/&gt; <span class="schema-control">or</span>
-  &lt;conflicts group="<span class="schema-type">{string}</span>"/&gt; <span class="schema-control">or</span>
-  &lt;and&gt;
-    <span class="schema-control">[expr]</span> <span class="schema-control">(1 or more)</span>
-  &lt;/and&gt; <span class="schema-control">or</span>
-  &lt;or&gt;
-    <span class="schema-control">[expr]</span> <span class="schema-control">(1 or more)</span>
-  &lt;/or&gt;</pre>
-</div>
-
-<p>As you can see, the constraint is an expression tree and you have four
-operators at your disposal. Lets go over them one by one.</p>
-
-<div style="margin-left: 10px">
-<p><b>requires</b></p>
-
-<p>The <code>requires</code> operator is the most frequently used of all the operators. 
-It is used to specify a dependency on another facet. If the <code>version</code>
-attribute is not specified, any version of the referenced facet will satisfy
-the constraint. If only specific versions will do, the <code>version</code> 
-attribute can contain a <a href="#version.expressions">version expression</a>.</p>
-
-<p>The <code>soft</code> attribute is used to create a special kind of a
-dependency. Facet selection will not be prevented if the dependency is not
-met, but if the dependency is met, the facet is guaranteed to be installed
-after the referenced facet.</p>
-
-<p><b>conflicts</b></p>
-
-<p>The <code>conflicts</code> constraint is used to indicate that the declaring
-facet will not work correctly if installed into the same project as referenced
-facets. The <code>conflicts</code> constraint comes in two flavors. You can
-either specify a conflict with a single facet or with a group of facets.</p>
-
-<p>What are groups of facets? Facet groups are a way to designate a conflict with
-a certain class of facets without having to list all of the facets explicitly.
-For instance, the WTP module facets all belong to the "modules" group. They also
-each declare a conflict with the "modules" group. This prevents two module facets
-from being installed into the same project. By declaring a conflict with a
-group whose membership can expand as necessary, third parties can add module
-facets on top of WTP and have the new facets interact correctly with the
-built-in module facets.</p>
-
-<p>A facet group is created the first time a facet declares group membership.
-Here is the extension point schema for declaring group membership:</p>
-
-<div class="code">
-<pre class="code-xml"><span class="context-code">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  &lt;project-facet-version&gt;</span>
-    &lt;group-member id="<span class="schema-type">{string}</span>"/&gt; <span class="schema-control">(0 or more)</span>
-  <span class="context-code">&lt;/project-facet-version&gt;
-&lt;/extension&gt;</span>
-</pre>
-</div>
-
-<p><b>and &amp; or</b>
-
-<p>The <code>and</code> &amp; <code>or</code> constraints are used to perform 
-logical conjunction and disjunction over their operands. Although it is legal
-for these operators to have only one operand, typically they will have two or
-more.</p>
-</div>
-
-<p>We can now specify the constraints for the FormGen facets. The facet id that
-marks a project as a J2EE web module is <code>jst.web</code>. We will setup
-a dependency on it from the <code>formgen.core</code> facet. The
-<code>formgen.ext</code> facet can then depend on the <code>formgen.ext</code>
-facet. That latter constraint will ensure that the FormGen Extensions
-are not installed without installing FormGen Core.</p>
-
-<div class="code">
-<pre class="code-xml"><span class="context-code">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-
-  &lt;project-facet-version id="formgen.core" version="1.0"&gt;</span>
-    &lt;constraint&gt;
-      &lt;requires facet="<span class="xml-text">jst.web</span>" version="<span class="xml-text">2.2,2.3,2.4</span>"/&gt;
-    &lt;/constraint&gt;
-  <span class="context-code">&lt;/project-facet&gt;
-
-  &lt;project-facet-version id="formgen.ext" version="1.0"&gt;</span>
-    &lt;constraint&gt;
-      &lt;requires facet="<span class="xml-text">formgen.core</span>" version="<span class="xml-text">1.0</span>"/&gt;
-    &lt;/constraint&gt;
-  <span class="context-code">&lt;/project-facet&gt;
-  
-&lt;/extension&gt;</span></pre>
-</div>
-
-<p>Once the above code is added, the FormGen facets should only appear in the
-Dynamic Web Project wizard.</p>
-
-<h2><a name="implementing.actions">4. Implementing Actions</a></h2>
-
-<p>Let's now try selecting the FormGen Core facet on the facets selection page
-of the Dynamic Web Project wizard. If you do that, you should see the
-following error message appear.</p>
-
-<div class="screen-shot"><img src="images/screen02.gif"/></div>
-
-<p>This error message is displayed because the install action has not been
-implemented for this facet. What's an action? An action is an operation that a
-user can perform on a facet. There are three action types <code>INSTALL</code>,
-<code>UNINSTALL</code>, and <code>VERSION_CHANGE</code>. We will now implement
-the install actions for the FormGen facets.</p>
-
-<p>Here is what that part of the extension point schema looks like:</p>
-
-<div class="code">
-<pre class="code-xml"><span class="context-code">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;</span>
-  &lt;action id="<span class="schema-type">{string}</span>" facet="<span class="schema-type">{string}</span>" version="<span class="schema-type"><span class="schema-type-link">{<a href="#version.expressions">version.expr</a>}</span></span>" type="<span class="schema-type">INSTALL|UNINSTALL|VERSION_CHANGE</span>"&gt;
-    &lt;delegate class="<span class="schema-type">{class:org.eclipse.wst.common.project.facet.core.IDelegate}</span>"/&gt;
-    &lt;property name="<span class="schema-type">{string}</span>" value="<span class="schema-type">{string}</span>"/&gt; <span class="schema-control">(0 or more)</span>
-  &lt;/action&gt;
-<span class="context-code">&lt;/extension&gt;</span>
-</pre>
-</div>
-
-<ul>
-
-  <li><p>The version attribute can contain a single version or a <a href="#version.expressions">version expression</a>.
-    It can also be omitted if the action applies to all versions of the facet.</p></li>
-    
-  <li><p>The <code>id</code> attribute is optional. If not specified, the framework
-    will automatically generate one using the following pattern:</p>
-    <p><code>[facet-id]#[version-expression]#[action-type](#[prop-name]=[prop-value])*</code></p>
-    <p>As you can see, it is better to provide an explicit id rather than letting
-    the framework generate it. Later in the tutorial we will cover extension
-    points that make references to action ids.</p>
-  
-  <li><p>The <code>&lt;action&gt;</code> element can also be embeded inside the
-    <code>&lt;project-facet-version&gt;</code> element. In that case, the
-    <code>facet</code> and <code>version</code> attributes should be omitted.
-    Note that if the same delegate implementation applies to multiple facet 
-    versions, it is better to provide a single action declaration externally.
-    This allows the framework to perform certain kinds of optimizations</p></li>
-    
-  <li><p>For the <code>VERSION_CHANGE</code> action, it is possible to restrict
-    the applicability of the action definition with regards to the starting
-    version. To do that, simply specify "from.versions" property in the action
-    definition. The value is a <a href="#version.expressions">version expression</a>.
-    If this property is not specified, the framework will assume that the delegate
-    is capable of converting from any starting version.</p></li>
-    
-</ul>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">package</span> org.eclipse.wst.common.project.facet.core;
-
-<span class="java-keyword">import</span> org.eclipse.core.resources.IProject;
-<span class="java-keyword">import</span> org.eclipse.core.runtime.CoreException;
-<span class="java-keyword">import</span> org.eclipse.core.runtime.IProgressMonitor;
-
-<span class="java-comment">/**
- * This interface is implemented in order to provide logic associated with
- * a particular event in project facet's life cycle, such as install or 
- * uninstall.
- */</span>
-
-<span class="java-keyword">public interface</span> IDelegate 
-{
-    <span class="java-comment">/**
-     * The method that's called to execute the delegate.
-     * 
-     * <span class="java-javadoc-keyword">@param</span> project the workspace project
-     * <span class="java-javadoc-keyword">@param</span> fv the project facet version that this delegate is handling; this
-     *   is useful when sharing the delegate among several versions of the same
-     *   project facet or even different project facets
-     * <span class="java-javadoc-keyword">@param</span> config the configuration object, or <code>null</code> if defaults
-     *   should be used
-     * <span class="java-javadoc-keyword">@param</span> monitor the progress monitor
-     * <span class="java-javadoc-keyword">@throws</span> CoreException if the delegate fails for any reason
-     */</span>
-    
-    <span class="java-keyword">void</span> execute( IProject project,
-                  IProjectFacetVersion fv,
-                  Object config,
-                  IProgressMonitor monitor )
-    
-        <span class="java-keyword">throws</span> CoreException;
-}
-</pre>
-</div>
-
-<p>Let's now dive in and implement the install delegates for the FormGen facets.
-The <code>formgen.core</code> facet should (a) copy <code>formgen-core.jar</code>
-into the project's <code>WEB-INF/lib</code> directory, and (b) register the
-FormGen servlet in <code>web.xml</code>. The <code>formgen.ext</code> facet should
-copy the <code>formgen-ext.jar</code> into the project's <code>WEB-INF/lib</code>
-directory.</p>
-
-<div class="code">
-<pre class="code-xml"><span class="context-code">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;</span>
-
-  <span class="context-code">&lt;project-facet-version facet="formgen.core" version="1.0"&gt;</span>
-    &lt;action type="<span class="xml-text">INSTALL</span>"&gt;
-      &lt;delegate class="<span class="xml-text">com.formgen.eclipse.FormGenCoreFacetInstallDelegate</span>"/&gt;
-    &lt;/action&gt;
-  <span class="context-code">&lt;/project-facet-version&gt;</span>
-
-  <span class="context-code">&lt;project-facet-version facet="formgen.ext" version="1.0"&gt;</span>
-    &lt;action type="<span class="xml-text">INSTALL</span>"&gt;
-      &lt;delegate class="<span class="xml-text">com.formgen.eclipse.FormGenExtFacetInstallDelegate</span>"/&gt;
-    &lt;/action&gt;
-  <span class="context-code">&lt;/project-facet-version&gt;</span>
-  
-<span class="context-code">&lt;/extension&gt;</span>
-</pre>
-</div>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">package</span> com.formgen.eclipse;
-
-<span class="java-keyword">import</span> org.eclipse.core.resources.IFolder;
-<span class="java-keyword">import</span> org.eclipse.core.resources.IProject;
-<span class="java-keyword">import</span> org.eclipse.core.runtime.CoreException;
-<span class="java-keyword">import</span> org.eclipse.core.runtime.IProgressMonitor;
-<span class="java-keyword">import</span> org.eclipse.core.runtime.Path;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.IDelegate;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-<span class="java-keyword">public final class</span> FormGenCoreFacetInstallDelegate <span class="java-keyword">implements</span> IDelegate
-{
-    <span class="java-keyword">public void</span> execute( <span class="java-keyword">final</span> IProject pj,
-                         <span class="java-keyword">final</span> IProjectFacetVersion fv,
-                         <span class="java-keyword">final</span> Object config,
-                         <span class="java-keyword">final</span> IProgressMonitor monitor )
-
-        <span class="java-keyword">throws</span> CoreException
-
-    {
-        monitor.beginTask( "", 2 );
-
-        <span class="java-keyword">try</span>
-        {
-            <span class="java-keyword">final</span> IFolder webInfLib = Utils.getWebInfLibDir( pj );
-
-            Utils.copyFromPlugin( new Path( "libs/formgen-core.jar" ),
-                                  webInfLib.getFile( "formgen-core.jar" ) );
-
-            monitor.worked( 1 );
-
-            Utils.registerFormGenServlet( pj );
-
-            monitor.worked( 1 );
-        }
-        <span class="java-keyword">finally</span>
-        {
-            monitor.done();
-        }
-    }
-}
-</pre>
-</div>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">package</span> com.formgen.eclipse;
-
-<span class="java-keyword">import</span> org.eclipse.core.resources.IFolder;
-<span class="java-keyword">import</span> org.eclipse.core.resources.IProject;
-<span class="java-keyword">import</span> org.eclipse.core.runtime.CoreException;
-<span class="java-keyword">import</span> org.eclipse.core.runtime.IProgressMonitor;
-<span class="java-keyword">import</span> org.eclipse.core.runtime.Path;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.IDelegate;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-<span class="java-keyword">public final class</span> FormGenExtFacetInstallDelegate <span class="java-keyword">implements</span> IDelegate
-{
-    <span class="java-keyword">public void</span> execute( <span class="java-keyword">final</span> IProject pj,
-                         <span class="java-keyword">final</span> IProjectFacetVersion fv,
-                         <span class="java-keyword">final</span> Object config,
-                         <span class="java-keyword">final</span> IProgressMonitor monitor )
-
-        <span class="java-keyword">throws</span> CoreException
-
-    {
-        monitor.beginTask( "", 1 );
-
-        <span class="java-keyword">try</span>
-        {
-            <span class="java-keyword">final</span> IFolder webInfLib = Utils.getWebInfLibDir( pj );
-
-            Utils.copyFromPlugin( new Path( "libs/formgen-ext.jar" ),
-                                  webInfLib.getFile( "formgen-ext.jar" ) );
-
-            monitor.worked( 1 );
-        }
-        <span class="java-keyword">finally</span>
-        {
-            monitor.done();
-        }
-
-    }
-}
-</pre>
-</div>
-
-<p>Once the install actions have been implemented, you should be able to select
-the FormGen facets on the Facets Selection Page of the Dynamic Web Project Wizard
-without getting any error messages. You should also be able to complete the
-project creation and see the following highlighted artifacts in the new project.
-These artifacts have been created by the FormGen facet install delegates.</p>
-
-<div class="screen-shot"><img src="images/screen03.gif"/></div>
-
-<h2><a name="creating.categories">5. Creating Categories</a></h2>
-
-<p>Project facets can be grouped into categories in order to provide the "one
-click" exprience for novice users and retain the fine-grained control for advanced 
-users. You are told that most of FormGen users always add both of the jars to
-their web apps. These users would benefit from having the FormGen facets grouped
-into a category and so we will do just that.</p>
-
-<p>Here is what that part of the extension point schema looks like:</p>
-
-<div class="code">
-<pre class="code-xml"><span class="context-code">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;</span>
-  &lt;category id="<span class="schema-type">{string}</span>"&gt;
-    &lt;label&gt;<span class="schema-type">{string}</span>&lt;/label&gt;
-    &lt;description&gt;<span class="schema-type">{string}</span>&lt;/description&gt; <span class="schema-control">(optional)</span>
-  &lt;/category&gt;
-  <span class="context-code">&lt;project-facet&gt;</span>
-    &lt;category&gt;<span class="schema-type">{string}</span>&lt;/category&gt; <span class="schema-control">(optional)</span>
-  <span class="context-code">&lt;/project-facet&gt;</span>
-<span class="context-code">&lt;/extension&gt;</span>
-</pre>
-</div>
-
-<p>We can now create a category around the FormGen facets.</p>
-
-<div class="code">
-<pre class="code-xml"><span class="context-code">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;</span>
-
-  &lt;category id="<span class="schema-type">formgen.category</span>"&gt;
-    &lt;label&gt;<span class="schema-type">FormGen</span>&lt;/label&gt;
-    &lt;description&gt;<span class="schema-type">Enables generation of HTML forms based on XML definition files.</span>&lt;/description&gt;
-  &lt;/category&gt;
-
-  <span class="context-code">&lt;project-facet id="formgen.core"&gt;</span>
-    &lt;category&gt;<span class="schema-type">formgen.category</span>&lt;/category&gt;
-  <span class="context-code">&lt;/project-facet&gt;</span>
-
-  <span class="context-code">&lt;project-facet id="formgen.ext"&gt;</span>
-    &lt;category&gt;<span class="schema-type">formgen.category</span>&lt;/category&gt;
-  <span class="context-code">&lt;/project-facet&gt;</span>
-
-<span class="context-code">&lt;/extension&gt;</span>
-</pre>
-</div>
-
-<p>Once the above change has been put in place, the facets selection page should 
-look like this:</p>
-
-<div class="screen-shot"><img src="images/screen04.gif"/></div>
-
-<h2><a name="decorating">6. Decorating</a></h2>
-
-<p>Custom icons can be provided for facets and categories. If an icon is not
-provided, a default icon is used. The icons are helpful as a way to better
-differentiate facets and to make them stand out.</p>
-
-<p>Here is what that extension point looks like:</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="org.eclipse.wst.common.project.facet.ui.images"&gt;
-  &lt;image facet="<span class="schema-type">{string}</span>" path="<span class="schema-type">{string}</span>"/&gt; <span class="schema-control">(0 or more)</span>
-  &lt;image category="<span class="schema-type">{string}</span>" path="<span class="schema-type">{string}</span>"/&gt; <span class="schema-control">(0 or more)</span>
-&lt;/extension&gt;
-</pre>
-</div>
-
-<p>Your starter project came with three icons in the <code>icons</code> folder.
-We will now associate them with the FormGen facets and the category.</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="<span class="xml-text">org.eclipse.wst.common.project.facet.ui.images</span>"&gt;
-  &lt;image facet="<span class="xml-text">formgen.core</span>" path="<span class="xml-text">icons/formgen-core.gif</span>"/&gt;
-  &lt;image facet="<span class="xml-text">formgen.ext</span>" path="<span class="xml-text">icons/formgen-ext.gif</span>"/&gt;
-  &lt;image category="<span class="xml-text">formgen.category</span>" path="<span class="xml-text">icons/formgen-cat.gif</span>"/&gt;
-&lt;/extension&gt;
-</pre>
-</div>
-
-<p>Once the above snippet has been added to your plugin.xml file, the facets
-selection page should look like this:</p>
-
-<div class="screen-shot"><img src="images/screen05.gif"/></div>
-
-<h2><a name="adding.wizard.pages">7. Adding Wizard Pages</a></h2>
-
-<p>It is often desirable to gather user input prior to installing a facet.
-The framework allows a sequence of wizard pages to be associated with facet
-actions. The supplied wizard pages are shown after the facets selection
-page. Based on user feedback, you known that FormGen users often customize
-the URL pattern of the FormGen servlet so you would like to give them the ability
-to do that in the wizard when the FormGen facets are being installed.</p>
-
-<p>Here is what the relevant parts of the extension points look like:</p>
-
-<div class="code">
-<pre class="code-xml"><span class="context-code">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  &lt;action&gt;</span>
-    &lt;config-factory class="<span class="schema-type">class:org.eclipse.wst.common.project.facet.core.IActionConfigFactory</span>"/&gt;
-  <span class="context-code">&lt;/action&gt;
-&lt;/extension&gt;</span>
-
-&lt;extension point="<span class="xml-text">org.eclipse.wst.common.project.facet.ui.wizardPages</span>"&gt;
-  &lt;wizard-pages action="<span class="schema-type">{string}</span>"&gt; <span class="schema-control">(0 or more)</span>
-    &lt;page class="<span class="schema-type">{class:org.eclipse.wst.common.project.facet.ui.IFacetWizardPage}</span>"/> <span class="schema-control">(1 or more)</span>
-  &lt;/wizard-pages&gt;
-&lt;/extension&gt;  
-</pre>
-</div>
-
-<p>One thing to note here is that in order to enable communication between the
-facet action delegate and the wizard pages, we go back to the action declaration
-and provide an action config factory. The object created by the factory is 
-populated by the wizard pages and is read by the action delegate. No restrictions
-are placed on the shape of the config object. You may choose to implement a custom
-class or you can use a something generic like <code>java.util.HashMap</code>.</p>
-
-<p>Another thing to note is that the <code>wizardPages</code> extension point refers
-to the actions by their ids, so it becomes more important to explicitly specify
-the id rather than letting the framework automatically generate one.</p>
-
-<p>Here are the interfaces that are used in the above extension point schema:</p> 
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">package</span> org.eclipse.wst.common.project.facet.core;
-
-<span class="java-keyword">import</span> org.eclipse.core.runtime.CoreException;
-
-<span class="java-comment">/**
- * This interface is implemented in order to provide a method for creating 
- * a config object that will be used for parameterizing the facet action
- * delegate.
- */</span>
-
-<span class="java-keyword">public interface</span> IActionConfigFactory
-{
-    <span class="java-comment">/**
-     * Creates a new facet action configuration object. The new configuration
-     * object should ideally be populated with reasonable defaults.
-     * 
-     * <span class="java-javadoc-keyword">@return</span> a new facet action configuration object
-     * <span class="java-javadoc-keyword">@throws</span> CoreException if failed while creating the configuration object
-     */</span>
-    
-    Object create() <span class="java-keyword">throws</span> CoreException;
-}
-</pre>
-</div>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">package</span> org.eclipse.wst.common.project.facet.ui;
-
-<span class="java-keyword">import</span> org.eclipse.jface.wizard.IWizardPage;
-
-<span class="java-comment">/**
- * This interface is implemented by the wizard pages associated with project
- * facet actions.
- */</span>
-
-<span class="java-keyword">public interface</span> IFacetWizardPage <span class="java-keyword">extends</span> IWizardPage
-{
-    <span class="java-comment">/**
-     * The framework will call this method in order to provide the wizard
-     * context to the wizard page. The wizard context can be used to find out
-     * about other actions being configured by the wizard.
-     * 
-     * <span class="java-javadoc-keyword">@param</span> context the wizard context
-     */</span>
-    
-    <span class="java-keyword">void</span> setWizardContext( IWizardContext context );
-    
-    <span class="java-comment">/**
-     * The framework will call this method in order to provide the action config
-     * object that the wizard page should save user selection into. The
-     * populated config object will then be passed to the action delegate.
-     * 
-     * <span class="java-javadoc-keyword">@param</span> config the action config object
-     */</span>
-    
-    <span class="java-keyword">void</span> setConfig( Object config );
-    
-    <span class="java-comment">/**
-     * This method is called after the user has pressed the <code>Finish</code>
-     * button. It allows the wizard page to transfer user selection into the
-     * config object. Alternative, instead of using this method, the wizard
-     * page could update the model on the fly as the user is making changes.
-     */</span>
-
-    <span class="java-keyword">void</span> transferStateToConfig();
-}
-</pre>
-</div>
-
-<p>We will now implement a wizard page for the <code>facet.core</code> facet
-install action. The wizard page will allow the user to change the default
-servlet URL pattern for the FormGen servlet.</p>
-
-<div class="code">
-<pre class="code-xml"><span class="context-code">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  &lt;project-facet-version facet="formgen.core" version="1.0"&gt;
-    &lt;action type="INSTALL"</span> id="<span class="xml-text">formgen.core.install</span>"<span class="context-code">&gt;</span>
-      &lt;config-factory class="<span class="xml-text">com.formgen.eclipse.FormGenCoreFacetInstallConfig$Factory</span>"/&gt;
-    <span class="context-code">&lt;/action&gt;
-  &lt;/project-facet-version&gt;
-&lt;/extension&gt;</span>
-
-&lt;extension point="<span class="xml-text">org.eclipse.wst.common.project.facet.ui.wizardPages</span>"&gt;
-  &lt;wizard-pages action="<span class="xml-text">formgen.core.install</span>"&gt;
-    &lt;page class="<span class="schema-type">com.formgen.eclipse.FormGenCoreFacetInstallPage</span>"/>
-  &lt;/wizard-pages&gt;
-&lt;/extension&gt;  
-</pre>
-</div>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">package</span> com.formgen.eclipse;
-
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.IActionConfigFactory;
-
-<span class="java-keyword">public final class</span> FormGenCoreFacetInstallConfig
-{
-    <span class="java-keyword">private</span> String urlPattern = <span class="java-literal">"*.form"</span>;
-
-    <span class="java-keyword">public</span> String getUrlPattern()
-    {
-        <span class="java-keyword">return this</span>.urlPattern;
-    }
-
-    <span class="java-keyword">public void</span> setUrlPattern( <span class="java-keyword">final</span> String urlPattern )
-    {
-        <span class="java-keyword">this</span>.urlPattern = urlPattern;
-    }
-
-    <span class="java-keyword">public static final class</span> Factory <span class="java-keyword">implements</span> IActionConfigFactory
-    {
-        <span class="java-keyword">public</span> Object create()
-        {
-            <span class="java-keyword">return new</span> FormGenCoreFacetInstallConfig();
-        }
-    }
-}
-</pre>
-</div>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">package</span> com.formgen.eclipse;
-
-<span class="java-keyword">import</span> org.eclipse.swt.SWT;
-<span class="java-keyword">import</span> org.eclipse.swt.layout.GridData;
-<span class="java-keyword">import</span> org.eclipse.swt.layout.GridLayout;
-<span class="java-keyword">import</span> org.eclipse.swt.widgets.Composite;
-<span class="java-keyword">import</span> org.eclipse.swt.widgets.Label;
-<span class="java-keyword">import</span> org.eclipse.swt.widgets.Text;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.ui.AbstractFacetWizardPage;
-
-<span class="java-keyword">public final class</span> FormGenCoreFacetInstallPage <span class="java-keyword">extends</span> AbstractFacetWizardPage
-{
-    <span class="java-keyword">private</span> FormGenCoreFacetInstallConfig config;
-    <span class="java-keyword">private</span> Text urlPatternTextField;
-
-    <span class="java-keyword">public</span> FormGenCoreFacetInstallPage()
-    {
-        <span class="java-keyword">super</span>( <span class="java-literal">"formgen.core.facet.install.page"</span> );
-
-        setTitle( <span class="java-literal">"FormGen Core"</span> );
-        setDescription( <span class="java-literal">"Configure the FormGen servlet."</span> );
-    }
-
-    <span class="java-keyword">public void</span> createControl( <span class="java-keyword">final</span> Composite parent )
-    {
-        <span class="java-keyword">final</span> Composite composite = <span class="java-keyword">new</span> Composite( parent, SWT.NONE );
-        composite.setLayout( <span class="java-keyword">new</span> GridLayout( 1, <span class="java-keyword">false</span> ) );
-
-        <span class="java-keyword">final</span> Label label = <span class="java-keyword">new</span> Label( composite, SWT.NONE );
-        label.setLayoutData( gdhfill() );
-        label.setText( <span class="java-literal">"URL Pattern:"</span> );
-
-        <span class="java-keyword">this</span>.urlPatternTextField = <span class="java-keyword">new</span> Text( composite, SWT.BORDER );
-        <span class="java-keyword">this</span>.urlPatternTextField.setLayoutData( gdhfill() );
-        <span class="java-keyword">this</span>.urlPatternTextField.setText( this.config.getUrlPattern() );
-
-        setControl( composite );
-    }
-
-    <span class="java-keyword">public void</span> setConfig( <span class="java-keyword">final</span> Object config )
-    {
-        <span class="java-keyword">this</span>.config = (FormGenCoreFacetInstallConfig) config;
-    }
-
-    <span class="java-keyword">public void</span> transferStateToConfig()
-    {
-        <span class="java-keyword">this</span>.config.setUrlPattern( <span class="java-keyword">this</span>.urlPatternTextField.getText() );
-    }
-
-    <span class="java-keyword">private static</span> GridData gdhfill()
-    {
-        <span class="java-keyword">return new</span> GridData( GridData.FILL_HORIZONTAL );
-    }
-}
-</pre>
-</div>
-
-<div class="code">
-<pre class="java-code"><span class="java-context"><span class="java-context-keyword">package</span> com.formgen.eclipse;
-
-<span class="java-context-keyword">import</span> org.eclipse.core.resources.IFolder;
-<span class="java-context-keyword">import</span> org.eclipse.core.resources.IProject;
-<span class="java-context-keyword">import</span> org.eclipse.core.runtime.CoreException;
-<span class="java-context-keyword">import</span> org.eclipse.core.runtime.IProgressMonitor;
-<span class="java-context-keyword">import</span> org.eclipse.core.runtime.Path;
-<span class="java-context-keyword">import</span> org.eclipse.wst.common.project.facet.core.IDelegate;
-<span class="java-context-keyword">import</span> org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-<span class="java-context-keyword">public final class</span> FormGenCoreFacetInstallDelegate <span class="java-context-keyword">implements</span> IDelegate
-{
-    <span class="java-context-keyword">public void</span> execute( <span class="java-context-keyword">final</span> IProject pj,
-                         <span class="java-context-keyword">final</span> IProjectFacetVersion fv,
-                         <span class="java-context-keyword">final</span> Object config,
-                         <span class="java-context-keyword">final</span> IProgressMonitor monitor )
-
-        <span class="java-context-keyword">throws</span> CoreException
-
-    {
-        monitor.beginTask( "", 2 );
-
-        try
-        {</span>
-            <span class="java-keyword">final</span> FormGenCoreFacetInstallConfig cfg
-                = (FormGenCoreFacetInstallConfig) config;
-
-            <span class="java-context"><span class="java-context-keyword">final</span> IFolder webInfLib = Utils.getWebInfLibDir( pj );
-
-            Utils.copyFromPlugin( <span class="java-context-keyword">new</span> Path( "libs/formgen-core.jar" ),
-                                  webInfLib.getFile( "formgen-core.jar" ) );
-
-            monitor.worked( 1 );</span>
-
-            Utils.registerFormGenServlet( pj, cfg.getUrlPattern() );
-
-            <span class="java-context">monitor.worked( 1 );
-        }
-        <span class="java-context-keyword">finally</span>
-        {
-            monitor.done();
-        }
-    }
-}</span>
-</pre>
-</div>
-
-<p>Once the above code changes have been made you should see another page appear
-in the Dynamic Web Project Wizard after the FormGen facets are selected. The
-new page will appear after the Web Module page, which is associated with the
-<code>jst.web</code> facet. That's because <code>formgen.core</code> facet
-depends on the <code>jst.web</code> facet. If this dependency relationship 
-was not specified the relative order of these pages would be unspecified.</p>
-
-<div class="screen-shot"><img src="images/screen06.gif"/></div>
-
-<h2><a name="defining.presets">8. Defining Presets</a></h2>
-
-<p>As the number of available facets grows, it becomes increasingly difficult
-for the user to figure out which combinations make sense. This is where presets
-come in. Presets (or Configurations, as they are referred to in the UI) are
-simply combinations of facets that someone has determined are useful in certain
-situations. Presets can be created by the user or supplied via an extension
-point.</p>
-
-<p>Here is the extension point schema for declaring presets:</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="<span class="xml-text">org.eclipse.wst.common.project.facet.core.facets</span>"&gt;
-  &lt;preset id="<span class="schema-type">{string}</span>"&gt;
-    &lt;label&gt;<span class="schema-type">{string}</span>&lt;/label&gt;
-    &lt;description&gt;<span class="schema-type">{string}</span>&lt;/description&gt; <span class="schema-control">(optional)</span>
-    &lt;facet id="<span class="schema-type">{string}</span>" version="<span class="schema-type">{string}</span>"/&gt; <span class="schema-control">(1 or more)</span>
-  &lt;/preset&gt;
-&lt;/extension&gt;
-</pre>
-</div>
-
-<p>Note that in order for a preset to apply to a given faceted project, the
-preset needs to include all of the project's "fixed facets". Fixed facets are
-the facets that are key to the proper operation of that project type and so
-cannot be removed. You can identify fixed facets by the lock icon.</p>
-
-<p>Let's now create a preset that includes formgen facets.</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="<span class="xml-text">org.eclipse.wst.common.project.facet.core.facets</span>"&gt;
-  &lt;preset id="<span class="xml-text">formgen.preset</span>"&gt;
-    &lt;label&gt;<span class="xml-text">FormGen Web Project</span>&lt;/label&gt;
-    &lt;description&gt;<span class="xml-text">Creates a web project with FormGen functionality.</span>&lt;/description&gt;
-    &lt;facet id="<span class="xml-text">jst.java</span>" version="<span class="xml-text">5.0</span>"/&gt;
-    &lt;facet id="<span class="xml-text">jst.web</span>" version="<span class="xml-text">2.2</span>"/&gt;
-    &lt;facet id="<span class="xml-text">formgen.core</span>" version="<span class="xml-text">1.0</span>"/&gt;
-    &lt;facet id="<span class="xml-text">formgen.ext</span>" version="<span class="xml-text">1.0</span>"/&gt;
-  &lt;/preset&gt;
-&lt;/extension&gt;
-</pre>
-</div>
-
-<p>Here is how the preset shows up on the facets selection page:</p>
-
-<div class="screen-shot"><img src="images/screen07.gif"/></div>
-
-<p>The preset can also be selected on the first page of all WTP project
-creation wizards. Here is how this looks in the Dynamic Web Project wizard:</p>
-
-<div class="screen-shot"><img src="images/screen08.gif"/></div>
-
-<h2><a name="runtime.mappings">9. Specifying Runtime Support Mappings</a></h2>
-
-<p>One of the most important functions of the faceted project framework is to
-be able to accurately model whether a certain server runtime supports a
-given project. We do that by "mapping" project facets to runtime components
-that support them. If the artifacts created by a facet will run on any server
-that supports all of the facet's upstream dependencies, then the <code>any</code>
-wildcard can be used.</p>
-
-<p>It's important to note that every facet needs to specify a support mapping of
-some kind. Facets that don't specify any support mappings are treated as not
-supported by any runtime, which is not very useful.</p>
-
-<p>Here is the extension point that's used for specifying the support mappings:</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="<span class="xml-text">org.eclipse.wst.common.project.facet.core.runtimes</span>"&gt;
-  &lt;supported&gt; <span class="schema-control">(0 or more)</span>
-    &lt;runtime-component any="<span class="schema-type">{boolean}</span>"/&gt; <span class="schema-control">(optional)</span>
-    &lt;runtime-component id="<span class="schema-type">{string}</span>"/ version="<span class="schema-type"><span class="schema-type-link">{<a href="#version.expressions">version.expr</a>}</span></span>"/&gt; <span class="schema-control">(0 or more)</span>
-    &lt;facet id="<span class="schema-type">{string}</span>"/ version="<span class="schema-type"><span class="schema-type-link">{<a href="#version.expressions">version.expr</a>}</span></span>"/&gt; <span class="schema-control">(1 or more)</span>
-  &lt;/supported&gt;
-&lt;/extension&gt;
-</pre>
-</div>
-
-<p>The <code>&lt;supported&gt;</code> block can reference any number of runtime
-components as well as any number of facets. The semantics of that is to declare 
-as supported every combination in the resulting cross-product.</p> 
-
-<p>The <code>version</code> attributes of the <code>&lt;runtime-component&gt;</code> 
-and <code>&lt;facet&gt;</code> elements can be omitted to include all versions.</p>
-
-<p>The FormGen facets don't have any special support requirements. They will run
-on any server that supports the j2ee servlet spec. We will use the <code>any</code>
-wildcard to designate that.</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="<span class="xml-text">org.eclipse.wst.common.project.facet.core.runtimes</span>"&gt;
-  &lt;supported&gt;
-    &lt;runtime-component any="<span class="xml-text">true</span>"/&gt;
-    &lt;facet id="<span class="xml-text">formgen.core</span>"/&gt;
-    &lt;facet id="<span class="xml-text">formgen.ext</span>"/&gt;
-  &lt;/supported&gt;
-&lt;/extension&gt;
-</pre>
-</div>
-
-<p>Alternative, if for some reason the FormGen functionality required a specific
-runtime, such as Tomcat, we would use something like the this instead:</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="<span class="xml-text">org.eclipse.wst.common.project.facet.core.runtimes</span>"&gt;
-  &lt;supported&gt;
-    &lt;runtime-component id="<span class="xml-text">org.eclipse.jst.server.tomcat</span>" version="<span class="xml-text">[5.0</span>"/&gt;
-    &lt;facet id="<span class="xml-text">formgen.core</span>"/&gt;
-    &lt;facet id="<span class="xml-text">formgen.ext</span>"/&gt;
-  &lt;/supported&gt;
-&lt;/extension&gt;
-</pre>
-</div>
-
-<p>The above more restrictive specification will prevent FormGen facets from
-being selected if the project is targetted to any runtime other than Apache
-Tomcat 5.0 or newer.</p>
-
-<h2><a name="summary">10. Summary</a></h2>
-
-<p>In this tutorial we created two fully-functional project facets by specifying
-constraints, implementing actions, grouping facets into categories, and creating
-wizard pages to allow users to parameterize facet installation. You should now
-be well prepared to create your own facets. Additional information not covered
-by this tutorial can be found in the following appendix sections.</p> 
-
-<h2><a name="custom.version.comparators">Appendix A: Custom Version Comparators</a></h2>
-
-<p>The faceted project framework needs to be able to compare facet version
-strings. The framework supplies a default version comparator that can handle
-version strings encoded using the standard decimal notation (such as 1.2 or
-5.66.5533), but if you want to use a different format you will need to supply
-a custom version comparator.</p>
-
-<p>Here is how you plug in a custom version comparator:</p>
-
-<div class="code">
-<pre class="code-xml"><span class="context-code">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  &lt;project-facet&gt;</span>
-    &lt;version-comparator class="<span class="schema-type">{class:java.util.Comparator&lt;String&gt;}</span>"/&gt;
-  <span class="context-code">&lt;/project-facet&gt;
-&lt;/extension&gt;</span>
-</pre>
-</div>
-
-<p>When implementing a version comparator you can either start from scratch
-or subclass the default version comparator (<code>org.eclipse.wst.common.project.facet.core.DefaultVersionComparator</code>).
-Subclassing the default version comparator makes sense if the version format
-differs only slightly from the default format, such as using separators other
-than dots or having non-numeric characters at certain positions. Here are the
-protected methods exposed by the <code>DefaultVersionComparator</code> class
-that are designed to be overridden:</p>
-
-<div class="code">
-<pre class="java-code"><span class="java-comment">/**
- * Returns the string containing the separator characters that should be
- * used when breaking the version string into segments. The default
- * implementation returns ".". Subclasses can override this method.
- * 
- * <span class="java-javadoc-keyword">@return</span> the separator characters
- */</span>
-    
-<span class="java-keyword">protected</span> String getSeparators();
-    
-<span class="java-comment">/**
- * Parses a segment of the version string. The default implementation parses
- * the first segment as an integer (leading zeroes are ignored) and the
- * rest of the segments as decimals (leading zeroes are kept). Subclasses 
- * can override this method to provide custom parsing for any number of 
- * segments.
- * 
- * <span class="java-javadoc-keyword">@param</span> version the full version string
- * <span class="java-javadoc-keyword">@param</span> segment the version segment
- * <span class="java-javadoc-keyword">@param</span> position the position of the segment in the version string
- * <span class="java-javadoc-keyword">@return</span> the parsed representation of the segment as a {@see Comparable}
- * <span class="java-javadoc-keyword">@throws</span> VersionFormatException if encountered an error while parsing
- */</span>
-    
-<span class="java-keyword">protected</span> Comparable parse( <span class="java-keyword">final</span> String version,
-                            <span class="java-keyword">final</span> String segment,
-                            <span class="java-keyword">final</span> int position )
-    
-    <span class="java-keyword">throws</span> VersionFormatException;
-</pre>
-</div>
-
-<h2><a name="version.expressions">Appendix B: Version Expressions</a></h2>
-
-<p>A version expression is a syntax for specifying more than one version. The
-version expressions are used throughout the framework's extension points, but
-you will most likely first encounter them while specifying the <code>requires</code> 
-constraint.</p>
-
-<p>A version expression is composed of multiple segments separated by commas. 
-The commas function as an OR operation. Each segment is either a single version, 
-a range, or a wildcard. Ranges are represented by bracket and dash notation such 
-as [x-y). A bracket means inclusive, while the parenthesis means exclusive. Open 
-ended ranges are also supported. A wildcard (represented by '*' character) can
-be used to match any version. It is not possible to use the wildcard to match
-part of the version string.</p>
-
-<p>Here are some examples:</p>
-
-<div class="code">
-<pre class="java-code">1.2
-1.2,1.5,3.2
-[1.2-3.2]
-[3.7-5.0)
-[3.7
-5.0)
-1.2,[3.0-4.5),[7.3
-*
-</pre>
-</div>
-
-<h2><a name="property.tester">Appendix C: Property Tester</a></h2>
-
-<p>A property tester is provided by the Faceted Project Framework that allows
-the presence of the facet in a project to be tested by any extension point that
-works with <code>org.eclipse.core.expressions</code> package. The most common
-usage is to enable user interface elements (such as actions and project property
-pages). The property name is <code>org.eclipse.wst.common.project.facet.core.projectFacet</code>
-and the value is either a facet id or a facet id followed by a colon and
-a <a href="#version.expressions">version expression</a>.</p>
-
-<p>Here is an example of using facets property tester to control enablement of
-a project properties page:</p>
-
-<div class="code">
-<pre class="code-xml">&lt;extension point="<span class="xml-text">org.eclipse.ui.propertyPages</span>"&gt;
-  &lt;page 
-    adaptable="<span class="xml-text">true</span>"
-    objectClass="<span class="xml-text">org.eclipse.core.resources.IProject</span>"
-    name="<span class="xml-text">FormGen Properties</span>"
-    class="<span class="xml-text">com.formgen.eclipse.FormGenPropertiesPage</span>"
-    id="<span class="xml-text">org.eclipse.jst.j2ee.internal.J2EEDependenciesPage</span>"&gt;
-    &lt;enabledWhen&gt;
-      &lt;test 
-        forcePluginActivation="<span class="xml-text">true</span>"
-        property="<span class="xml-text">org.eclipse.wst.common.project.facet.core.projectFacet</span>"
-        value="<span class="xml-text">formgen.core</span>"/&gt;
-    &lt;/enabledWhen&gt;          
-  &lt;/page&gt;
-&lt;/extension&gt;
-</pre>
-</div>
-
-<h2><a name="wizard.context">Appendix D: Wizard Context</a></h2>
-
-<p>Sometimes it desirable to be able to adjust the behavior of facet action 
-wizard pages based on user input in the wizard pages of other facets. The
-<code>IWizardContext</code> interface can be used for this purpose. The wizard
-page gets a handle on <code>IWizardContext</code> interface when it's
-<code>setWizardContext</code> method is called. When writing code that relies
-on the wizard context, there are a couple of points you should keep in mind.</p>
-
-<ol>
-
-  <li><p>The facet whose value you wish to check may have already been installed
-    in the past. In that case you will not find it's install configuration in
-    the wizard context. You will need to write conditional logic that will
-    consult the wizard context or looks at project state on disk.</p></li>
-    
-  <li><p>You should make sure that a reasonable default is provided in your
-    config object for the API-only scenario where your wizard page will not be
-    involved.</p>
-    
-</ol>
-
-<p>Here is what the <code>IWizardContext</code> interface looks like:</p>
-
-<div class="code">
-<pre class="java-code"><span class="java-keyword">package</span> org.eclipse.wst.common.project.facet.ui;
-
-<span class="java-keyword">import</span> java.util.Set;
-
-<span class="java-keyword">import</span> org.eclipse.core.runtime.CoreException;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
-<span class="java-keyword">import</span> org.eclipse.wst.common.project.facet.core.IFacetedProject.Action.Type;
-
-<span class="java-comment">/**
- * The interface exposed to the facet action wizard pages that allows them
- * to gather information about the wizard state.
- */</span>
-
-<span class="java-keyword">public interface</span> IWizardContext 
-{
-    <span class="java-comment">/**
-     * Returns the name of the project that the wizard is operating on. If the
-     * wizard is in the project creation mode, the project will not yet exist
-     * in the workspace.
-     * 
-     * <span class="java-javadoc-keyword">@return</span> the name of the project that the wizard is operating on
-     */</span>
-    
-    String getProjectName();
-    
-    <span class="java-comment">/**
-     * Returns the set of facets currently selected in the wizard. If the wizard
-     * is in the add/remove facets mode (vs. project creation), this method will 
-     * return the set of facets currently installed in a project after being 
-     * modified by the current set of actions. 
-     * 
-     * <span class="java-javadoc-keyword">@return</span> the set of facets currently selected in the wizard (element type:
-     *   {<span class="java-javadoc-keyword">@see</span> IProjectFacetVersion})
-     */</span>
-    
-    Set getSelectedProjectFacets();
-    
-    <span class="java-comment">/**
-     * Determines whether the specified facet is currently selected in the
-     * wizard. See {@see getSelectedProjectFacets()} for more information.
-     * 
-     * <span class="java-javadoc-keyword">@param</span> fv the project facet version object
-     * <span class="java-javadoc-keyword">@return</span> <code>true</code> if an only if the provided project facet is
-     *   currently selected in the wizard
-     */</span>
-    
-    <span class="java-keyword">boolean</span> isProjectFacetSelected( IProjectFacetVersion fv );
-    
-    <span class="java-comment">/**
-     * Returns the set of actions currently specified by the user.
-     * 
-     * <span class="java-javadoc-keyword">@return</span> the set of actions currently specified by the user
-     */</span>
-    
-    Set getActions();
-    
-    <span class="java-comment">/**
-     * Finds the action of specified type that applies to the specified facet,
-     * if such action exists. If the wizard is in the add/remove facets mode
-     * (vs. project creation), you cannot depend on finding the install action
-     * for a required facet as that facet may have already been installed.
-     * 
-     * <span class="java-javadoc-keyword">@param</span> type the action type
-     * <span class="java-javadoc-keyword">@param</span> fv the project facet version object
-     * <span class="java-javadoc-keyword">@return</span> the action object or <code>null</code>
-     */</span>
-    
-    Action getAction( Action.Type type,
-                      IProjectFacetVersion fv );
-}
-</pre>
-</div>
-
-<br/><br/><br/>
-
-</body>
-
-</html>
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/whatsnew150.html b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/whatsnew150.html
deleted file mode 100644
index c354809..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/whatsnew150.html
+++ /dev/null
@@ -1,363 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta
-  http-equiv="Content-Type"
-  content="text/html; charset=iso-8859-1">
-<title>What's New for 1.5?</title>
-<link
-  rel="stylesheet"
-  type="text/css"
-  href="format.css">
-</head>
-
-<body>
-<p class="ueberschrift">What's New for 1.5?</p>
-
-<p>This document describes the API changes that have been made in the Faceted
-Project Framework for WTP 1.5 release. Both Java API and extension point changes 
-are covered. Note that the Faceted Project Framework API remains provisional
-for the 1.5 release. This means it will continue undergoing further significant
-changes in future release(s).</p>
-
-<p><b>Attention:</b> All Java API and extension points that have been deprecated 
-in the 1.5 release will be removed in the 2.0 release. Until that point they 
-will continue to function and be fully supported.</p>
-
-<ol>
-  <li><a href="#vexprs">Version Expressions</a></li>
-  <li><a href="#actions">Action Definitions</a></li>
-  <li><a href="#wizard">Wizard Pages</a></li>
-  <li><a href="#event.handlers">Event Handlers</a></li>
-  <li><a href="#runtimes">Targeting Multiple Runtimes</a></li>
-  <li><a href="#presets">Descriptions for Presets</a></li>
-  <li><a href="#misc">Miscellaneous</a></li>
-</ol>
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="vexprs">1. Version Expressions</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>Version expressions are used in various context throughout the framework's
-extension points and Java API when multiple versions need to be specified. In
-the 1.0.x release, the vesion expressions were of the form "&lt;1.5,2.3,2.5,&gt=5.0",
-where commas indicate a disjunction (or). This syntax did not allow ranges to be
-specified and was unwieldy due to the need to escape the angle brackets in the
-plugin.xml files. So this syntax has been deprecated in the 1.5 release. The new
-syntax also uses commas to specify a disjunction, but now ranges can be
-specified using "[1.3-6.3)" notation. Square brackets mean inclusive, while
-parenthesis mean exclusive. Open ranges can also be specified using notation
-like "[1.3" and "6.3)".</p>
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="actions">2. Action Definitions</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>Action definitions have been made into first class entities with the new
-ability to be assigned an id and the creation of the browsing API. In addition,
-it is now possible to create constrained VERSION_CHANGE actions in order to
-designate precisely which versions the delegate is capable of changing from.
-Multiple VERSION_CHANGE delegates with different "from.versions" constraint
-can be specified.</p>
-
-<p><u>Extension Point Changes</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  ...
-  &lt;action</font> id="string" <font color="#7B7B7B">... &gt;
-    ...
-    </font>
-    &lt;property name="from.versions" value="string"/&gt; <i>(0 or 1)</i>
-    <font color="#7B7B7B">
-    ...
-  &lt/action&gt;
-  ...
-&lt;extension&gt;</font>
-</pre>
-</td></tr></table>
-
-<p><u>Java API Additions</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-org.eclipse.wst.common.project.facet.core.IActionDefinition
-{
-   static final String PROP_FROM_VERSIONS;
-   String getId();
-   IProjectFacet getProjectFacet();
-   IVersionExpr getVersionExpr();
-   Action.Type getActionType();
-   Map getProperties();
-   Object getProperty( String name );
-   Object createConfigObject( IProjectFacetVersion fv, String pjname );
-}
-
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IProjectFacetVersion
-{
-   ...</font>
-   boolean supports( Set base, Action.Type type );
-   Set getActionDefinitions();
-   Set getActionDefinitions( Action.Type type );
-   IActionDefinition getActionDefinition( Set base, Action.Type type );
-   <font color="#7B7B7B">...
-}</font>
-
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.ProjectFacetsManager
-{
-    ...</font>
-    Set getActionDefinitions();
-    boolean isActionDefined( String id );
-    IActionDefinition getActionDefinition( String id );
-    <font color="#7B7B7B">...
-}</font>
-</pre>
-</td></tr></table>
-
-<p><u>Deprecated Java API</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor=#FFF1C1>
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IProjectFacetVersion
-{
-   ...</font>
-   boolean supports( Action.Type type );
-   Object createActionConfig( Action.Type type, String pjname );
-   boolean isSameActionConfig( Action.Type type, IProjectFacetVersion fv );
-   <font color="#7B7B7B">...
-}</font>
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="wizard">3. Wizard Pages</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>The extension point schema for defining wizard pages associated with the
-project facet actions has been revised to be more flexible.</p>
-
-<p><u>Deprecated Extension Point</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor=#FFF1C1>
-<pre>
-&lt;extension point="org.eclipse.wst.common.project.facet.ui.wizard"&gt;
-  &lt;wizard-pages facet="..."&gt;
-    &lt;install&gt; <i>(0 or 1)</i>
-      &lt;page class="..."/&gt; <i>(1 or more)</i>
-    &lt;/install&gt;
-    &lt;uninstall&gt; <i>(0 or 1)</i>
-      &lt;page class="..."/&gt; <i>(1 or more)</i>
-    &lt;/uninstall&gt;
-  &lt;/wizard-pages&gt;
-&lt;/extension&gt;
-</pre>
-</td></tr></table>
-
-<p><u>Replacement Extension Point</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-&lt;extension point="org.eclipse.wst.common.project.facet.ui.wizardPages"&gt;
-  &lt;wizard-pages action="..."&gt; <i>(1 or more)</i>
-    &lt;page class="..."/&gt; <i>(1 or more)</i>
-  &lt;/wizard-pages&gt;
-&lt;/extension&gt;
-</pre>
-</td></tr></table>
-
-<p>Note the new extension point id. The "action" attribute should contain the
-action that these pages are to be associated with. The action id can
-be explicitly specified via the new "id" attribute available on the "action"
-element of the core facets extension point. If not specified, the default id
-is generated using the "[facet-id]#[version-expression]#[action-type]" 
-pattern.</p>
-
-<p><u>Deprecated Java API</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#FFF1C1">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.ui.ProjectFacetsUiManager
-{
-   ...</font>
-   List getWizardPages( Action.Type type, IProjectFacetVersion fv );
-   <font color="#7B7B7B">...
-}</font>
-</pre>
-</td></tr></table>
-
-<p><u>Replacement Java API</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.ui.ProjectFacetsUiManager
-{
-   ...</font>
-   List getWizardPages( String actionId );
-   <font color="#7B7B7B">...
-}</font>
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="event.handlers">4. Event Handlers</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>A new event handling facility has been added. This makes for a clear separation
-between actions (user initiated), and events (automatic). Prior to this change
-it was possible to register a "runtime-changed" action. That usage is now
-deprecated and should be converted to use event handler extension point. Various
-new events have also been added.</p>
-
-<p><u>Event Types</u></p>
-
-<p>PRE_INSTALL, POST_INSTALL, PRE_UNINSTALL, POST_UNINSTALL, PRE_VERSION_CHANGE,
-POST_VERSION_CHANGE, RUNTIME_CHANGED</p>
-
-<p><u>Extension Point Changes</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  ...</font>
-  &lt;event-handler type="..." facet="..." version="..."&gt;
-    &lt;delegate class="..."/&gt;
-  &lt/event-handler&gt;
-  <font color="#7B7B7B">...
-&lt;extension&gt;</font>
-</pre>
-</td></tr></table>
-
-<p><u>RUNTIME_CHANGED Event</u></p>
-
-<p>In the 1.0.x release it was possible to register a "runtime-changed" action.
-That usage is now deprecated and should be converted into a RUNTIME_CHANGED
-event handler. The RUNTIME_CHANGED event handler delegate gets passed in a
-config object that carries additional information about the event.</p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-org.eclipse.wst.common.project.facet.core.IRuntimeChangedEvent
-{
-    IRuntime getOldRuntime();
-    IRuntime getNewRuntime();
-}  
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="runtimes">5. Targeting Multiple Runtimes</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>The ability for a project to target multiple runtimes has been further
-fleshed out during the 1.5 release.</p>
-   
-<p><u>Deprecated Java API</u></p>
-   
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#FFF1C1">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IFacetedProject
-{
-   ...</font>
-   IRuntime getRuntime();
-   void setRuntime( IRuntime runtime );
-   <font color="#7B7B7B">...
-}</font>
-</pre>
-</td></tr></table>
-     
-<p><u>Replacement Java API</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IFacetedProject
-{
-   ...</font>
-   Set getTargetedRuntimes();
-   void setTargetedRuntimes( Set runtimes, IProgressMonitor monitor );
-   void addTargetedRuntime( IRuntime runtime, IProgressMonitor monitor );
-   void removeTargetedRuntime( IRuntime runtime, IProgressMonitor monitor );
-   IRuntime getPrimaryRuntime();
-   void setPrimaryRuntime( IRuntime runtime, IProgressMonitor monitor );
-   <font color="#7B7B7B">...
-}</font>
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="presets">6. Descriptions for Presets</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>It is now possible to associate description with presets.</p>
-   
-<p><u>Extension Points Changes</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  ...
-  &lt;preset&gt;
-    ...</font>
-    &lt;description&gt;...&lt/description&gt; <i>(0 or 1)</i>
-    <font color="#7B7B7B">...
-  &lt/preset&gt;
-  ...
-&lt;extension&gt;</font>
-</pre>
-</td></tr></table>
-
-<p><u>Java API Changes</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.ProjectFacetsManager
-{
-   ...</font>
-   IPreset definePreset( String name, String description, Set facets );
-   <font color="#7B7B7B">...
-}</font>
-
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IPreset
-{
-   ...</font>
-   String getDescription();
-   <font color="#7B7B7B">...
-}</font>
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="misc">7. Miscellaneous</a></font></p>
-<!--  ********************************************************************** -->
-
-<p><u>Java API Changes</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IProjectFacetVersion
-{
-   ...</font>
-   boolean isValidFor( Set fixed );
-   boolean conflictsWith( IProjectFacetVersion fv );
-   String getPluginId();
-   <font color="#7B7B7B">...
-}</font>
-
-org.eclipse.wst.common.project.facet.core.IVersionExpr
-{
-   boolean evaluate( String version );
-   String toDisplayString();
-}
-</pre>
-</td></tr></table>
-
-<p></p>
-
-</body>
-</html>
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/whatsnew151.html b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/whatsnew151.html
deleted file mode 100644
index f6d3d8d..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/whatsnew151.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta
-  http-equiv="Content-Type"
-  content="text/html; charset=iso-8859-1">
-<title>What's New for 1.5.1?</title>
-<link
-  rel="stylesheet"
-  type="text/css"
-  href="format.css">
-</head>
-
-<body>
-<p class="ueberschrift">What's New for 1.5.1?</p>
-
-<p>This document describes the API changes that have been made in the Faceted
-Project Framework for WTP 1.5.1 release. Both Java API and extension point 
-changes are covered. Note that the Faceted Project Framework API remains 
-provisional for the 1.5.1 release. This means it will continue undergoing 
-further significant changes in future release(s).</p>
-
-<ol>
-  <li><a href="#defver">Specifying Default Facet Version</a></li>
-  <li><a href="#wildcard">Wildcard Support in Version Expressions</a></li>
-</ol>
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="vexprs">1. Specifying Default Facet Version</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>It is now possible to specify the facet version that will be used by default
-when the facet is presented to the user. There are two ways to specify the default
-version. You can either specify a static default or you can implement the
-<code>IDefaultVersionProvider</code> interface. If a default version is not
-specified, the latest version will be used instead.</p>
-
-<p><u>Extension Point Changes</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  &lt;project-facet&gt;</font>
-    &lt;default-version version="{string}"/&gt; <i>(optional)</i>
-    &lt;default-version provider="{class:org.eclipse.wst.common.project.facet.core.IDefaultVersionProvider}"/&gt; <i>(optional)</i>
-  <font color="#7B7B7B">&lt;/project-facet&gt;
-&lt;extension&gt;</font>
-</pre>
-</td></tr></table>
-
-<p><u>Java API Additions</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IProjectFacet
-{</font>
-   IProjectFacetVersion getDefaultVersion();
-<font color="#7B7B7B">}</font>
-
-org.eclipse.wst.common.project.facet.core.IDefaultVersionProvider
-{
-   IProjectFacetVersion getDefaultVersion();
-}
-</pre>
-</td></tr></table>
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="wildcard">2. Wildcard Support in Version Expressions</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>A wildcard character '*' can now be used in version expressions in order to
-match any version. Note that it is not possible to use the wildcard to match
-part of the version string.</p>
-
-<p><u>Java API Additions</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IVersionExpr
-{</font>
-   static final String WILDCARD_SYMBOL = "*";
-<font color="#7B7B7B">}</font>
-</pre>
-</td></tr></table>
-
-<p></p>
-
-</body>
-</html>
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/whatsnew20.html b/plugins/org.eclipse.wst.common.project.facet.doc.api/content/whatsnew20.html
deleted file mode 100644
index 97f5f0b..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/content/whatsnew20.html
+++ /dev/null
@@ -1,447 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta
-  http-equiv="Content-Type"
-  content="text/html; charset=iso-8859-1">
-<title>What's New for 2.0?</title>
-<link
-  rel="stylesheet"
-  type="text/css"
-  href="format.css">
-</head>
-
-<body>
-<p class="ueberschrift">What's New for 2.0?</p>
-
-<p>This document describes the API changes that have been made in the Faceted Project Framework for 
-the WTP 2.0 release. Both Java API and extension point changes are covered. All API that was 
-deprecated in this release is still supported, but clients are advised to switch to non-deprecated 
-alternatives as soon as feasible.</p>
-
-<ol>
-  <li><a href="#generics">Generics</a></li>
-  <li><a href="#presets">Improvements to Presets</a></li>
-  <li><a href="#comparable">IProjectFacetVersion and IRuntimeComponentVersion Extend Comparable</a></li>
-  <li><a href="#requires-group">Requires Constraint Supports Groups</a></li>
-  <li><a href="#group-labels">Labels and Descriptions for Groups</a></li>
-  <li><a href="#validate">New IFacetedProject Validation API</a></li>
-  <li><a href="#new-wizard-class">AddRemoveFacetsWizard Class Renamed to ModifyFacetedProjectWizard</a></li>
-  <li><a href="#pde-limitations">Extension Point Schema Changes to Work Around PDE Limitations</a></li>
-  <li><a href="#listeners">Listeners and Events</a></li>
-  <li><a href="#misc">Miscellaneous</a></li>
-</ol>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="#generics">1. Generics</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>All of the framework's API now use Java 5 generics. This has been done in a backwards compatible
-way and existing clients are expected to continue to work without any modifications. In order for a 
-client to gain access to the type safety afforded by generics in this API, the client plugin's Java 
-compiler level should be configured to be 5.0 or newer.</p>  
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="presets">2. Improvements to Presets</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>Significant improvements have been made to the presets facility for the 2.0 release. A new type of
-preset, referred to as a dynamic preset, is now available. A dynamic preset uses an extender-supplied
-factory to synthesize the preset definition on the fly based on the context in which it will be
-used. The "old-style" declarative presets are still available and are now referred to as static
-presets. Static presets have also been improved to allow them to extend other presets. A static
-preset can even extend a dynamic preset.</p>
-
-<p>There is also a new preset that's part of the framework. It's a dynamic preset with id of 
-"default.configuration" and whose contents are synthesized as follows:</p>
-
-<ol>
-  <li>If a runtime is selected, this preset will contain default facets as specified by
-    IRuntime.getDefaultFacets(Set).</li>
-  <li>If no runtime is selected, this preset will contain default versions for all of the fixed
-    facets as specified by IProjectFacet.getDefaultVersion().</li>
-</ol>   
-
-<p><u>New Extension Point</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-&lt;extension point="org.eclipse.wst.common.project.facet.core.presets"&gt;
-  &lt;static-preset id="<i>{string}</i>" extends="<i>{string}</i>"&gt;
-    &lt;label&gt;<i>{string}</i>&lt;/label&gt; <i>(optional)</i>
-    &lt;description&gt;<i>{string}</i>&lt;/description&gt; <i>(optional)</i>
-    &lt;facet id="<i>{string}</i>" version="<i>{string}</i>"/&gt; <i>(1 or more)</i>
-  &lt;/static-preset&gt; <i>(0 or more)</i>
-  &lt;dynamic-preset id="<i>{string}</i>"&gt;
-    &lt;factory class="<i>{class:org.eclipse.wst.common.project.facet.core.IPresetFactory}</i>"/&gt;
-  &lt;/dynamic-preset&gt; <i>(0 or more)</i>
-&lt;extension&gt;
-</pre>
-</td></tr></table>
-
-<p><u>Deprecated Extension Point</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#FFF1C1">
-<pre>
-<font color="#7B7B7B">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;</font>
-  &lt;preset id="<i>{string}</i>"&gt;
-    &lt;label&gt;<i>{string}</i>&lt;/label&gt; <i>(optional)</i>
-    &lt;description&gt;<i>{string}</i>&lt;/description&gt; <i>(optional)</i>
-    &lt;facet id="<i>{string}</i>" version="<i>{string}</i>"/&gt; <i>(1 or more)</i>
-  &lt;/preset&gt; <i>(0 or more)</i>
-<font color="#7B7B7B">&lt;extension&gt;</font>
-</pre>
-</td></tr></table>
-
-<p><u>Java API Additions</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">interface org.eclipse.wst.common.project.facet.core.IPreset
-{</font>
-    enum Type { STATIC, DYNAMIC, USER_DEFINED }
-    Type getType();
-<font color="#7B7B7B">}</font>
-
-interface org.eclipse.wst.common.project.facet.core.IDynamicPreset extends IPreset
-{
-    static final String CONTEXT_KEY_FIXED_FACETS;
-    static final String CONTEXT_KEY_PRIMARY_RUNTIME;
-    IPreset resolve( Map<String,Object> context );
-}
-
-interface org.eclipse.wst.common.project.facet.core.IPresetFactory
-{
-    PresetDefinition createPreset( String presetId, Map<String,Object> context );
-}
-
-class org.eclipse.wst.common.project.facet.core.PresetDefinition
-{
-    PresetDefinition( String label, String description, Set<IProjectFacetVersion> facets );
-    String getLabel();
-    String getDescription();
-    Set<IProjectFacetVersion> getProjectFacets();
-}
-
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.FacetedProjectFramework
-{</font>
-    static final String DEFAULT_CONFIGURATION_PRESET_ID;
-<font color="#7B7B7B">}</font>
-</pre>
-</td></tr></table>
-
-<p><u>Deprecated Java API</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor=#FFF1C1>
-<pre>
-<font color="#7B7B7B">interface org.eclipse.wst.common.project.facet.core.IPreset
-{</font>
-    boolean isUserDefined()
-<font color="#7B7B7B">}</font>
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="#comparable">3. IProjectFacetVersion and IRuntimeComponentVersion Extend Comparable</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>The IProjectFacetVersion and IRuntimeComponentVersion interfaces now extend
-Comparable. Using the compareTo methods will yield significantly better performance
-than calling the version comparator directly on the version strings as the 
-compareTo methods use pre-computed results and do not need to parse the version
-strings.</p>
-
-<p>As part of this change, IVersionExpr.evaluate( String ) method has been
-replaced with IVersionExpr.check( Comparable ) method.</p>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="#requires-group">4. Requires Constraint Supports Groups</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>The requires constraint can now be declared using facet groups instead of
-individual facets. Any member of the group will satisfy the constraint. This
-allows a level of indirection so that a facet does not need to know about all of
-the group members.</p>
-
-<p><u>Extension Point Changes</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  &lt;project-facet-version&gt;
-    &lt;constraint&gt;</font>
-      &lt;requires group="group.id"/&gt;
-    <font color="#7B7B7B">&lt;/constraint&gt;
-  &lt;/project-facet-version&gt;
-&lt;extension&gt;</font>
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="group-labels">5. Labels and Descriptions for Groups</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>It is now possible to associate labels and description with groups. Note that
-groups are still automatically created on first use, so the use of the new group
-element is only necessary in order to specify the label and the description.</p>
-   
-<p><u>Extension Points Changes</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;</font>
-  &lt;group id="..."&gt; <i>(0 or more)</i>
-    &lt;label&gt;...&lt/label&gt;
-    &lt;description&gt;...&lt/description&gt; <i>(0 or 1)</i>
-  &lt/group&gt;
-<font color="#7B7B7B">&lt;extension&gt;</font>
-</pre>
-</td></tr></table>
-
-<p><u>Java API Changes</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IGroup
-{</font>
-   String getLabel();
-   String getDescription();
-<font color="#7B7B7B">}</font>
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="validate">6. New IFacetedProject Validation API</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>There is now API for validating the faceted project. It allows the caller to
-find out about any problems with the project without searching for problem
-markers created by the faceted project validation builder. The validation
-builder now uses the new API.</p>
-
-<p><u>Java API Changes</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IFacetedProject
-{</font>
-   IStatus validate( IProgressMonitor monitor );
-<font color="#7B7B7B">}</font>
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="new-wizard-class">7. AddRemoveFacetsWizard Class Renamed to ModifyFacetedProjectWizard</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>The AddRemoveFacetsWizard class has been renamed to ModifyFacetedProjectWizard
-to align with terminology change being made in the rest of the system. The old
-class is deprecated, but still supported (extends the new class).</p>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="pde-limitations">8. Extension Point Schema Changes to Work Around PDE Limitations</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>In order to work around false warnings reported by PDE's extension point schema validation, the
-following changes have been made to the framework's extension points. The old syntax is deprecated,
-but is still supported.</p>
-
-<p>When declaring that a facet belongs to a category...</p>
-
-<p><u>Old Syntax</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  &lt;project-facet&gt;</font>
-    &lt;category&gt;...&lt/category&gt;
-  <font color="#7B7B7B">&lt/project-facet&gt;
-&lt;extension&gt;</font>
-</pre>
-</td></tr></table>
-
-<p><u>New Syntax</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;
-  &lt;project-facet&gt;</font>
-    &lt;member category="..."/&gt;
-  <font color="#7B7B7B">&lt/project-facet&gt;
-&lt;extension&gt;</font>
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="listeners">9. Listeners and Events</a></font></p>
-<!--  ********************************************************************** -->
-
-<p>The existing facilities for listening on faceted project model changes have been re-designed to
-provide more information about the change that took place and to provide the same facility
-regardless of whether the client chooses to register the listener via direct API call or via an
-extension point.</p>
-
-<p>In 1.5, extenders could either:</p>
-
-<ol>
-  
-  <li>Use <code>IFacetedProject.addListener()</code> method. Listener would get called when any
-  aspect of faceted project model was changed, but the listener was not given any details about
-  the change that took place.<br/><br/></li>
-  
-  <li>Use <code>&lt;event-handler&gt;</code> element of the 
-  <code>org.eclipse.wst.common.project.facet.core.facets</code> extension point to register an
-  <code>IDelegate</code> implementation which is similar to how actions are implemented. This 
-  approach gave user a bit more control over what events to process as well as more information
-  regarding what actually took place. However, not all changes could be surfaced via this 
-  interface due to limitations of the extension point and the <code>IDelegate</code> interface.</li>
-  
-</ol>
-
-<p>Full discussion of the new facility can be found <a href="listeners.html">here</a>.</p>
-   
-<p><u>Java API Additions</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener
-{
-    void handleEvent( IFacetedProjectEvent event );
-}
-
-org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent
-{
-    enum Type
-    {
-        PROJECT_MODIFIED,
-        PRE_INSTALL,
-        POST_INSTALL,
-        PRE_UNINSTALL,
-        POST_UNINSTALL,
-        PRE_VERSION_CHANGE,
-        POST_VERSION_CHANGE,
-        FIXED_FACETS_CHANGED,
-        TARGETED_RUNTIMES_CHANGED,
-        PRIMARY_RUNTIME_CHANGED
-    }
-    
-    Type getType();
-    IFacetedProject getProject();
-}
-
-org.eclipse.wst.common.project.facet.core.events.IFixedFacetsChangedEvent : IFacetedProjectEvent
-{
-    Set&lt;IProjectFacet&gt; getOldFixedFacets();
-    Set&lt;IProjectFacet&gt; getNewFixedFacets();
-}
-
-org.eclipse.wst.common.project.facet.core.events.IProjectFacetActionEvent : IFacetedProjectEvent
-{
-    IProjectFacet getProjectFacet();
-    IProjectFacetVersion getProjectFacetVersion();
-    Object getActionConfig();
-}
-
-org.eclipse.wst.common.project.facet.core.events.IPrimaryRuntimeChangedEvent : IFacetedProjectEvent
-{
-    IRuntime getOldPrimaryRuntime();
-    IRuntime getNewPrimaryRuntime();
-}
-
-org.eclipse.wst.common.project.facet.core.events.ITargetedRuntimesChangedEvent : IFacetedProjectEvent
-{
-    Set&lt;IRuntime&gt; getOldTargetedRuntimes();
-    Set&lt;IRuntime&gt; getNewTargetedRuntimes();
-}
-
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IFacetedProject
-{</font>
-    void addListener( org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener, IFacetedProjectEvent.Type... );
-    void removeListener( org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener );
-<font color="#7B7B7B">}</font>
-
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.FacetedProjectFramework
-{</font>
-    void addListener( org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener, IFacetedProjectEvent.Type... );
-    void removeListener( org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener );
-<font color="#7B7B7B">}</font>
-</pre>
-</td></tr></table>
-
-<p><u>New Extension Point</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-&lt;extension point="org.eclipse.wst.common.project.facet.core.listeners"&gt;
-  &lt;listener 
-    class="{class:org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener}"
-    eventTypes="{csv:org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent.Type}"/> <i>(1 or more)</i>
-&lt;extension&gt;
-</pre>
-</td></tr></table>
-
-<p><u>Deprecated Java API</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor=#FFF1C1>
-<pre>
-org.eclipse.wst.common.project.facet.core.IFacetedProjectListener
-{
-    projectChanged();
-}
-
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IFacetedProject
-{</font>
-    void addListener( org.eclipse.wst.common.project.facet.core.IFacetedProjectListener );
-    void removeListener( org.eclipse.wst.common.project.facet.core.IFacetedProjectListener );
-<font color="#7B7B7B">}</font>
-
-org.eclipse.wst.common.project.facet.core.IRuntimeChangedEvent
-{
-    IRuntime getOldRuntime();
-    IRuntime getNewRuntime();
-}
-</pre>
-</td></tr></table>
-
-<p><u>Deprecated Extension Point</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#FFF1C1">
-<pre>
-<font color="#7B7B7B">&lt;extension point="org.eclipse.wst.common.project.facet.core.facets"&gt;</font>
-  &lt;event-handler type="{string}" facet="{string}" version="{string}"&gt;
-    &lt;delegate class="{class:org.eclipse.wst.common.project.facet.core.IDelegate}"/&gt;
-  &lt/event-handler&gt;
-<font color="#7B7B7B">&lt;extension&gt;</font>
-</pre>
-</td></tr></table>
-
-
-<!--  ********************************************************************** -->
-<p><font size="+1"><a name="misc">10. Miscellaneous</a></font></p>
-<!--  ********************************************************************** -->
-
-<p><u>Java API Additions</u></p>
-
-<table cellpadding="10"><tr><td width="10">&nbsp;</td><td bgcolor="#E2E2E2">
-<pre>
-<font color="#7B7B7B">org.eclipse.wst.common.project.facet.core.IFacetedProject
-{</font>
-    boolean isTargetable( IRuntime runtime );
-    boolean isTargeted( IRuntime runtime );
-<font color="#7B7B7B">}</font>
-</pre>
-</td></tr></table>
-
-
-</body>
-</html>
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/plugin.properties b/plugins/org.eclipse.wst.common.project.facet.doc.api/plugin.properties
deleted file mode 100644
index 46efccb..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/plugin.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-pluginName = Faceted Project Framework API Documentation
-providerName = Eclipse.org
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/plugin.xml b/plugins/org.eclipse.wst.common.project.facet.doc.api/plugin.xml
deleted file mode 100644
index 2c0c04e..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/plugin.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-	<extension point="org.eclipse.help.toc">
-		<toc file="toc.xml" primary="true">
-		</toc>
-	</extension>
-</plugin>
diff --git a/plugins/org.eclipse.wst.common.project.facet.doc.api/toc.xml b/plugins/org.eclipse.wst.common.project.facet.doc.api/toc.xml
deleted file mode 100644
index 5116230..0000000
--- a/plugins/org.eclipse.wst.common.project.facet.doc.api/toc.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS TYPE="org.eclipse.help.toc"?>
-
-<toc label="Faceted Project Framework Developer Guide" topic="content/description.html">
-    <topic label="Tutorial"
-       href="content/tutorial/tutorial.html">
-    </topic>
-    <topic label="Listening for Changes to Faceted Projects"
-       href="content/listeners.html">
-    </topic>	    
-    <topic label="Enabling UI Elements Based on Project Facets"
-       href="content/enabling-based-on-facets.html">
-    </topic>
-    <topic label="Questions &amp; Answers"
-       href="content/questions.html">
-    </topic>
-    <topic label="New for 1.5"
-       href="content/whatsnew150.html">
-    </topic>
-    <topic label="New for 1.5.1"
-       href="content/whatsnew151.html">
-    </topic>
-    <topic label="New for 2.0"
-       href="content/whatsnew20.html">
-    </topic>
-</toc>
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.project.facet.ui/META-INF/MANIFEST.MF
index 09627d3..e6de155 100644
--- a/plugins/org.eclipse.wst.common.project.facet.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.project.facet.ui/META-INF/MANIFEST.MF
@@ -9,11 +9,11 @@
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.common.project.facet.ui,
  org.eclipse.wst.common.project.facet.ui.internal;x-internal:=true
-Require-Bundle: org.eclipse.ui;bundle-version="[3.2.0,4.0.0)";visibility:=reexport,
- org.eclipse.ui.forms;bundle-version="[3.2.0,4.0)",
- org.eclipse.ui.ide;bundle-version="[3.2.0,4.0)",
- org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)";visibility:=reexport,
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.project.facet.core;bundle-version="[1.3.0,1.4.0)";visibility:=reexport
+Require-Bundle: org.eclipse.ui;bundle-version="[3.4.0,4.0.0)";visibility:=reexport,
+ org.eclipse.ui.forms;bundle-version="[3.3.100,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)";visibility:=reexport,
+ org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)",
+ org.eclipse.wst.common.project.facet.core;bundle-version="[1.3.0,2.0.0)";visibility:=reexport
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/about.html b/plugins/org.eclipse.wst.common.project.facet.ui/about.html
index 73db36e..2199df3 100644
--- a/plugins/org.eclipse.wst.common.project.facet.ui/about.html
+++ b/plugins/org.eclipse.wst.common.project.facet.ui/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>June 06, 2007</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsSelectionPanel.java b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsSelectionPanel.java
index 0b3e21b..00599bd 100644
--- a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsSelectionPanel.java
+++ b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/FacetsSelectionPanel.java
@@ -687,10 +687,16 @@
             return;
         }
         
+        int available = 0;
         int selected = 0;
 
         for( IProjectFacet f : category.getProjectFacets() )
         {
+            if( this.fpjwc.isFacetAvailable( f ) )
+            {
+                available++;
+            }
+            
             if( this.fpjwc.hasProjectFacet( f ) )
             {
                 selected++;
@@ -702,7 +708,7 @@
             this.treeViewer.setChecked( category, false );
             this.treeViewer.setGrayed( category, false );
         }
-        else if( selected == category.getProjectFacets().size() )
+        else if( selected == available )
         {
             this.treeViewer.setChecked( category, true );
             this.treeViewer.setGrayed( category, false );
diff --git a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/util/ReadOnlyComboBoxCellEditor.java b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/util/ReadOnlyComboBoxCellEditor.java
index b112200..69cb8ac 100644
--- a/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/util/ReadOnlyComboBoxCellEditor.java
+++ b/plugins/org.eclipse.wst.common.project.facet.ui/src/org/eclipse/wst/common/project/facet/ui/internal/util/ReadOnlyComboBoxCellEditor.java
@@ -1,12 +1,14 @@
-/******************************************************************************
- * Copyright (c) 2008 BEA Systems, Inc.
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 IBM Corporation and others.
  * 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:
- *    Konstantin Komissarchik - initial implementation and ongoing maintenance
+ *     IBM Corporation - initial API and implementation
+ *     Tom Schindl <tom.schindl@bestsolution.at> - bugfix in 174739
+ *     Konstantin Komissarchik - mproving behavior in the read-only case 
  ******************************************************************************/
 
 package org.eclipse.wst.common.project.facet.ui.internal.util;
diff --git a/tests/org.eclipse.wst.common.project.facet.core.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.common.project.facet.core.tests/META-INF/MANIFEST.MF
index 7902a48..85a169c 100644
--- a/tests/org.eclipse.wst.common.project.facet.core.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.common.project.facet.core.tests/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@
 Bundle-SymbolicName: org.eclipse.wst.common.project.facet.core.tests;singleton:=true
 Bundle-Version: 1.3.0.qualifier
 Bundle-Localization: plugin
-Require-Bundle: org.junit,
+Require-Bundle: org.junit;bundle-version="[3.8.2,4.0.0)",
  org.eclipse.wst.common.project.facet.core,
  org.eclipse.core.runtime,
  org.eclipse.core.resources
diff --git a/tests/org.eclipse.wst.common.project.facet.core.tests/about.html b/tests/org.eclipse.wst.common.project.facet.core.tests/about.html
index 9e73bda..0799bdb 100644
--- a/tests/org.eclipse.wst.common.project.facet.core.tests/about.html
+++ b/tests/org.eclipse.wst.common.project.facet.core.tests/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>June 06, 2007</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
diff --git a/tests/org.eclipse.wst.common.project.facet.ui.tests/about.html b/tests/org.eclipse.wst.common.project.facet.ui.tests/about.html
index 9e73bda..0799bdb 100644
--- a/tests/org.eclipse.wst.common.project.facet.ui.tests/about.html
+++ b/tests/org.eclipse.wst.common.project.facet.ui.tests/about.html
@@ -10,7 +10,7 @@
 
 <H3>About This Content</H3>
 
-<P>June 06, 2007</P>
+<P>June, 2008</P>
 
 <H3>License</H3>
 
