diff --git a/assembly/plugins/org.eclipse.jsf.branding/.classpath b/assembly/plugins/org.eclipse.jsf.branding/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/assembly/plugins/org.eclipse.jsf.branding/.cvsignore b/assembly/plugins/org.eclipse.jsf.branding/.cvsignore
deleted file mode 100644
index 3bc67e4..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-@dot*
-temp.folder
-build.xml
diff --git a/assembly/plugins/org.eclipse.jsf.branding/.project b/assembly/plugins/org.eclipse.jsf.branding/.project
deleted file mode 100644
index bd50004..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jsf.branding</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<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>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/assembly/plugins/org.eclipse.jsf.branding/META-INF/MANIFEST.MF b/assembly/plugins/org.eclipse.jsf.branding/META-INF/MANIFEST.MF
deleted file mode 100644
index b24d7e8..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,11 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %plugin.Name
-Bundle-SymbolicName: org.eclipse.jsf
-Bundle-Version: 0.5.0.qualifier
-Bundle-Activator: org.eclipse.jsf.main.MainPlugin
-Bundle-Localization: plugin
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime
-Eclipse-AutoStart: true
-Bundle-Vendor: %plugin.Provider
diff --git a/assembly/plugins/org.eclipse.jsf.branding/about.html b/assembly/plugins/org.eclipse.jsf.branding/about.html
deleted file mode 100644
index 6f6b96c..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>February 24, 2005</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/assembly/plugins/org.eclipse.jsf.branding/about.ini b/assembly/plugins/org.eclipse.jsf.branding/about.ini
deleted file mode 100644
index a21a3ec..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/about.ini
+++ /dev/null
@@ -1,29 +0,0 @@
-# about.ini
-# contains information about a feature
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# "%key" are externalized strings defined in about.properties
-# This file does not need to be translated.
-
-# Property "aboutText" contains blurb for "About" dialog (translated)
-aboutText=%blurb
-
-# Property "windowImage" contains path to window icon (16x16)
-# needed for primary features only
-
-# Property "featureImage" contains path to feature image (32x32)
-featureImage=eclipse32.gif
-
-# Property "aboutImage" contains path to product image (500x330 or 115x164)
-# needed for primary features only
-
-# Property "appName" contains name of the application (translated)
-# needed for primary features only
-
-# Property "welcomePage" contains path to welcome page (special XML-based format)
-# optional
-
-# Property "welcomePerspective" contains the id of the perspective in which the
-# welcome page is to be opened.
-# optional
-
-
diff --git a/assembly/plugins/org.eclipse.jsf.branding/about.mappings b/assembly/plugins/org.eclipse.jsf.branding/about.mappings
deleted file mode 100644
index bddaab4..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/about.mappings
+++ /dev/null
@@ -1,6 +0,0 @@
-# about.mappings
-# contains fill-ins for about.properties
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file does not need to be translated.
-
-0=@build@
\ No newline at end of file
diff --git a/assembly/plugins/org.eclipse.jsf.branding/about.properties b/assembly/plugins/org.eclipse.jsf.branding/about.properties
deleted file mode 100644
index c62b076..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/about.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 Oracle 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:
-#     Oracle Corporation - initial API and implementation
-###############################################################################
-
-# about.properties
-# contains externalized strings for about.ini
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# fill-ins are supplied by about.mappings
-# This file should be translated.
-
-blurb=JavaServer Faces Tools\n\
-\n\
-Version: {featureVersion}\n\
-Build id: {0}\n\
-\n\
-(c) Copyright Eclipse contributors and others 2005.  All rights reserved.\n\
-Visit http://www.eclipse.org/webtools
diff --git a/assembly/plugins/org.eclipse.jsf.branding/build.properties b/assembly/plugins/org.eclipse.jsf.branding/build.properties
deleted file mode 100644
index bbae244..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/build.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               eclipse32.png,\
-               eclipse32.gif,\
-               about.properties,\
-               about.mappings,\
-               about.ini,\
-               about.html,\
-               plugin.properties,\
-               bin/
-src.includes = src/,\
-               eclipse32.png,\
-               eclipse32.gif,\
-               build.properties,\
-               about.properties,\
-               about.mappings,\
-               about.ini,\
-               about.html,\
-               META-INF/,\
-               plugin.properties
diff --git a/assembly/plugins/org.eclipse.jsf.branding/eclipse32.gif b/assembly/plugins/org.eclipse.jsf.branding/eclipse32.gif
deleted file mode 100644
index e6ad7cc..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/eclipse32.gif
+++ /dev/null
Binary files differ
diff --git a/assembly/plugins/org.eclipse.jsf.branding/eclipse32.png b/assembly/plugins/org.eclipse.jsf.branding/eclipse32.png
deleted file mode 100644
index 568fac1..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/eclipse32.png
+++ /dev/null
Binary files differ
diff --git a/assembly/plugins/org.eclipse.jsf.branding/plugin.properties b/assembly/plugins/org.eclipse.jsf.branding/plugin.properties
deleted file mode 100644
index fe471d2..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/plugin.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-plugin.Name=JavaServer Faces Tools
-plugin.Provider=Eclipse.org
\ No newline at end of file
diff --git a/assembly/plugins/org.eclipse.jsf.branding/src/org/eclipse/jsf/main/MainPlugin.java b/assembly/plugins/org.eclipse.jsf.branding/src/org/eclipse/jsf/main/MainPlugin.java
deleted file mode 100644
index a8b13fe..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/src/org/eclipse/jsf/main/MainPlugin.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.eclipse.jsf.main;
-
-import org.eclipse.ui.plugin.*;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.osgi.framework.BundleContext;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class MainPlugin extends AbstractUIPlugin {
-
-	//The shared instance.
-	private static MainPlugin plugin;
-	
-	/**
-	 * The constructor.
-	 */
-	public MainPlugin() {
-		plugin = this;
-	}
-
-	/**
-	 * This method is called upon plug-in activation
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	/**
-	 * This method is called when the plug-in is stopped
-	 */
-	public void stop(BundleContext context) throws Exception {
-		super.stop(context);
-		plugin = null;
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static MainPlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns an image descriptor for the image file at the given
-	 * plug-in relative path.
-	 *
-	 * @param path the path
-	 * @return the image descriptor
-	 */
-	public static ImageDescriptor getImageDescriptor(String path) {
-		return AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.jsf.main", path);
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/provisional/jsfappconfig/JSFAppConfigUtils.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/provisional/jsfappconfig/JSFAppConfigUtils.java
index 4914c1f..b1adb3b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/provisional/jsfappconfig/JSFAppConfigUtils.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/provisional/jsfappconfig/JSFAppConfigUtils.java
@@ -158,14 +158,7 @@
 		if (isValidJSFProject(project)) {
 			WebArtifactEdit webArtifactEdit = WebArtifactEdit.getWebArtifactEditForRead(project);
 			if (webArtifactEdit != null) {
-				WebApp webApp = null;
-				try {
-					webApp = webArtifactEdit.getWebApp();
-				} catch(ClassCastException cce) {
-					//occasionally thrown from WTP code in RC3 and possibly later
-					JSFCorePlugin.log(IStatus.ERROR, cce.getLocalizedMessage(), cce);
-					return filesList;
-				}
+				WebApp webApp = webArtifactEdit.getWebApp();
 				if (webApp != null) {
 					String filesString = null;
 					//need to branch here due to model version differences (BugZilla #119442)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/MethodType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/MethodType.java
deleted file mode 100644
index 4ec4027..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/MethodType.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.eclipse.jst.jsf.core.internal.types;
-
-/**
- * Signature type for method bindings in an EL expression
- * 
- * @author cbateman
- *
- */
-public class MethodType implements SignatureBasedType 
-{
-    private final String        _methodName;
-    private final String        _signature;
-
-    /**
-     * @param methodName
-     * @param signature
-     */
-    public MethodType(final String methodName, final String signature)
-    {
-        _methodName = methodName;
-        _signature = signature;
-    }
-
-    /**
-     * @see org.eclipse.jst.jsf.core.internal.types.SignatureBasedType#getSignature()
-     */
-    public String getSignature() 
-    {
-        return _signature;
-    }
-
-    /**
-     * @return the method name signature
-     */
-    public String getMethodName() 
-    {
-        return _methodName;
-    }
-
-    public CompositeType toCompositeType() 
-    {
-        return new CompositeType(_signature, IAssignable.ASSIGNMENT_TYPE_NONE);
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/SignatureBasedType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/SignatureBasedType.java
index ac23a33..b0a3aec 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/SignatureBasedType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/SignatureBasedType.java
@@ -14,9 +14,4 @@
      * @return the signature string
      */
     public String getSignature();
-    
-    /**
-     * @return a version of the this type in CompositeType form
-     */
-    public CompositeType toCompositeType();
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeComparator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeComparator.java
index b50f2f8..d2036cb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeComparator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeComparator.java
@@ -1,8 +1,6 @@
 package org.eclipse.jst.jsf.core.internal.types;
 
-import org.eclipse.emf.common.util.BasicDiagnostic;
 import org.eclipse.emf.common.util.Diagnostic;
-import org.eclipse.jdt.core.Signature;
 
 /**
  * Static utility class used to compare two CompositeTypes for compatability
@@ -18,157 +16,9 @@
      * @return true if firstType is assignable to secondType or vice-versa,
      * depending on their assignment and runtime types
      */
-    public static Diagnostic calculateTypeCompatibility(final CompositeType firstType,
-                                                        final CompositeType secondType)
+    public static Diagnostic calculateTypeCompatibility(CompositeType firstType,
+                                                        CompositeType secondType)
     {
-        // first, box all primitives
-        final CompositeType boxedFirstType = 
-            TypeTransformer.transformBoxPrimitives(firstType);
-        final CompositeType boxedSecondType =
-            TypeTransformer.transformBoxPrimitives(secondType);
-        
-        final String[] mustBeSatisfied = boxedFirstType.getSignatures();
-        final String[] testSignatures = boxedSecondType.getSignatures();
-        // TODO: need better user messages here
-        Diagnostic result = new BasicDiagnostic(Diagnostic.ERROR, "", 0, 
-                "EL expression does not evaluate to expected types for this attribute", null);
-        // now loop through each type in the first type and see
-        // if there is a type satisfying it in the second
-        MAIN_LOOP:
-        for  (int i = 0; i < mustBeSatisfied.length; i++)
-        {
-            final String curSatisfyType = mustBeSatisfied[i];
-
-            CHECK_CANDIDATES:
-            for (int j = 0; j < testSignatures.length; j++)
-            {
-                final String testType = testSignatures[j];
-                
-                // simplest success is an exact match
-                if (curSatisfyType.equals(testType))
-                {
-                    result = Diagnostic.OK_INSTANCE;
-                    break MAIN_LOOP;
-                }
-                
-                // or if both are methods, check to see if the
-                // method signatures match
-                if (TypeUtil.isMethodSignature(curSatisfyType))
-                {
-                    // if the satisfy type is a method,
-                    // the test  type is not, then don't go any
-                    // further, since we know the won't match
-                    if (!TypeUtil.isMethodSignature(testType))
-                    {
-                        continue CHECK_CANDIDATES;
-                    }
-                    else
-                    {
-                        final Diagnostic test =
-                            methodSignaturesMatch(curSatisfyType, testType);
-                        
-                        if (test.getSeverity() ==  Diagnostic.OK)
-                        {
-                            result = Diagnostic.OK_INSTANCE;
-                            // found a match so break
-                            break MAIN_LOOP;
-                        }
-                    }
-                }
-                
-                // or, can we coerce testType to curSatisfyType
-                if (canCoerce(testType, curSatisfyType))
-                {
-                    result = Diagnostic.OK_INSTANCE;
-                    break MAIN_LOOP;
-                }
-            }
-        }
-
-        return result;
-    }
-    
-    private static boolean canCoerce(String testType, String checkType)
-    {
-        // can always to coerce to string
-        if (TypeCoercer.typeIsString(checkType))
-        {
-            return true;
-        }
-        else if (TypeCoercer.typeIsNumeric(checkType))
-        {
-            return canCoerceNumeric(testType);
-        }
-        else if (TypeCoercer.typeIsBoolean(checkType))
-        {
-            return TypeCoercer.canCoerceToBoolean(testType);
-        }
-        
-        // otherwise, no type coercion available
-        return false;
-    }
-    
-    private static boolean canCoerceNumeric(String testType)
-    {
-        try
-        {
-            TypeCoercer.coerceToNumber(testType);
-            // TODO: there is a case when coerceToNumber returns
-            // null meaning "not sure", that we may want to handle
-            // differently, with a warning
-            return true;
-        }
-        catch (TypeCoercionException tce)
-        {
-            // outright failure -- can't coerce
-            return false;
-        }
-    }
-    
-    private static Diagnostic methodSignaturesMatch(String firstMethodSig, String secondMethodSig)
-    {
-        // TODO: need to account for primitive type coercions
-        final String[]  firstMethodParams = 
-            Signature.getParameterTypes(firstMethodSig);
-        final String[]  secondMethodParams =
-            Signature.getParameterTypes(secondMethodSig);
-        
-        // fail fast if param count doesn't match
-        if (firstMethodParams.length != secondMethodParams.length)
-        {
-            return new BasicDiagnostic(Diagnostic.ERROR, "", 0, 
-                    "Parameter count mismatch", null);
-        }
-        
-        // now check each parameter
-        for (int i = 0; i < firstMethodParams.length; i++)
-        {
-            // need to box primitives before comparing
-            final String firstMethodParam = 
-                TypeTransformer.transformBoxPrimitives(firstMethodParams[i]);
-            final String secondMethodParam = 
-                TypeTransformer.transformBoxPrimitives(secondMethodParams[i]);
-            
-            if (!firstMethodParam.equals(secondMethodParam))
-            {
-                return new BasicDiagnostic(Diagnostic.ERROR, "", 0,
-                        "Type mismatch on parameter "+i, null);
-            }
-        }
-        
-        // if we get to here then we need only check the return type
-        final String firstReturn =
-            TypeTransformer.transformBoxPrimitives(Signature.getReturnType(firstMethodSig));
-        final String secondReturn =
-            TypeTransformer.transformBoxPrimitives(Signature.getReturnType(secondMethodSig));
-        
-        if (!firstReturn.equals(secondReturn))
-        {
-            return new BasicDiagnostic(Diagnostic.ERROR, "", 0,
-                    "Return types don't match", null);
-        }
-        
-        // if we get to here, then everything checks out
         return Diagnostic.OK_INSTANCE;
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeConstants.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeConstants.java
index 4fe71d7..ae0fe92 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeConstants.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeConstants.java
@@ -69,8 +69,4 @@
      * Collection type
      */
     public final static String   TYPE_COLLECTION = "Ljava.util.Collection;";
-    /**
-     * Comparable type
-     */
-    public final static String   TYPE_COMPARABLE = "Ljava.lang.Comparable;";
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeUtil.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeUtil.java
index 2f231c5..c823a20 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/TypeUtil.java
@@ -1,7 +1,5 @@
 package org.eclipse.jst.jsf.core.internal.types;
 
-import org.eclipse.jdt.core.Signature;
-
 /**
  * Package utility class
  * @author cbateman
@@ -22,19 +20,10 @@
      * @param assignmentType
      * @return true if assignmentType has rhs flag set
      */
-    public static boolean matchesRHS(int assignmentType)
+    public  static boolean matchesRHS(int assignmentType)
     {
         return (assignmentType & IAssignable.ASSIGNMENT_TYPE_RHS) != 0;
     }
 
-    /**
-     * @param signature
-     * @return true if the signature is a method signature
-     */
-    public static boolean isMethodSignature(final String signature)
-    {
-        // method signature must start with a "("
-        return signature.charAt(0) == Signature.C_PARAM_START;
-    }
     private TypeUtil() {/*not instantiable*/}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/ValueType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/ValueType.java
index 6d6f72f..6264422 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/ValueType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/types/ValueType.java
@@ -3,36 +3,22 @@
 import org.eclipse.jdt.core.Signature;
 
 /**
- * Value object representing a value binding type by it's type and assignability
- * information
- * 
  * @author cbateman
  *
  */
 public class ValueType implements SignatureBasedType, IAssignable
 {
-    private final static String[]        EMPTY_STRING_ARRAY = new String[0];
-    
     private final String        _signature;
     private final int           _assignmentMask;
-    private final String[]      _superTypes;
-    private final String[]      _interfaceTypes;
-    
-    private String[]            _allTypes;  // lazy creation on getAllTypes
 
     /**
      * Construct a new ValueType object with the given
      * signature
      * 
      * @param signature
-     * @param superTypes 
-     * @param interfaceTypes 
      * @param assignmentMask 
      */
-    public ValueType(final String signature,
-                     final String[] superTypes,
-                     final String[] interfaceTypes,
-                     final int assignmentMask) 
+    public ValueType(final String signature, final int assignmentMask) 
     {
         if (signature == null)
         {
@@ -41,36 +27,8 @@
     
         _signature = signature;
         _assignmentMask = assignmentMask;
-        _superTypes = superTypes != null ? superTypes : EMPTY_STRING_ARRAY;
-        _interfaceTypes = interfaceTypes != null ? interfaceTypes : EMPTY_STRING_ARRAY;
     }
-    
-    /**
-     * Copy constructor equivilent to 
-     * ValueType(template.getSignature(), template.getSuperTypes(), template.getInterfaceTypes(),assingmentMask)
-     * 
-     * @param template
-     * @param assignmentMask
-     */
-    public ValueType(final ValueType  template, final int assignmentMask)
-    {
-        this(template._signature, template._superTypes, 
-                template._interfaceTypes, assignmentMask);
-    }
-    
-    /**
-     * Convienence constructor for creating ValueType's with no supertype
-     * or interface info.  Equivilent to:
-     *  ValueType(signature, new String[0], new String[0], assignmentMask)
-     *  
-     * @param signature
-     * @param assignmentMask
-     */
-    public ValueType(final String signature, final int assignmentMask)
-    {
-        this(signature, EMPTY_STRING_ARRAY, EMPTY_STRING_ARRAY, assignmentMask);
-    }
-    
+
     /* (non-Javadoc)
      * @see org.eclipse.jst.jsf.core.internal.types.SignatureBasedType#getSignature()
      */
@@ -96,66 +54,4 @@
         return Signature.getSignatureSimpleName
             (TypeTransformer.transformBoxPrimitives(_signature));
     }
-    
-    /**
-     * @return an array of all signatures of all super types or empty
-     * array if there are no super types for this type
-     */
-    public String[] getSuperTypes()
-    {
-        return _superTypes;
-    }
-    
-    /**
-     * @return an array of all interfaces implemented or empty array
-     * if none
-     */
-    public String[] getInterfaceTypes()
-    {
-        return _interfaceTypes;
-    }
-    
-    /**
-     * @return all types including the base type, super types and interface
-     * types.
-     */
-    public String[]  getAllTypes()
-    {
-        if (_allTypes == null)
-        {
-            int numberOfTypes = 1 + _superTypes.length + _interfaceTypes.length;
-            _allTypes = new String[numberOfTypes];
-            _allTypes[0] = _signature;
-            System.arraycopy(_superTypes, 0, _allTypes, 1, _superTypes.length);
-            System.arraycopy(_interfaceTypes, 0, _allTypes, 1+_superTypes.length, _interfaceTypes.length);
-        }
-        return _allTypes;
-    }
-    
-    
-    
-    public CompositeType toCompositeType() 
-    {
-        return new CompositeType(getAllTypes(), getAssignability());
-    }
-
-    /**
-     * @param signature
-     * @return true if an instance of this type would satisfy instanceof signature
-     *  
-     */
-    public boolean isInstanceOf(final String signature)
-    {
-        final String[]  allTypes = getAllTypes();
-        
-        for (int i = 0; i < allTypes.length; i++)
-        {
-            if (allTypes[i].equals(signature))
-            {
-                return true;
-            }
-        }
-        
-        return false;
-    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MyEditingDomainActionContributor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MyEditingDomainActionContributor.java
index 038bcbe..4773770 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MyEditingDomainActionContributor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MyEditingDomainActionContributor.java
@@ -1,7 +1,7 @@
 package org.eclipse.jst.jsf.facesconfig.ui;
 
-import org.eclipse.emf.edit.domain.IEditingDomainProvider;
 import org.eclipse.emf.edit.ui.action.EditingDomainActionBarContributor;
+import org.eclipse.jst.jsf.facesconfig.ui.page.FacesConfigMasterDetailPage;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.actions.ActionFactory;
@@ -34,13 +34,13 @@
 		// copyAction);
 		// actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(),
 		// pasteAction);
-		if (part instanceof IEditingDomainProvider) {
+		if (part instanceof FacesConfigMasterDetailPage) {
 			activate();
 		}
 	}
 
 	public void update() {
-		if (getActiveEditor() instanceof IEditingDomainProvider) {
+		if (getActiveEditor() instanceof FacesConfigMasterDetailPage) {
 			super.update();
 		}
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/page/OthersPage.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/page/OthersPage.java
index 6bda8c0..b894345 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/page/OthersPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/page/OthersPage.java
@@ -21,7 +21,6 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
 import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.emf.edit.domain.IEditingDomainProvider;
 import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
 import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
 import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage;
@@ -73,7 +72,7 @@
  * This class is the "Others" page.
  */
 public class OthersPage extends FormPage implements IFacesConfigPage,
-		ISelectionProvider, ISelectionChangedListener, IEditingDomainProvider {
+		ISelectionProvider, ISelectionChangedListener {
 
 	public static final String PAGE_ID = "org.eclipse.jst.jsf.facesconfig.ui.page.OthersPage";
 
@@ -726,11 +725,4 @@
 			}
 		}
 	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.emf.edit.domain.IEditingDomainProvider#getEditingDomain()
-	 */
-	public EditingDomain getEditingDomain() {
-		return ((FacesConfigEditor) getEditor()).getEditingDomain();
-	}
 }
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.ui/META-INF/MANIFEST.MF
index d720a35..b431519 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/META-INF/MANIFEST.MF
@@ -25,8 +25,7 @@
  org.eclipse.ui.ide,
  org.eclipse.jst.j2ee.core,
  org.eclipse.emf.ecore,
- org.eclipse.jem.util,
- org.eclipse.jst.jsf.validation.el
+ org.eclipse.jem.util
 Eclipse-LazyStart: true
 Export-Package: org.eclipse.jst.jsf.ui.internal;x-friends:="org.eclipse.jst.jsf.ui.tests",
  org.eclipse.jst.jsf.ui.internal.classpath;x-friends:="org.eclipse.jst.jsf.ui.tests",
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.xml b/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.xml
index 124ad0d..7a13e63 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.xml
@@ -25,11 +25,6 @@
            class="org.eclipse.jst.jsf.ui.internal.classpath.JSFLibrariesPreferencePage"
            id="org.eclipse.jst.jsf.ui.jsfLibraryPage"
            name="JSF Libraries"/>
-     <page
-           category="org.eclipse.wst.sse.ui.internal.provisional.preferences"
-           class="org.eclipse.jst.jsf.ui.internal.validation.JSFValidationPreferencePage"
-           id="org.eclipse.jst.jsf.ui.JSFValidationPage"
-           name="JSF Validation"/>
   </extension>
   <extension
         point="org.eclipse.ui.newWizards">
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
index 978f6cf..9255df5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
@@ -98,21 +98,7 @@
 	public static String JSFLibraryWizard_ValidateNoLibraryName;
 	public static String JSFLibraryWizard_ValidateExistingLibraryName;
 
-    /**
-     * Title set on the el validation preference panel
-     */
-    public static String JSFValidationPreferencePage_ELPrefPanel_Title;
-    /**
-     * Title set on the checkbox that enables/disables build validation for EL
-     */
-    public static String JSFValidationPreferencePage_ELPrefPanel_BuildValidationCheckBoxTitle;
-    /**
-     * Title set on the checkbox that enables/disables incremental (as you type)
-     * validation for EL
-     */
-    public static String JSFValidationPreferencePage_ELPrefPanel_IncrementalValidationCheckBoxTitle;
-
-    static {
+	static {
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties
index ef90567..72bfa22 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/messages.properties
@@ -73,8 +73,4 @@
 JSFLibraryConfigControl_RemoveAll=\ \ <<  
 JSFLibraryConfigControl_NewComponentLibrary=New...
 JSFLibraryConfigControl_TH_Deploy=Deploy
-JSFLibraryConfigControl_TH_LibraryName=Library Name
-
-JSFValidationPreferencePage_ELPrefPanel_Title=Expression Language (EL) Validation
-JSFValidationPreferencePage_ELPrefPanel_BuildValidationCheckBoxTitle=Validate EL on Build/Run Validation
-JSFValidationPreferencePage_ELPrefPanel_IncrementalValidationCheckBoxTitle= Validate EL as you type (may be slow on some pages)
+JSFLibraryConfigControl_TH_LibraryName=Library Name
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ELPrefPanel.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ELPrefPanel.java
deleted file mode 100644
index fa21821..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ELPrefPanel.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.eclipse.jst.jsf.ui.internal.validation;
-
-import org.eclipse.jst.jsf.ui.internal.Messages;
-import org.eclipse.jst.jsf.validation.internal.ELValidationPreferences;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.RowLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Group;
-
-/**
- * Creates and manages a panel for configuring 
- * 
- * @author cbateman
- */
-/*package*/ class ELPrefPanel 
-{
-    /* view */
-    private final Group     _container;
-    private final Button    _chkBuildValidation;
-    private final Button    _chkIncrementalValidation;
-    
-    /* model */
-    private ELValidationPreferences  _prefs;
-    
-    /**
-     * Allocates new container in parent.
-     * @param parent
-     */
-    public ELPrefPanel(Composite parent)
-    {
-        _container = new Group(parent, SWT.NONE);
-        _container.setText(Messages.JSFValidationPreferencePage_ELPrefPanel_Title);
-        _container.setLayout(new RowLayout(SWT.VERTICAL));
-        
-        _chkBuildValidation = new Button(_container, SWT.CHECK);
-        _chkBuildValidation.setText(Messages.JSFValidationPreferencePage_ELPrefPanel_BuildValidationCheckBoxTitle);
-        _chkBuildValidation.addSelectionListener(new SelectionAdapter()
-        {
-            public void widgetSelected(SelectionEvent e) 
-            {
-                _prefs.setEnableBuildValidation(_chkBuildValidation.getSelection());
-                refresh();
-            }
-        });
-        
-        _chkIncrementalValidation = new Button(_container, SWT.CHECK);
-        _chkIncrementalValidation.setText(Messages.JSFValidationPreferencePage_ELPrefPanel_IncrementalValidationCheckBoxTitle);
-        _chkIncrementalValidation.addSelectionListener(new SelectionAdapter()
-        {
-            public void widgetSelected(SelectionEvent e) 
-            {
-                _prefs.setEnableIncrementalValidation(_chkIncrementalValidation.getSelection());
-                refresh();
-            }
-        });
-
-    }
-    
-    /**
-     * @return the top-level container managed by this panel
-     */
-    public Control getControl()
-    {
-        return _container;
-    }
-    
-    /**
-     * Sets the model for panel
-     * 
-     * @param prefs
-     */
-    public void setModel(ELValidationPreferences  prefs)
-    {
-        _prefs = prefs;
-    }
-    
-    /**
-     * Refreshes the UI from the model
-     */
-    public void refresh()
-    {
-        _chkBuildValidation.setSelection(_prefs.isEnableBuildValidation());
-        _chkIncrementalValidation.
-            setSelection(_prefs.isEnableIncrementalValidation());
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/JSFValidationPreferencePage.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/JSFValidationPreferencePage.java
deleted file mode 100644
index 51fa41e..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/JSFValidationPreferencePage.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.eclipse.jst.jsf.ui.internal.validation;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.PreferencePage;
-import org.eclipse.jst.jsf.validation.el.Activator;
-import org.eclipse.jst.jsf.validation.internal.ValidationPreferences;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPreferencePage;
-
-/**
- * Workbench preference page for configuring JSF validation
- * 
- * @author cbateman
- *
- */
-public class JSFValidationPreferencePage extends PreferencePage implements
-        IWorkbenchPreferencePage 
-{
-    private final ValidationPreferences     _prefs;
-    
-    private ELPrefPanel                     _elPrefPanel;
-    
-    /**
-     * Constructor
-     */
-    public JSFValidationPreferencePage()
-    {
-        super(/* TODO: title*/);
-        _prefs = new ValidationPreferences();
-        _prefs.load(getPreferenceStore());
-    }
-    
-    protected Control createContents(Composite parent) 
-    {
-        _elPrefPanel = new ELPrefPanel(parent);
-        _elPrefPanel.setModel(_prefs.getElPrefs());
-        _elPrefPanel.refresh();
-        return _elPrefPanel.getControl();
-    }
-
-    public void init(IWorkbench workbench) 
-    {
-        // do nothing
-    }
-
-    protected void performApply() 
-    {
-        _prefs.commit(getPreferenceStore());
-    }
-
-    protected void performDefaults() 
-    {
-        _prefs.setDefaults();
-        _elPrefPanel.refresh();
-        super.performDefaults();
-    }
-
-    public boolean performOk() 
-    {
-        performApply();
-        return true;
-    }
-
-    protected IPreferenceStore doGetPreferenceStore() 
-    {
-        // load the validation pref store
-        return Activator.getDefault().getPreferenceStore();
-    }
-    
-}
