diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/.classpath b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/.classpath
@@ -0,0 +1,7 @@
+<?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/jsf/tests/org.eclipse.jst.jsf.metadata.tests/.cvsignore b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/.cvsignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/.cvsignore
@@ -0,0 +1 @@
+bin
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/.project b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/.project
new file mode 100644
index 0000000..6f604a6
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.jst.jsf.metadata.tests</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/jsf/tests/org.eclipse.jst.jsf.metadata.tests/META-INF/MANIFEST.MF b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9f3d3b0
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.jst.jsf.metadata.tests Plug-in
+Bundle-SymbolicName: org.eclipse.jst.jsf.metadata.tests; singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-Activator: org.eclipse.jst.jsf.metadata.tests.Activator
+Bundle-Localization: plugin
+Bundle-ClassPath: jsfmetadatatests.jar
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.jst.jsf.core,
+ org.eclipse.jst.jsf.metadataprocessors,
+ org.eclipse.ui,
+ org.eclipse.core.resources,
+ org.eclipse.wst.common.frameworks,
+ org.eclipse.emf.common,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.ecore.xmi,
+ org.eclipse.core.runtime.compatibility,
+ org.junit,
+ org.eclipse.jst.jsf.contentmodel.annotations,
+ org.eclipse.jst.jsf.taglibprocessing,
+ org.eclipse.wst.common.project.facet.core,
+ org.eclipse.wst.common.modulecore,
+ org.eclipse.jst.j2ee.web,
+ org.eclipse.jst.jsf.context.resolver.structureddocument,
+ org.eclipse.jst.jsf.context.structureddocument,
+ org.eclipse.wst.sse.core,
+ org.eclipse.jdt.core
+Eclipse-LazyStart: true
+Export-Package: org.eclipse.jst.jsf.metadata.tests
+Plugin-Class: org.eclipse.jst.jsf.metadata.tests.Activator
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/build.properties b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/plugin.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/plugin.xml
new file mode 100644
index 0000000..1546e6e
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/plugin.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   <extension
+         point="org.eclipse.jst.jsf.contentmodel.annotations.annotationFiles">
+      <annotationFile
+            location="/testfiles/metadata/jsf_test.xml"
+            uri="http://org.eclipse.jsf/test"/>
+      <annotationFile
+            location="/testfiles/metadata/jsf_test.xml"
+            uri="http://org.eclipse.jsf/test2"
+            parser="com.foobar.DifferentParser"/>
+      <annotationFile
+            location="/testfiles/metadata/FileA.xml"
+            uri="http://org.eclipse.jsf/dupeTest"/>
+      <annotationFile
+            location="/testfiles/metadata/FileB.xml"
+            uri="http://org.eclipse.jsf/dupeTest"/>  
+      <annotationFile
+            location="/testfiles/metadata/CaseInsensitive.xml"
+            uri="http://org.eclipse.jsf/caseInsensitiveTest"/>     
+      <annotationFile
+            location="/testfiles/metadata/doesntexist.xml"
+            uri=" http://org.eclipse.jsf/missingFile  "/>
+      <annotationFile
+            location="/testfiles/metadata/jsf_metadataprocessing.xml"
+            uri=" http://org.eclipse.jsf/metadataprocessing"/>
+      <annotationFile
+            location="/testfiles/metadata/jsf_tagprocessing.xml"
+            uri="http://org.eclipse.jsf/tagprocessing"/>                                                  
+   </extension>
+   <extension
+         point="org.eclipse.jst.jsf.metadataprocessors.AttributeValueRuntimeTypes">
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.internal.provisional.attributevalues.StringType"
+            id="MyStringArrayType"/>
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.metadata.tests.metadataprocessing.types.MyBooleanType"
+            id="MyBooleanType"/>
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.internal.provisional.attributevalues.LongType"
+            id="MyLongType"/>
+      <attributeValueRuntimeType id="NoImplType"/>
+   </extension>
+   <extension
+         point="org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledFeatures">
+      <MetaDataEnabledFeature
+            class="org.eclipse.jst.jsf.metadata.tests.metadataprocessing.MetaDataEnabledBarkAdapter"
+            typeid="org.eclipse.jst.jsf.taglibprocessing.attributevalues.BooleanType"/>
+      <MetaDataEnabledFeature
+            class="org.eclipse.jst.jsf.metadata.tests.metadataprocessing.MetaDataEnabledBarkAdapter"
+            typeid="org.eclipse.jst.jsf.metadata.tests.MyBooleanType"/>
+      <MetaDataEnabledFeature
+            class="org.eclipse.wtp.jsf.core.tests.NoImplPossibleVals"
+            typeid="org.eclipse.jst.jsf.metadata.tests.NoImplType"/>
+   </extension>
+</plugin>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/com/foobar/DifferentParser.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/com/foobar/DifferentParser.java
new file mode 100644
index 0000000..053b761
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/com/foobar/DifferentParser.java
@@ -0,0 +1,12 @@
+package com.foobar;
+
+import junit.framework.Assert;
+
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.CMAnnotationFileParser;
+
+public class DifferentParser extends CMAnnotationFileParser {
+	public DifferentParser(){
+		super();
+		Assert.assertTrue("Loaded DifferentParser", true);
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/Activator.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/Activator.java
new file mode 100644
index 0000000..30bed4a
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/Activator.java
@@ -0,0 +1,47 @@
+package org.eclipse.jst.jsf.metadata.tests;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class Activator extends Plugin {
+
+	public static final String ID_BUNDLE = "org.eclipse.jst.jsf.metadata.tests";
+	
+	//The shared instance.
+	private static Activator plugin;
+	
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+		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.
+	 *
+	 * @return the shared instance.
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/AllTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/AllTests.java
new file mode 100644
index 0000000..17c3763
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/AllTests.java
@@ -0,0 +1,54 @@
+package org.eclipse.jst.jsf.metadata.tests;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.jst.jsf.metadata.tests.annotations.AnnotationHelperTestCases;
+import org.eclipse.jst.jsf.metadata.tests.annotations.AnnotationMapTestCases;
+import org.eclipse.jst.jsf.metadata.tests.annotations.CaseInsensitiveAnnotationsTestCases;
+import org.eclipse.jst.jsf.metadata.tests.annotations.DuplicateAnnotationsTestCases;
+import org.eclipse.jst.jsf.metadata.tests.annotations.NegativeAnnotationFileTestCases;
+import org.eclipse.jst.jsf.metadata.tests.metadataprocessing.AttributeValueRuntimeTypeExtensionsTests;
+import org.eclipse.jst.jsf.metadata.tests.metadataprocessing.AttributeValueRuntimeTypeFactoryTests;
+import org.eclipse.jst.jsf.metadata.tests.metadataprocessing.AttributeValueRuntimeTypesRegistryTests;
+import org.eclipse.jst.jsf.metadata.tests.metadataprocessing.MetaDataProcessorsFactoryTests;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.BooleanTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.DoubleTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.IntegerTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.JavaClassTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.LongTypeTest;
+import org.eclipse.jst.jsf.metadata.tests.taglibprocessing.StringTypeTest;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test for org.eclipse.jst.jsf.metadata.tests");
+		//$JUnit-BEGIN$
+		
+		//annotations 
+		suite.addTestSuite(AnnotationMapTestCases.class);
+		suite.addTestSuite(AnnotationHelperTestCases.class);
+		suite.addTestSuite(DuplicateAnnotationsTestCases.class);
+		suite.addTestSuite(CaseInsensitiveAnnotationsTestCases.class);
+		suite.addTestSuite(NegativeAnnotationFileTestCases.class);
+
+		//metadataprocessing
+		suite.addTestSuite(MetaDataProcessorsFactoryTests.class);
+		suite.addTestSuite(AttributeValueRuntimeTypeExtensionsTests.class);
+		suite.addTestSuite(AttributeValueRuntimeTypesRegistryTests.class);
+		suite.addTestSuite(AttributeValueRuntimeTypeFactoryTests.class);
+		
+		//taglib processing
+		suite.addTestSuite(StringTypeTest.class);
+		suite.addTestSuite(BooleanTypeTest.class);
+		suite.addTestSuite(IntegerTypeTest.class);
+		suite.addTestSuite(LongTypeTest.class);
+		suite.addTestSuite(DoubleTypeTest.class);
+		suite.addTestSuite(JavaClassTypeTest.class);
+
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/AllAnnotationsTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/AllAnnotationsTests.java
new file mode 100644
index 0000000..3af7c80
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/AllAnnotationsTests.java
@@ -0,0 +1,21 @@
+package org.eclipse.jst.jsf.metadata.tests.annotations;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllAnnotationsTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test for org.eclipse.jst.jsf.metadata.tests.annotations");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(AnnotationMapTestCases.class);
+		suite.addTestSuite(DuplicateAnnotationsTestCases.class);
+		suite.addTestSuite(CaseInsensitiveAnnotationsTestCases.class);
+		suite.addTestSuite(AnnotationHelperTestCases.class);
+		suite.addTestSuite(NegativeAnnotationFileTestCases.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/AnnotationHelperTestCases.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/AnnotationHelperTestCases.java
new file mode 100644
index 0000000..d27741f
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/AnnotationHelperTestCases.java
@@ -0,0 +1,178 @@
+package org.eclipse.jst.jsf.metadata.tests.annotations;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.provisional.CMAnnotationHelper;
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.provisional.CMAnnotationPropertyValue;
+
+/**
+ * Test all methods in CMAnnotationHelper
+ * Uses /testfiles/metadata/jsf_test.xml. 
+ * 
+ * @author Gerry Kessler - Oracle
+ */
+public class AnnotationHelperTestCases extends TestCase implements ICMAnnotationTestCases {	
+	
+	public void testGetCMAttributePropertiesAll(){
+		//positive
+		Assert.assertNotNull(CMAnnotationHelper.getCMAttributeProperties(PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST));
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributeProperties(PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST).size(), 1);
+		
+		//negative
+		Assert.assertTrue(CMAnnotationHelper.getCMAttributeProperties(PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, "bogus").isEmpty());
+		//case sensitive test - should not locate		
+		Assert.assertTrue(CMAnnotationHelper.getCMAttributeProperties(PUBLICID, TEST_ELEMENT_VALIDATOR.toUpperCase(), TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST).isEmpty());
+		Assert.assertTrue(CMAnnotationHelper.getCMAttributeProperties(PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID.toUpperCase(), TEST_ATTR_PROPERTY_NAME_CONTENTASSIST).isEmpty());
+		Assert.assertTrue(CMAnnotationHelper.getCMAttributeProperties(PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST.toUpperCase()).isEmpty());
+	}
+	
+	public void testGetCMAttributePropertiesForBundle(){
+		//positive
+		Assert.assertNotNull(CMAnnotationHelper.getCMAttributeProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST));
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributeProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST).size(), 1);		
+		
+		//negative		
+		Assert.assertTrue(CMAnnotationHelper.getCMAttributeProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, "bogus").isEmpty());
+		//case sensitive test - should not locate
+		Assert.assertTrue(CMAnnotationHelper.getCMAttributeProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR.toUpperCase(), TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST).isEmpty());
+		Assert.assertTrue(CMAnnotationHelper.getCMAttributeProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID.toUpperCase(), TEST_ATTR_PROPERTY_NAME_CONTENTASSIST).isEmpty());
+		Assert.assertTrue(CMAnnotationHelper.getCMAttributeProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST.toUpperCase()).isEmpty());
+		
+		
+	}
+	
+	public void testGetCMElementPropertiesAll(){
+		//positive
+		Assert.assertTrue(CMAnnotationHelper.getCMElementProperties(PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST).isEmpty());
+		Assert.assertEquals(CMAnnotationHelper.getCMElementProperties(PUBLICID, TEST_ELEMENT_NAME_NOATTRS, TEST_PROPERTY_NAME_A).size(), 1);
+		Assert.assertNotNull(CMAnnotationHelper.getCMElementProperties(PUBLICID, TEST_ELEMENT_NAME_NOATTRS, TEST_PROPERTY_NAME_A));
+		List propvals = CMAnnotationHelper.getCMElementProperties(PUBLICID, TEST_ELEMENT_NAME_NOATTRS, TEST_PROPERTY_NAME_A);
+		Assert.assertEquals(propvals.size(), 1);
+		Object obj = propvals.get(0);
+		Assert.assertEquals(obj instanceof CMAnnotationPropertyValue, true);
+		Assert.assertEquals(((CMAnnotationPropertyValue)obj).getPropertyValue(), TEST_PROPERTY_VALUE_a);
+		//negative	
+		//case sensitive test - should not locate
+		Assert.assertTrue(CMAnnotationHelper.getCMElementProperties(PUBLICID, TEST_ELEMENT_NAME_NOATTRS.toUpperCase(), TEST_PROPERTY_NAME_A).isEmpty());
+		Assert.assertTrue(CMAnnotationHelper.getCMElementProperties(PUBLICID, TEST_ELEMENT_NAME_NOATTRS, TEST_PROPERTY_NAME_A.toLowerCase()).isEmpty());
+		
+
+	}
+	
+	public void testGetCMElementPropertiesForBundle(){
+		//positive
+		Assert.assertTrue(CMAnnotationHelper.getCMElementProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST).isEmpty());
+		Assert.assertEquals(CMAnnotationHelper.getCMElementProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_NOATTRS, TEST_PROPERTY_NAME_A).size(), 1);
+		Assert.assertNotNull(CMAnnotationHelper.getCMElementProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_NOATTRS, TEST_PROPERTY_NAME_A));
+		List propvals = CMAnnotationHelper.getCMElementProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_NOATTRS, TEST_PROPERTY_NAME_A);
+		Assert.assertEquals(propvals.size(), 1);
+		Object obj = propvals.get(0);
+		Assert.assertEquals(obj instanceof CMAnnotationPropertyValue, true);
+		Assert.assertEquals(((CMAnnotationPropertyValue)obj).getPropertyValue(), TEST_PROPERTY_VALUE_a);		
+		//negative	
+		//case sensitive test - should not locate
+		Assert.assertTrue(CMAnnotationHelper.getCMElementProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_NOATTRS.toUpperCase(), TEST_PROPERTY_NAME_A).isEmpty());
+		Assert.assertTrue(CMAnnotationHelper.getCMElementProperties(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_NOATTRS, TEST_PROPERTY_NAME_A.toLowerCase()).isEmpty());
+
+	}
+	
+	public void testGetCMAttributePropertyValue(){
+//		positive
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributePropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST), TEST_ATTR_PROPERTY_VALUE_CONTENTASSIST);
+//		elements and attrs with props
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributePropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED,TEST_ATTR4_NAMEa, TEST_PROPERTY_NAMEa),TEST_PROPERTY_VALUEa);
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributePropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED,TEST_ATTR4_NAMEb, TEST_PROPERTY_NAMEb),TEST_PROPERTY_VALUEb);
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributePropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED,TEST_ATTR4_NAMEc, TEST_PROPERTY_NAMEc),TEST_PROPERTY_VALUEc);
+
+		//NLS
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributePropertyValue(BUNDLEID, PUBLICID, TEST_NLS,TEST_NLS,"NLS1"), "a day in the life" + getNLSSuffix());
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributePropertyValue(BUNDLEID, PUBLICID, TEST_NLS,TEST_NLS,"NLS2"), "another string" + getNLSSuffix());	
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributePropertyValue(BUNDLEID, PUBLICID, TEST_NLS,TEST_NLS,"NLS3"), "NLS3(key not found)");			
+		
+//		negative			
+		Assert.assertFalse(CMAnnotationHelper.getCMAttributePropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST).equals("bogus"));
+		Assert.assertNull(CMAnnotationHelper.getCMAttributePropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR, TEST_ATTR_VALIDATORID, "bogus"));
+		
+		//no properties or attrs
+		Assert.assertNull(CMAnnotationHelper.getCMAttributePropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_NOPROPSORATTRS, TEST_ATTR_VALIDATORID,TEST_PROPERTY_NAME_A));
+
+	}
+	
+	public void testGetCMAttributePropertyValues(){
+		//positive
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributePropertyValues(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, TEST_ATTR4_NAMEc, TEST_PROPERTY_MULTIVAL).size(), 3);
+		List list = new ArrayList(3);
+		list.add("1");
+		list.add("2");
+		list.add("3");
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributePropertyValues(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, TEST_ATTR4_NAMEc, TEST_PROPERTY_MULTIVAL), list);
+		//negative
+		Assert.assertTrue(CMAnnotationHelper.getCMAttributePropertyValues(BUNDLEID, PUBLICID, TEST_ELEMENT_VALIDATOR,TEST_ATTR_VALIDATORID, TEST_PROPERTY_NAME_A).isEmpty());
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributePropertyValues(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, TEST_ATTR4_NAMEc, TEST_PROPERTY_MULTIVAL).size(), 3);
+	
+	}
+	
+	public void testGetCMElementPropertyValue(){
+		//positive
+		Assert.assertEquals(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, TEST_PROPERTY_NAME_A), TEST_PROPERTY_VALUE_a);
+		//element props but no Attrs in data
+		Assert.assertNotNull(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_NOATTRS,TEST_PROPERTY_NAME_A));
+		Assert.assertEquals(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_NOATTRS,TEST_PROPERTY_NAME_A), TEST_PROPERTY_VALUE_a);
+		Assert.assertEquals(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_NOATTRS,TEST_PROPERTY_NAME_B), TEST_PROPERTY_VALUE_b);
+		//elements and attrs with props
+		Assert.assertNotNull(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED,TEST_PROPERTY_NAME_A));
+		Assert.assertEquals(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED,TEST_PROPERTY_NAME_A), TEST_PROPERTY_VALUE_a);
+		Assert.assertEquals(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED,TEST_PROPERTY_NAME_B), TEST_PROPERTY_VALUE_b);
+		//NLS
+		Assert.assertEquals(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_NLS,"NLS1"), "a day in the life" + getNLSSuffix());
+		Assert.assertEquals(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_NLS,"NLS2"), "another string" + getNLSSuffix());	
+		Assert.assertEquals(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_NLS,"NLS3"), "NLS3(key not found)");	
+		
+		//negative			
+		Assert.assertFalse(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, TEST_PROPERTY_NAME_A).equals("bogus"));
+		Assert.assertNull(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, "bogus"));
+		
+		//no properties or attrs
+		Assert.assertNull(CMAnnotationHelper.getCMElementPropertyValue(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_NOPROPSORATTRS,TEST_PROPERTY_NAME_A));
+
+	}
+	
+	public void testGetCMElementPropertyValues(){
+		//positive
+		Assert.assertEquals(((String)CMAnnotationHelper.getCMElementPropertyValues(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, TEST_PROPERTY_NAME_A).get(0)), TEST_PROPERTY_VALUE_a);
+		Assert.assertEquals(CMAnnotationHelper.getCMElementPropertyValues(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, TEST_PROPERTY_MULTIVAL).size(), 3);
+		List list = new ArrayList(3);
+		list.add("1");
+		list.add("2");
+		list.add("3");
+		Assert.assertEquals(CMAnnotationHelper.getCMElementPropertyValues(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, TEST_PROPERTY_MULTIVAL), list);		
+		
+		//negative			
+		Assert.assertFalse(((String)CMAnnotationHelper.getCMElementPropertyValues(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, TEST_PROPERTY_NAME_A).get(0)).equals("bogus"));
+		Assert.assertNull(CMAnnotationHelper.getCMElementPropertyValues(BUNDLEID, PUBLICID, TEST_ELEMENT_NAME_LOADED, "bogus"));
+		
+	}	
+	public void testHasAnnotationsAll(){
+		//positive		
+		Assert.assertEquals(CMAnnotationHelper.hasAnnotations(PUBLICID), true);
+		//negative		
+		Assert.assertFalse(CMAnnotationHelper.hasAnnotations("bogus"));
+	}
+	
+	public void testHasAnnotationsForBundle(){
+		//positive
+		Assert.assertEquals(CMAnnotationHelper.hasAnnotations(BUNDLEID, PUBLICID), true);
+		//negative	
+		Assert.assertFalse(CMAnnotationHelper.hasAnnotations(BUNDLEID, "bogus"));
+	}	
+	
+	//return "(en_US)" if that is the locale
+	private String getNLSSuffix() {
+		return Platform.getNL().equals("en_US") ? "(en_US)" : "";
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/AnnotationMapTestCases.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/AnnotationMapTestCases.java
new file mode 100644
index 0000000..695923e
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/AnnotationMapTestCases.java
@@ -0,0 +1,99 @@
+package org.eclipse.jst.jsf.metadata.tests.annotations;
+
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.CMAnnotationFileRegistry;
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.CMAnnotationMap;
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.provisional.CMAnnotationHelper;
+
+/**
+ * Test functions in the CMAnnotationMap.  
+ * Uses /testfiles/metadata/jsf_test.xml
+ * 
+ * @author Gerry Kessler - Oracle
+ */
+public class AnnotationMapTestCases extends TestCase implements ICMAnnotationTestCases{ 
+	private CMAnnotationFileRegistry reg;
+	private List maps;
+	
+	public void setUp(){
+		reg = CMAnnotationFileRegistry.getInstance();
+		Assert.assertTrue(reg != null);
+	}
+	
+	public void testAnnotationsMapsDefaultParser(){
+		//get first which is http://org.eclipse.jsf/test
+		boolean hasInfos = CMAnnotationHelper.hasAnnotations(PUBLICID);
+		Assert.assertTrue(hasInfos);
+		
+		maps = reg.getAnnotationMaps(PUBLICID);
+		Assert.assertNotNull(maps);
+		
+		CMAnnotationMap map = (CMAnnotationMap)maps.get(0);
+
+		execAsserts(map);
+	}
+	public void testAnnotationsMapsDifferentParser(){
+		//Test public api w/ non-default parser.   Really just delegates to default, but it is a different class.
+		//http://org.eclipse.jsf/test2
+		boolean hasInfos = CMAnnotationHelper.hasAnnotations(PUBLICID+"2");
+		Assert.assertTrue(hasInfos);
+		
+		maps = reg.getAnnotationMaps(PUBLICID+"2");
+		Assert.assertNotNull(maps);
+		
+		CMAnnotationMap map = (CMAnnotationMap)maps.get(0);
+		
+		execAsserts(map);
+	
+	}
+
+	private void execAsserts(CMAnnotationMap map){
+//		Test annotation map functions
+		// no props on element; only on attr		
+		Assert.assertNull(map.getCMElementProperty(TEST_ELEMENT_VALIDATOR,TEST_ELEMENT1_PROPERTY_NAME));
+		Assert.assertNotNull(map.getCMAttributeProperty(TEST_ELEMENT_VALIDATOR,TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST));
+		Assert.assertEquals(map.getCMAttributeProperty(TEST_ELEMENT_VALIDATOR,TEST_ATTR_VALIDATORID, TEST_ATTR_PROPERTY_NAME_CONTENTASSIST),TEST_ATTR_PROPERTY_VALUE_CONTENTASSIST);
+		Assert.assertNull(map.getCMAttributeProperty(TEST_ELEMENT_VALIDATOR,TEST_ATTR_VALIDATORID, TEST_PROPERTY_NAME_A));
+		
+		//no properties or attrs
+		Assert.assertNull(map.getCMElementProperty(TEST_ELEMENT_NAME_NOPROPSORATTRS,TEST_PROPERTY_NAME_A));
+		Assert.assertNull(map.getCMAttributeProperty(TEST_ELEMENT_NAME_NOPROPSORATTRS, TEST_ATTR_VALIDATORID,TEST_PROPERTY_NAME_A));
+		
+		//element props but no Attrs
+		Assert.assertNotNull(map.getCMElementProperty(TEST_ELEMENT_NAME_NOATTRS,TEST_PROPERTY_NAME_A));
+		Assert.assertEquals(map.getCMElementProperty(TEST_ELEMENT_NAME_NOATTRS,TEST_PROPERTY_NAME_A), TEST_PROPERTY_VALUE_a);
+		Assert.assertEquals(map.getCMElementProperty(TEST_ELEMENT_NAME_NOATTRS,TEST_PROPERTY_NAME_B), TEST_PROPERTY_VALUE_b);
+		
+		//elements and attrs with props
+		Assert.assertNotNull(map.getCMElementProperty(TEST_ELEMENT_NAME_LOADED,TEST_PROPERTY_NAME_A));
+		Assert.assertEquals(map.getCMElementProperty(TEST_ELEMENT_NAME_LOADED,TEST_PROPERTY_NAME_A), TEST_PROPERTY_VALUE_a);
+		Assert.assertEquals(map.getCMElementProperty(TEST_ELEMENT_NAME_LOADED,TEST_PROPERTY_NAME_B), TEST_PROPERTY_VALUE_b);
+		Assert.assertEquals(map.getCMAttributeProperty(TEST_ELEMENT_NAME_LOADED,TEST_ATTR4_NAMEa, TEST_PROPERTY_NAMEa),TEST_PROPERTY_VALUEa);
+		Assert.assertEquals(map.getCMAttributeProperty(TEST_ELEMENT_NAME_LOADED,TEST_ATTR4_NAMEb, TEST_PROPERTY_NAMEb),TEST_PROPERTY_VALUEb);
+		Assert.assertEquals(map.getCMAttributeProperty(TEST_ELEMENT_NAME_LOADED,TEST_ATTR4_NAMEc, TEST_PROPERTY_NAMEc),TEST_PROPERTY_VALUEc);
+
+//		multiple values test
+		Assert.assertEquals(map.getCMAttributePropertyValues(TEST_ELEMENT_NAME_LOADED,TEST_ATTR4_NAMEc, TEST_PROPERTY_MULTIVAL).size(), 3);
+		Assert.assertEquals(map.getCMElementPropertyValues(TEST_ELEMENT_NAME_LOADED, TEST_PROPERTY_MULTIVAL).size(), 3);
+		
+//NLS Test
+		Assert.assertEquals(map.getCMElementProperty(TEST_NLS,"NLS1"), "a day in the life" + getNLSSuffix() );
+		Assert.assertEquals(map.getCMElementProperty(TEST_NLS,"NLS2"), "another string" + getNLSSuffix());	
+		Assert.assertEquals(map.getCMElementProperty(TEST_NLS,"NLS3"), "NLS3(key not found)");	
+		
+		Assert.assertEquals(map.getCMAttributeProperty(TEST_NLS,TEST_NLS,"NLS1"), "a day in the life" + getNLSSuffix());
+		Assert.assertEquals(map.getCMAttributeProperty(TEST_NLS,TEST_NLS,"NLS2"), "another string" + getNLSSuffix());	
+		Assert.assertEquals(map.getCMAttributeProperty(TEST_NLS,TEST_NLS,"NLS3"), "NLS3(key not found)");			
+	}
+
+	//return "(en_US)" if that is the locale
+	private String getNLSSuffix() {
+		return Platform.getNL().equals("en_US") ? "(en_US)" : "";
+	}
+	
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/CaseInsensitiveAnnotationsTestCases.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/CaseInsensitiveAnnotationsTestCases.java
new file mode 100644
index 0000000..9d5a37b
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/CaseInsensitiveAnnotationsTestCases.java
@@ -0,0 +1,45 @@
+package org.eclipse.jst.jsf.metadata.tests.annotations;
+
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.provisional.CMAnnotationHelper;
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.provisional.CMAnnotationPropertyValue;
+/**
+ * Ensure case insensitive meta-data can be located correctly.
+ * Uses /testfiles/metadata/CaseInsensitive.xml
+ * 
+ * @author Gerry Kessler - Oracle
+ */
+public class CaseInsensitiveAnnotationsTestCases extends TestCase {
+	private String uri = "http://org.eclipse.jsf/caseInsensitiveTest";
+	private String cmElementName = "FoO";
+	private String cmAttributeName = "ValuE";
+	private String meta_prop_name = "TypE";
+	private String meta_prop_value = "String";
+
+	public void testCIElementAnnotations(){
+		Assert.assertEquals(CMAnnotationHelper.getCMElementProperties(uri, cmElementName, meta_prop_name).size(), 1);
+		List props = CMAnnotationHelper.getCMElementProperties(uri, cmElementName, meta_prop_name);
+		for (int i = 0;i<props.size();i++){
+			Assert.assertTrue(props.get(i) instanceof CMAnnotationPropertyValue);
+			CMAnnotationPropertyValue prop = (CMAnnotationPropertyValue) props.get(i);
+			Assert.assertTrue(prop.getPropertyValues().size() == 1);
+			Assert.assertEquals(prop.getPropertyValue(), meta_prop_value + String.valueOf(i+1));
+		}
+	}
+	
+	public void testCIDupeAttributeAnnotations(){
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributeProperties(uri, cmElementName, cmAttributeName, meta_prop_name).size(), 1);
+		List props = CMAnnotationHelper.getCMAttributeProperties(uri, cmElementName, cmAttributeName, meta_prop_name);
+		for (int i = 0;i<props.size();i++){
+			Assert.assertTrue(props.get(i) instanceof CMAnnotationPropertyValue);
+			CMAnnotationPropertyValue prop = (CMAnnotationPropertyValue) props.get(i);
+			Assert.assertTrue(prop.getPropertyValues().size() == 1);
+			Assert.assertEquals(prop.getPropertyValue(), meta_prop_value + String.valueOf(i+1));
+		}
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/DuplicateAnnotationsTestCases.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/DuplicateAnnotationsTestCases.java
new file mode 100644
index 0000000..fb26e81
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/DuplicateAnnotationsTestCases.java
@@ -0,0 +1,46 @@
+package org.eclipse.jst.jsf.metadata.tests.annotations;
+
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.provisional.CMAnnotationHelper;
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.provisional.CMAnnotationPropertyValue;
+
+/**
+ * Make sure that multiple annotations are being dealt with correctly.
+ * Uses /testfiles/metadata/FileA.xml, FileB.xml
+ * 
+ * @author Gerry Kessler - Oracle
+ */
+public class DuplicateAnnotationsTestCases extends TestCase {
+	private String uri = "http://org.eclipse.jsf/dupeTest";
+	private String cmElementName = "Foo";
+	private String cmAttributeName = "Value";
+	private String meta_prop_name = "Type";
+	private String meta_prop_value = "String";
+
+	public void testDupeElementAnnotations(){
+		Assert.assertEquals(CMAnnotationHelper.getCMElementProperties(uri, cmElementName, meta_prop_name).size(), 2);
+		List props = CMAnnotationHelper.getCMElementProperties(uri, cmElementName, meta_prop_name);
+		for (int i = 0;i<props.size();i++){
+			Assert.assertTrue(props.get(i) instanceof CMAnnotationPropertyValue);
+			CMAnnotationPropertyValue prop = (CMAnnotationPropertyValue) props.get(i);
+			Assert.assertTrue(prop.getPropertyValues().size() == 1);
+			Assert.assertEquals(prop.getPropertyValue(), meta_prop_value + String.valueOf(i+1));
+		}
+	}
+	
+	public void testDupeAttributeAnnotations(){
+		Assert.assertEquals(CMAnnotationHelper.getCMAttributeProperties(uri, cmElementName, cmAttributeName, meta_prop_name).size(), 2);
+		List props = CMAnnotationHelper.getCMAttributeProperties(uri, cmElementName, cmAttributeName, meta_prop_name);
+		for (int i = 0;i<props.size();i++){
+			Assert.assertTrue(props.get(i) instanceof CMAnnotationPropertyValue);
+			CMAnnotationPropertyValue prop = (CMAnnotationPropertyValue) props.get(i);
+			Assert.assertTrue(prop.getPropertyValues().size() == 1);
+			Assert.assertEquals(prop.getPropertyValue(), meta_prop_value + String.valueOf(i+1));
+		}
+	}
+	
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/ICMAnnotationTestCases.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/ICMAnnotationTestCases.java
new file mode 100644
index 0000000..9c5752a
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/ICMAnnotationTestCases.java
@@ -0,0 +1,37 @@
+package org.eclipse.jst.jsf.metadata.tests.annotations;
+/**
+ * @author Gerry Kessler - Oracle
+ */
+public interface ICMAnnotationTestCases {;
+	public final String BUNDLEID		= "org.eclipse.jst.jsf.metadata.tests";
+	public final String PUBLICID 		= "http://org.eclipse.jsf/test";
+	public final String LOC 			= "jsf_test.xml";
+	public final String JSF_CORE_URI 	= "http://java.sun.com/jsf/core";
+	
+	public final String TEST_ELEMENT_VALIDATOR = "validator";
+	public final String TEST_ATTR_VALIDATORID = "validatorId";
+	
+	public final String TEST_ELEMENT1_PROPERTY_NAME = "foobar";
+	public final String TEST_ATTR_PROPERTY_NAME_CONTENTASSIST = "attr-val-content-assistant";//change me!  must move this test case to jsf.ui
+	public final String TEST_ATTR_PROPERTY_VALUE_CONTENTASSIST = "com.eclipse.wtp.jsf.ui.internal.ValidatorAttrValueContentAssistant";
+	public final String TEST_ELEMENT_NAME_NOPROPSORATTRS = "nopropsOrAttrs";
+	public final String TEST_ELEMENT_NAME_NOATTRS = "noAttrs";
+	public final String TEST_PROPERTY_NAME_A = "A";
+	public final String TEST_PROPERTY_VALUE_a = "a";	
+	public final String TEST_PROPERTY_NAME_B = "B";
+	public final String TEST_PROPERTY_VALUE_b = "b";
+	public final String TEST_ELEMENT_NAME_LOADED = "loaded";
+	public final String TEST_ATTR4_NAMEa = "att1";
+	public final String TEST_PROPERTY_NAMEa = "B1";
+	public final String TEST_PROPERTY_VALUEa = "b1";
+	public final String TEST_ATTR4_NAMEb = "att2";
+	public final String TEST_PROPERTY_NAMEb = "B2";
+	public final String TEST_PROPERTY_VALUEb = "b2";
+	public final String TEST_ATTR4_NAMEc = "att3";
+	public final String TEST_PROPERTY_NAMEc = "B3";
+	public final String TEST_PROPERTY_VALUEc = "b3";
+	public final String TEST_PROPERTY_MULTIVAL = "multival";
+	public final String TEST_NLS="NLS";
+	
+//	public final String TEST_ATTR2_NAME = "validatorId";
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/NegativeAnnotationFileTestCases.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/NegativeAnnotationFileTestCases.java
new file mode 100644
index 0000000..d79f067
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/annotations/NegativeAnnotationFileTestCases.java
@@ -0,0 +1,33 @@
+package org.eclipse.jst.jsf.metadata.tests.annotations;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.provisional.CMAnnotationHelper;
+
+/**
+ * Intended to test system level setup problems
+ * 
+ * @author Gerry Kessler - Oracle
+ */
+public class NegativeAnnotationFileTestCases extends TestCase {
+	private String missing_uri = "http://org.eclipse.jsf/missing";
+	private String missing_file_uri = "http://org.eclipse.jsf/missingFile";
+	private String good_uri = "http://org.eclipse.jsf/test";
+	
+	private String bad_bundle ="foo";
+	private String cmElementName = "FoO";
+	private String meta_prop_name = "TypE";
+
+	public void testMissingAnnotationFile(){
+		//missing uri
+		Assert.assertNull(CMAnnotationHelper.getCMElementProperties(missing_uri, cmElementName, meta_prop_name));
+		//missing annotation file for uri - error should be logged
+		Assert.assertTrue(CMAnnotationHelper.getCMElementProperties(missing_file_uri, cmElementName, meta_prop_name).isEmpty());
+	
+	}
+	
+	public void testBadPassedBundle(){
+		Assert.assertTrue( CMAnnotationHelper.getCMElementProperties(bad_bundle, good_uri, cmElementName, meta_prop_name).isEmpty());
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AllMetaDataProcessingTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AllMetaDataProcessingTests.java
new file mode 100644
index 0000000..0f18f42
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AllMetaDataProcessingTests.java
@@ -0,0 +1,20 @@
+package org.eclipse.jst.jsf.metadata.tests.metadataprocessing;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllMetaDataProcessingTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test suite for org.eclipse.jst.jsf.metadata.tests.metadataprocessing");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(AttributeValueRuntimeTypesRegistryTests.class);
+		suite.addTestSuite(AttributeValueRuntimeTypeFactoryTests.class);
+		suite.addTestSuite(MetaDataProcessorsFactoryTests.class);
+		suite.addTestSuite(AttributeValueRuntimeTypeExtensionsTests.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AttributeValueRuntimeTypeExtensionsTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AttributeValueRuntimeTypeExtensionsTests.java
new file mode 100644
index 0000000..50ce78e
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AttributeValueRuntimeTypeExtensionsTests.java
@@ -0,0 +1,58 @@
+package org.eclipse.jst.jsf.metadata.tests.metadataprocessing;
+
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.Test;
+import junit.framework.TestCase;
+
+import org.eclipse.jst.jsf.metadata.tests.metadataprocessing.features.IBarker;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.MetaDataEnabledProcessingFactory;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IPossibleValues;
+
+public class AttributeValueRuntimeTypeExtensionsTests extends TestCase {
+	private String uri1 = "http://org.eclipse.jsf/metadataprocessing";
+	
+	public void testBarkerExt(){
+		List barkProcessors = MetaDataEnabledProcessingFactory.getInstance().
+		getAttributeValueRuntimeTypeFeatureProcessors(IBarker.class, null, uri1, 
+				"MyTag", "MyLongAttr");  //invalid 
+		
+		Assert.assertNotNull(barkProcessors);
+		Assert.assertTrue(barkProcessors.isEmpty());
+		
+		
+	}
+	public void testGetPossibleValsWithExtensions(){
+		List processors	= MetaDataEnabledProcessingFactory.getInstance().
+			getAttributeValueRuntimeTypeFeatureProcessors(IPossibleValues.class, null, uri1, 
+				"MyTag", "BooleanAttr");   
+		
+		Assert.assertNotNull(processors);
+		Assert.assertTrue(!processors.isEmpty());
+		Assert.assertTrue(processors.size() == 2); //there should be a Boolean and BarkProcessor capable of handling IPossibleValues
+//		Iterator it = processors.iterator();
+//		while (it.hasNext()){
+//			dumpPossibleValues((IPossibleValues)it.next());
+//		}
+
+	}
+	
+	public void testNonFeatureExt(){
+		List testProcessors = MetaDataEnabledProcessingFactory.getInstance().
+		getAttributeValueRuntimeTypeFeatureProcessors(Test.class//invalid
+				,null, uri1, "MyTag", "BooleanAttr");  
+		
+		Assert.assertNotNull(testProcessors);
+		Assert.assertTrue(testProcessors.isEmpty());
+		
+		
+	}
+	private void dumpPossibleValues(IPossibleValues p){
+		Iterator it = p.getPossibleValues().iterator();
+		while (it.hasNext()){
+			System.out.println((String)it.next());
+		}
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AttributeValueRuntimeTypeFactoryTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AttributeValueRuntimeTypeFactoryTests.java
new file mode 100644
index 0000000..edd2e5e
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AttributeValueRuntimeTypeFactoryTests.java
@@ -0,0 +1,50 @@
+package org.eclipse.jst.jsf.metadata.tests.metadataprocessing;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.jst.jsf.metadata.tests.Activator;
+import org.eclipse.jst.jsf.metadataprocessors.internal.AttributeValueRuntimeTypeFactory;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.ITypeDescriptor;
+
+public class AttributeValueRuntimeTypeFactoryTests extends TestCase {
+
+	/*
+	 * Test method for 'org.eclipse.jst.jsf.metadataprocessors.internal.AttributeValueRuntimeTypeFactory.getTypes(String)'
+	 * Also tests the simple AbstractMetaDataEnabledType class
+	 */
+	public void testGetTypes() {
+		AttributeValueRuntimeTypeFactory factory = AttributeValueRuntimeTypeFactory.getInstance();
+		Assert.assertNotNull(factory);
+		
+		ITypeDescriptor atype = factory.getType(AttributeValueRuntimeTypesRegistryTests.BOOLEANTYPE_ID);
+		Assert.assertNotNull(atype);
+		Assert.assertNotNull(atype.getRuntimeType().getClassName());
+		Assert.assertTrue(atype.getRuntimeType().getBundleID().equals(Activator.ID_BUNDLE));		
+		Assert.assertTrue(atype.getRuntimeType().getTypeID().equals(AttributeValueRuntimeTypesRegistryTests.BOOLEANTYPE_ID));
+//		List features =  atype.getFeatureAdapters(IPossibleValues.class);
+//		Assert.assertNotNull(features);
+//		Assert.assertFalse(features.isEmpty());
+//		Assert.assertTrue(features.size() == 1);    
+		
+		atype = factory.getType(AttributeValueRuntimeTypesRegistryTests.STRINGARRAYTYPE_ID);
+		Assert.assertNotNull(atype);
+		Assert.assertNotNull(atype.getRuntimeType().getClassName());
+		Assert.assertTrue(atype.getRuntimeType().getBundleID().equals(Activator.ID_BUNDLE));		
+		Assert.assertTrue(atype.getRuntimeType().getTypeID().equals(AttributeValueRuntimeTypesRegistryTests.STRINGARRAYTYPE_ID));
+
+	}
+	
+	public void testNoImplTest(){
+		AttributeValueRuntimeTypeFactory factory = AttributeValueRuntimeTypeFactory.getInstance();
+		Assert.assertNotNull(factory);
+		
+		ITypeDescriptor atype = factory.getType(AttributeValueRuntimeTypesRegistryTests.NOIMPLTYPE_ID);
+		Assert.assertNotNull(atype);
+		Assert.assertNotNull(atype.getRuntimeType().getClassName());
+		Assert.assertTrue(atype.getRuntimeType().getBundleID().equals(Activator.ID_BUNDLE));	
+		
+	}
+
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AttributeValueRuntimeTypesRegistryTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AttributeValueRuntimeTypesRegistryTests.java
new file mode 100644
index 0000000..a49591c
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/AttributeValueRuntimeTypesRegistryTests.java
@@ -0,0 +1,41 @@
+package org.eclipse.jst.jsf.metadata.tests.metadataprocessing;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.jst.jsf.metadata.tests.Activator;
+import org.eclipse.jst.jsf.metadataprocessors.internal.AbstractMetaDataEnabledType;
+import org.eclipse.jst.jsf.metadataprocessors.internal.AttributeValueRuntimeTypeRegistry;
+
+public class AttributeValueRuntimeTypesRegistryTests extends TestCase {
+	public final static String BOOLEANTYPE_ID = Activator.ID_BUNDLE + ".MyBooleanType";
+	public final static String STRINGARRAYTYPE_ID = Activator.ID_BUNDLE + ".MyStringArrayType";
+	public final static String NOIMPLTYPE_ID = Activator.ID_BUNDLE + ".NoImplType";
+	
+	/*
+	 * Test method for 'org.eclipse.jst.jsf.metadataprocessors.internal.AbstractMetaDataEnabledTypeRegistry.getTypes(String)'
+	 */
+	public void testGetTypes() {
+		AttributeValueRuntimeTypeRegistry reg = AttributeValueRuntimeTypeRegistry.getInstance();
+		
+		Assert.assertNotNull(reg.getType(BOOLEANTYPE_ID));
+		Object obj = reg.getType(BOOLEANTYPE_ID);
+		Assert.assertTrue( obj instanceof AbstractMetaDataEnabledType);
+		AbstractMetaDataEnabledType type = (AbstractMetaDataEnabledType)obj;
+		
+		Assert.assertTrue(type.getBundleID().equals(Activator.ID_BUNDLE));
+		Assert.assertTrue(type.getTypeID().equals(BOOLEANTYPE_ID));
+		Assert.assertTrue(type.getClassName().equals("org.eclipse.jst.jsf.metadata.tests.metadataprocessing.types.MyBooleanType"));
+				
+		Assert.assertNotNull(reg.getType(STRINGARRAYTYPE_ID));
+		obj = reg.getType(STRINGARRAYTYPE_ID);
+		Assert.assertTrue( obj instanceof AbstractMetaDataEnabledType);
+		type = (AbstractMetaDataEnabledType)obj;
+		
+		Assert.assertTrue(type.getBundleID().equals(Activator.ID_BUNDLE));
+		Assert.assertTrue(type.getTypeID().equals(STRINGARRAYTYPE_ID));
+		Assert.assertTrue(type.getClassName().equals("org.eclipse.jst.jsf.taglibprocessing.internal.provisional.attributevalues.StringType"));
+		
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/MetaDataEnabledBarkAdapter.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/MetaDataEnabledBarkAdapter.java
new file mode 100644
index 0000000..a300317
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/MetaDataEnabledBarkAdapter.java
@@ -0,0 +1,42 @@
+package org.eclipse.jst.jsf.metadata.tests.metadataprocessing;
+
+import java.util.List;
+
+import org.eclipse.jst.jsf.metadata.tests.Activator;
+import org.eclipse.jst.jsf.metadata.tests.metadataprocessing.features.IBarker;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.AbstractMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IPossibleValues;
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.provisional.CMAnnotationHelper;
+
+/**
+ * Test class implementing existing and new fetaure type for
+ * testing the MetaDataEnabledFeature Extension
+ * 
+ * @author Gerry Kessler - Oracle
+ *
+ */
+public class MetaDataEnabledBarkAdapter extends AbstractMetaDataEnabledFeature
+	implements
+		IBarker, IPossibleValues{
+
+	public MetaDataEnabledBarkAdapter() {
+		super();
+	}
+
+	public boolean canBark() {
+		return true;
+	}
+
+	public List getBarks() {
+		//notice that we want to use the bundle id of the extender
+		return CMAnnotationHelper.getCMAttributePropertyValues(Activator.ID_BUNDLE, getCMAnnotationContext().getUri(),
+					getCMAnnotationContext().getElementName(), getCMAnnotationContext().getAttributeName(), 
+					"barks");
+	}
+
+	public List getPossibleValues() {
+		return getBarks();
+	}
+
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/MetaDataProcessorsFactoryTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/MetaDataProcessorsFactoryTests.java
new file mode 100644
index 0000000..7c5f6a7
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/MetaDataProcessorsFactoryTests.java
@@ -0,0 +1,123 @@
+package org.eclipse.jst.jsf.metadata.tests.metadataprocessing;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.metadata.tests.metadataprocessing.features.IBarker;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.MetaDataEnabledProcessingFactory;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IPossibleValue;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IPossibleValues;
+
+public class MetaDataProcessorsFactoryTests extends TestCase {
+	private String uri1 = "http://org.eclipse.jsf/metadataprocessing";
+	/*
+	 * Test method for 'org.eclipse.jst.jsf.metadataprocessors.internal.provisional.MetaDataEnabledProcessorsFactory.getAttributeValueRuntimeTypeProcessors(Class, String, String, String)'
+	 */
+	public void testGetAttributeValueRuntimeTypeProcessors() {
+		IStructuredDocumentContext docContext = null;
+		
+		List possibleValueProcessors = MetaDataEnabledProcessingFactory.getInstance().
+			getAttributeValueRuntimeTypeFeatureProcessors(IPossibleValues.class, docContext, uri1, 
+					"MyTag", "MyBooleanAttr");
+		Assert.assertNotNull(possibleValueProcessors);
+		Assert.assertFalse(possibleValueProcessors.isEmpty());
+		Assert.assertTrue(possibleValueProcessors.size() == 2);
+
+		IPossibleValues processor = (IPossibleValues)possibleValueProcessors.get(0);	
+		Assert.assertNotNull(processor.getPossibleValues());
+//		dumpPossibleValues(processor);		
+		
+		possibleValueProcessors = MetaDataEnabledProcessingFactory.getInstance().
+			getAttributeValueRuntimeTypeFeatureProcessors(IPossibleValues.class, docContext, uri1, 
+				"MyTag", "MyValidValsAttr");
+		
+		Assert.assertNotNull(possibleValueProcessors);
+		Assert.assertFalse(possibleValueProcessors.isEmpty());
+		processor = (IPossibleValues)possibleValueProcessors.get(0);		
+		dumpPossibleValues(processor);
+		
+		//negative tests
+		//not a valid attribute annotation
+		possibleValueProcessors = MetaDataEnabledProcessingFactory.getInstance().
+		getAttributeValueRuntimeTypeFeatureProcessors(IPossibleValues.class, docContext, uri1, 
+				"MyTag", "bogus");  //invalid 
+		
+		Assert.assertTrue(possibleValueProcessors.isEmpty());
+		
+		//missing runtime-type annotation
+		possibleValueProcessors = MetaDataEnabledProcessingFactory.getInstance().
+		getAttributeValueRuntimeTypeFeatureProcessors(IPossibleValues.class, docContext, uri1, 
+				"MyTag", "MyNonMetaDataEnabledAttr");  //invalid 
+		
+		Assert.assertTrue(possibleValueProcessors.isEmpty());
+		
+		//missing processor type
+		possibleValueProcessors = MetaDataEnabledProcessingFactory.getInstance().
+		getAttributeValueRuntimeTypeFeatureProcessors(IPossibleValues.class, docContext, uri1, 
+				"MyTag", "MyMissingType");  //value in attr-val-runtime-type is invalid
+		
+		Assert.assertNotNull(possibleValueProcessors);
+		Assert.assertTrue(possibleValueProcessors.isEmpty());
+		
+		//invalid processor - type exists but does not support specified type
+		possibleValueProcessors = MetaDataEnabledProcessingFactory.getInstance().
+		getAttributeValueRuntimeTypeFeatureProcessors(IPossibleValues.class, docContext, uri1, 
+				"MyTag", "MyLongAttr");  //invalid 
+
+		Assert.assertNotNull(possibleValueProcessors);
+		Assert.assertTrue(possibleValueProcessors.isEmpty());
+		
+		//get extended feature - Bark Processors	
+		List barkProcessors	= MetaDataEnabledProcessingFactory.getInstance().
+		getAttributeValueRuntimeTypeFeatureProcessors(IBarker.class, docContext, uri1, 
+				"MyTag", "BooleanAttr");  //invalid 
+		
+		Assert.assertNotNull(barkProcessors);
+		Assert.assertTrue(!barkProcessors.isEmpty());
+		Assert.assertTrue(barkProcessors.size() == 1);
+		
+		IBarker barker = (IBarker)barkProcessors.get(0);
+		Iterator it = barker.getBarks().iterator();
+		while (it.hasNext()){
+			System.out.println((String)it.next());
+		}
+		
+	}
+	
+	public void testDualTypeTest(){
+		System.out.println("---------------- DualTypeTest ------------------");
+		//second plugin (metadataprocessingtests2 marks the same attr with another type
+		List possibleValueProcessors = MetaDataEnabledProcessingFactory.getInstance().
+			getAttributeValueRuntimeTypeFeatureProcessors(IPossibleValues.class, null, uri1, 
+				"MyTag", "MyDualTypeAttr");
+		Assert.assertNotNull(possibleValueProcessors);
+		Assert.assertEquals(2,possibleValueProcessors.size());
+		
+		List vals = new ArrayList();
+		Iterator it = possibleValueProcessors.iterator();
+		while (it.hasNext()){
+			IPossibleValues p = (IPossibleValues)it.next();
+			vals.addAll(p.getPossibleValues());
+			dumpPossibleValues(p);
+		}
+		Assert.assertTrue(vals.size() == 8);
+		System.out.println("---------------- END DualTypeTest ------------------");
+	}
+	
+	private void dumpPossibleValues(IPossibleValues p){
+		Iterator it = p.getPossibleValues().iterator();
+		while (it.hasNext()){
+			Object obj = it.next();
+			if (obj instanceof String)
+				System.out.println((String)obj);
+			else if (obj instanceof IPossibleValue)
+				System.out.println(((IPossibleValue)obj).getDisplayValue());
+		}
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/features/IBarker.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/features/IBarker.java
new file mode 100644
index 0000000..f39a512
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/features/IBarker.java
@@ -0,0 +1,11 @@
+package org.eclipse.jst.jsf.metadata.tests.metadataprocessing.features;
+
+import java.util.List;
+
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.IMetaDataEnabledFeature;
+
+public interface IBarker extends IMetaDataEnabledFeature {
+
+	public boolean canBark();
+	public List getBarks();
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/types/MyBooleanType.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/types/MyBooleanType.java
new file mode 100644
index 0000000..414b9c4
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/types/MyBooleanType.java
@@ -0,0 +1,7 @@
+package org.eclipse.jst.jsf.metadata.tests.metadataprocessing.types;
+
+import org.eclipse.jst.jsf.taglibprocessing.internal.provisional.attributevalues.BooleanType;
+
+public class MyBooleanType extends BooleanType {
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/types/MyLongType.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/types/MyLongType.java
new file mode 100644
index 0000000..382a048
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/metadataprocessing/types/MyLongType.java
@@ -0,0 +1,7 @@
+package org.eclipse.jst.jsf.metadata.tests.metadataprocessing.types;
+
+import org.eclipse.jst.jsf.taglibprocessing.internal.provisional.attributevalues.LongType;
+
+public class MyLongType extends LongType {
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/AllTests.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/AllTests.java
new file mode 100644
index 0000000..05f9850
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/AllTests.java
@@ -0,0 +1,22 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test for org.eclipse.jst.jsf.metadata.tests.taglibprocessing");
+		//$JUnit-BEGIN$
+		suite.addTestSuite(StringTypeTest.class);
+		suite.addTestSuite(BooleanTypeTest.class);
+		suite.addTestSuite(IntegerTypeTest.class);
+		suite.addTestSuite(LongTypeTest.class);
+		suite.addTestSuite(DoubleTypeTest.class);
+		suite.addTestSuite(JavaClassTypeTest.class);
+		//$JUnit-END$
+		return suite;
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/BooleanTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/BooleanTypeTest.java
new file mode 100644
index 0000000..2fdfc9f
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/BooleanTypeTest.java
@@ -0,0 +1,50 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IDefaultValue;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IValidValues;
+
+
+public class BooleanTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues(){		
+		Assert.assertNotNull(possibleValueAdapters);
+		Assert.assertFalse(possibleValueAdapters.isEmpty());
+		IPossibleValues pv =(IPossibleValues)getProcessorForTaglibProcessingBundle(possibleValueAdapters);
+		Assert.assertTrue(pv.getPossibleValues().size() == 2);
+		
+		//as the tests have added a second impl of IPossibleVals check
+		pv =(IPossibleValues)getBarkProcessingBundle(possibleValueAdapters);
+		Assert.assertNotNull(pv);
+		//however since "barks" metadata is not defined by the annotation file in that bundle, there are no return vals
+		Assert.assertTrue(pv.getPossibleValues().isEmpty());
+
+	}
+	
+	public void testValidValues(){		
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		IValidValues vv =(IValidValues)getProcessorForTaglibProcessingBundle(validValuesAdapters);
+		Assert.assertTrue(vv.isValidValue("true"));
+		Assert.assertTrue(vv.getValidationMessages().size()==0);
+		Assert.assertTrue(vv.isValidValue("false"));
+		Assert.assertFalse(vv.isValidValue("False"));
+		Assert.assertFalse(vv.getValidationMessages().size()==0);
+		Assert.assertFalse(vv.isValidValue("blue"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+	}
+	
+	public void testDefaultValues(){		
+		Assert.assertNotNull(defaultValueAdapters);
+		Assert.assertFalse(defaultValueAdapters.isEmpty());
+		Assert.assertTrue(((IDefaultValue)getProcessorForTaglibProcessingBundle(defaultValueAdapters)).getDefaultValue().equals("true"));
+	}
+	
+	public void testCreateValues(){		
+		Assert.assertNotNull(createValuesAdapters);
+		Assert.assertTrue(createValuesAdapters.isEmpty());
+	}
+	
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/DoubleTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/DoubleTypeTest.java
new file mode 100644
index 0000000..f2b4ff3
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/DoubleTypeTest.java
@@ -0,0 +1,52 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IDefaultValue;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IValidValues;
+
+public class DoubleTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues(){		
+		Assert.assertNotNull(possibleValueAdapters);
+		Assert.assertTrue(possibleValueAdapters.isEmpty());
+	}
+	
+	public void testValidValues(){		
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		
+		IValidValues vv =(IValidValues)getProcessorForTaglibProcessingBundle(validValuesAdapters);
+		Assert.assertFalse(vv.isValidValue("0"));
+		Assert.assertFalse(vv.getValidationMessages().size()==0);
+		Assert.assertTrue(vv.isValidValue("188.23"));
+		Assert.assertFalse(vv.isValidValue("0.0"));
+		Assert.assertFalse(vv.isValidValue("False"));
+		Assert.assertFalse(vv.getValidationMessages().size()==0);
+		Assert.assertFalse(vv.isValidValue("-1001"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+		Assert.assertFalse(vv.isValidValue("-1"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+		Assert.assertFalse(vv.isValidValue("555555555555555555"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+		Assert.assertFalse(vv.isValidValue("555f9"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+		Assert.assertFalse(vv.isValidValue("2e1"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+	}
+	
+	public void testDefaultValues(){		
+		Assert.assertNotNull(defaultValueAdapters);
+		Assert.assertFalse(defaultValueAdapters.isEmpty());
+		
+		IDefaultValue dv =(IDefaultValue)getProcessorForTaglibProcessingBundle(defaultValueAdapters);
+		Assert.assertTrue(dv.getDefaultValue() == null);
+//		Assert.assertTrue(dv.getDefaultValue().equals("10"));
+	}
+	
+	public void testCreateValues(){		
+		Assert.assertNotNull(createValuesAdapters);
+		Assert.assertTrue(createValuesAdapters.isEmpty());
+	}
+	
+	
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/IntegerTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/IntegerTypeTest.java
new file mode 100644
index 0000000..ad1e464
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/IntegerTypeTest.java
@@ -0,0 +1,48 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IDefaultValue;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IValidValues;
+
+public class IntegerTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues(){		
+		Assert.assertNotNull(possibleValueAdapters);
+		Assert.assertTrue(possibleValueAdapters.isEmpty());
+	}
+	
+	public void testValidValues(){		
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		
+		IValidValues vv =(IValidValues)getProcessorForTaglibProcessingBundle(validValuesAdapters);
+		Assert.assertTrue(vv.isValidValue("0"));
+		Assert.assertTrue(vv.getValidationMessages().size()==0);
+		Assert.assertTrue(vv.isValidValue("255"));
+		Assert.assertFalse(vv.isValidValue("False"));
+		Assert.assertFalse(vv.getValidationMessages().size()==0);
+		Assert.assertFalse(vv.isValidValue("-1"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+		Assert.assertFalse(vv.isValidValue("555555555555555555"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+		Assert.assertFalse(vv.isValidValue("555f9"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+		Assert.assertFalse(vv.isValidValue("2e1"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+	}
+	
+	public void testDefaultValues(){		
+		Assert.assertNotNull(defaultValueAdapters);
+		Assert.assertFalse(defaultValueAdapters.isEmpty());
+		
+		IDefaultValue dv =(IDefaultValue)getProcessorForTaglibProcessingBundle(defaultValueAdapters);
+		Assert.assertTrue(dv.getDefaultValue() != null);
+		Assert.assertTrue(dv.getDefaultValue().equals("10"));
+	}
+	
+	public void testCreateValues(){		
+		Assert.assertNotNull(createValuesAdapters);
+		Assert.assertTrue(createValuesAdapters.isEmpty());
+	}
+	
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/JSFCoreTestCase.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/JSFCoreTestCase.java
new file mode 100644
index 0000000..65e00e4
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/JSFCoreTestCase.java
@@ -0,0 +1,7 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+public abstract class JSFCoreTestCase extends TaglibProcessingTestCase{
+	public void setUp(){
+		uri = "http://java.sun.com/jsf/core";
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/JSFHTMLTestCase.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/JSFHTMLTestCase.java
new file mode 100644
index 0000000..f84654d
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/JSFHTMLTestCase.java
@@ -0,0 +1,7 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+public abstract class JSFHTMLTestCase extends TaglibProcessingTestCase{
+	public void setUp(){
+		uri = "http://java.sun.com/jsf/html";
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/JavaClassTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/JavaClassTypeTest.java
new file mode 100644
index 0000000..2e6a1db
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/JavaClassTypeTest.java
@@ -0,0 +1,18 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IPossibleValues;
+
+public class JavaClassTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues(){
+		Assert.assertNotNull(possibleValueAdapters);
+		Assert.assertFalse(possibleValueAdapters.isEmpty());
+		IPossibleValues pv = (IPossibleValues)possibleValueAdapters.get(0);
+		pv.setStructuredDocumentContext(docContext);
+		List vals = pv.getPossibleValues();
+//		Assert.assertFalse(vals.isEmpty());
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LongTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LongTypeTest.java
new file mode 100644
index 0000000..2b7cf91
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/LongTypeTest.java
@@ -0,0 +1,53 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IDefaultValue;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IValidValues;
+
+public class LongTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues(){		
+		Assert.assertNotNull(possibleValueAdapters);
+		Assert.assertTrue(possibleValueAdapters.isEmpty());
+	}
+	
+	public void testValidValues(){		
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		
+		IValidValues vv =(IValidValues)getProcessorForTaglibProcessingBundle(validValuesAdapters);
+		Assert.assertTrue(vv.isValidValue("0"));
+		Assert.assertTrue(vv.getValidationMessages().size()==0);
+		Assert.assertTrue(vv.isValidValue("1000"));
+		Assert.assertTrue(vv.isValidValue("-1000"));
+		Assert.assertFalse(vv.isValidValue("-10L"));
+		Assert.assertFalse(vv.isValidValue("False"));
+		Assert.assertFalse(vv.getValidationMessages().size()==0);
+		Assert.assertFalse(vv.isValidValue("-1001"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+		Assert.assertTrue(vv.isValidValue("-1"));
+		Assert.assertTrue(vv.getValidationMessages().size()==0);
+		Assert.assertFalse(vv.isValidValue("555555555555555555"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+		Assert.assertFalse(vv.isValidValue("555f9"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+		Assert.assertFalse(vv.isValidValue("2e1"));
+		Assert.assertTrue(vv.getValidationMessages().size()==1);
+	}
+	
+	public void testDefaultValues(){		
+		Assert.assertNotNull(defaultValueAdapters);
+		Assert.assertFalse(defaultValueAdapters.isEmpty());
+		
+		IDefaultValue dv =(IDefaultValue)getProcessorForTaglibProcessingBundle(defaultValueAdapters);
+		Assert.assertTrue(dv.getDefaultValue() == null);
+//		Assert.assertTrue(dv.getDefaultValue().equals("10"));
+	}
+	
+	public void testCreateValues(){		
+		Assert.assertNotNull(createValuesAdapters);
+		Assert.assertTrue(createValuesAdapters.isEmpty());
+	}
+	
+	
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/StringTypeTest.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/StringTypeTest.java
new file mode 100644
index 0000000..80cca7a
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/StringTypeTest.java
@@ -0,0 +1,55 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import junit.framework.Assert;
+
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IDefaultValue;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IPossibleValue;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IValidValues;
+
+
+public class StringTypeTest extends TaglibProcessingTestCase {
+	public void testPossibleValues(){		
+		Assert.assertNotNull(possibleValueAdapters);
+		Assert.assertFalse(possibleValueAdapters.isEmpty());
+		
+		IPossibleValues pv =(IPossibleValues)getProcessorForTaglibProcessingBundle(possibleValueAdapters);
+		Assert.assertTrue(pv.getPossibleValues().size() == 4);
+		
+		IPossibleValue val = (IPossibleValue)pv.getPossibleValues().get(0);
+		Assert.assertFalse(val.getDisplayValue().equals(val.getValue()));
+		Assert.assertTrue(val.getIcon().equals("/icons/foo.gif"));
+		Assert.assertTrue(val.isDefaultValue());
+		
+		val = (IPossibleValue)pv.getPossibleValues().get(1);
+		Assert.assertFalse(val.getDisplayValue().equals(val.getValue()));
+		Assert.assertTrue(val.getIcon().equals("/icons/foo.gif"));
+		Assert.assertFalse(val.isDefaultValue());
+	}
+	
+	public void testValidValues(){		
+		Assert.assertNotNull(validValuesAdapters);
+		Assert.assertFalse(validValuesAdapters.isEmpty());
+		
+		IValidValues vv =(IValidValues)getProcessorForTaglibProcessingBundle(possibleValueAdapters);
+		Assert.assertTrue(vv.isValidValue("A"));
+		Assert.assertTrue(vv.isValidValue("B"));
+		Assert.assertFalse(vv.isValidValue("a"));
+
+	}
+	
+	public void testDefaultValues(){		
+		Assert.assertNotNull(defaultValueAdapters);
+		Assert.assertFalse(defaultValueAdapters.isEmpty());
+		
+		IDefaultValue dv =(IDefaultValue)getProcessorForTaglibProcessingBundle(possibleValueAdapters);
+		Assert.assertNotNull(dv.getDefaultValue());
+
+	}
+	
+	public void testCreateValues(){		
+		Assert.assertNotNull(createValuesAdapters);
+		Assert.assertTrue(createValuesAdapters.isEmpty());
+	}
+	
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/TaglibProcessingTestCase.java b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/TaglibProcessingTestCase.java
new file mode 100644
index 0000000..cfc840b
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/src/org/eclipse/jst/jsf/metadata/tests/taglibprocessing/TaglibProcessingTestCase.java
@@ -0,0 +1,93 @@
+package org.eclipse.jst.jsf.metadata.tests.taglibprocessing;
+
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.metadata.tests.Activator;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.IMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.MetaDataEnabledProcessingFactory;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.ICreateValues;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IDefaultValue;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IValidValues;
+
+public class TaglibProcessingTestCase extends TestCase {
+	protected IStructuredDocumentContext docContext;
+	protected String uri = "http://org.eclipse.jsf/tagprocessing";
+	protected String bundle = "org.eclipse.jst.jsf.taglibprocessing";
+	protected String barkerBundle = Activator.ID_BUNDLE;
+	protected String tag = "MyTag";
+	protected String attributeName;
+	
+	protected List possibleValueAdapters;
+	protected List validValuesAdapters;
+	protected List defaultValueAdapters;
+	protected List createValuesAdapters;
+	
+	public void setUp(){
+		
+		docContext = getTestDocContext();
+		possibleValueAdapters = getProcessorAdapters(IPossibleValues.class);
+		validValuesAdapters = getProcessorAdapters(IValidValues.class);
+		defaultValueAdapters = getProcessorAdapters(IDefaultValue.class);
+		createValuesAdapters = getProcessorAdapters(ICreateValues.class);
+	}
+	
+	private IStructuredDocumentContext getTestDocContext() {
+		IJavaProject jproj = getProject();
+		IDocument doc = null;//figure it out
+		return IStructuredDocumentContextFactory.INSTANCE.getContext(doc, 0);
+	}
+
+	private IJavaProject getProject() {
+//		if (ResourcesPlugin.getWorkspace().getRoot().getProject("testProject")==null){
+//			//do we import??? or create new???
+//			Impor
+//			IJavaProject jp = new JavaProject(
+//		}
+//		return JavaCore.create(ResourcesPlugin.getWorkspace().getRoot().getProject("testProject"));
+		return null;
+	}
+
+	protected String getAttributeNameFromTest(){
+		if (attributeName == null){
+			String test = this.getClass().getName();
+			test = test.substring(test.lastIndexOf(".") + 1);
+			test = test.substring(0,test.length() - 4);
+			return test;
+		} else
+			return attributeName;
+	}
+	
+	private List getProcessorAdapters(Class featureClass) {
+		return MetaDataEnabledProcessingFactory.getInstance().
+			getAttributeValueRuntimeTypeFeatureProcessors(featureClass, docContext, 
+					uri, tag , getAttributeNameFromTest());
+	}
+
+	private IMetaDataEnabledFeature getProcessorForBundle(List processors, String bundleID){
+		IMetaDataEnabledFeature ret = null;
+		Iterator it = processors.iterator();
+		while(it.hasNext()){
+			IMetaDataEnabledFeature feature = (IMetaDataEnabledFeature)it.next();
+			if (feature.getFeatureImplementer().getBundleID().equals(bundleID)){
+				ret = feature;
+				break;
+			}
+		}
+		return ret;
+	}
+	protected IMetaDataEnabledFeature getBarkProcessingBundle(List processors) {
+		return getProcessorForBundle(processors, barkerBundle);		
+	}
+	
+	protected IMetaDataEnabledFeature getProcessorForTaglibProcessingBundle(List processors) {
+		return getProcessorForBundle(processors, bundle);
+	}
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/CaseInsensitive.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/CaseInsensitive.xml
new file mode 100644
index 0000000..31a1a01
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/CaseInsensitive.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotations
+	xmlns="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema" 	
+	caseSensitive="false">
+	<cm-element name="Foo">
+		<cm-attribute name="Value">
+			<property name="Type">
+				<value>String1</value>
+			</property>
+		</cm-attribute>
+		<property name="Type">
+			<value>String1</value>
+		</property>
+	</cm-element>
+</grammar-annotations>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileA.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileA.xml
new file mode 100644
index 0000000..c8b9e11
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileA.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotation xmlns:p="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema ../../../org.eclipse.wtp.jsf.core/schema/grammar-annotations.xsd ">
+  <cm-element name="Foo">
+  	<cm-attribute name="Value">
+  		<property name="Type">
+  			<value>String1</value>
+  		</property>
+  	</cm-attribute>
+	<property name="Type">
+		<value>String1</value>
+	</property>
+  </cm-element>
+</grammar-annotation>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileB.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileB.xml
new file mode 100644
index 0000000..a77c641
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/FileB.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotation 
+	xmlns="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema" 
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+	>
+  <cm-element name="Foo">
+  	<cm-attribute name="Value">
+  		<property name="Type">
+  			<value>String2</value>
+  		</property>
+  	</cm-attribute>
+	<property name="Type">
+		<value>String2</value>
+	</property>
+  </cm-element>
+</grammar-annotation>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/TestJSP.jsp b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/TestJSP.jsp
new file mode 100644
index 0000000..edd40b1
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/TestJSP.jsp
@@ -0,0 +1,16 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+    pageEncoding="ISO-8859-1"%>
+<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
+<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Insert title here</title>
+</head>
+<body>
+	<f:view>
+		
+	</f:view>
+</body>
+</html>
\ No newline at end of file
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_metadataprocessing.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_metadataprocessing.xml
new file mode 100644
index 0000000..cc14b6b
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_metadataprocessing.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotation 
+	xmlns="http://org.eclipse.jsf.core/grammarAnnotationSchema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+>
+
+  <cm-element name="MyTag">
+  	<cm-attribute name="MyBooleanAttr">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.MyBooleanType</value>
+  		</property>
+  	</cm-attribute>
+  	  	<cm-attribute name="BooleanAttr">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.BooleanType</value>
+  		</property>
+  		<property name="barks">
+  			<value>woof</value>
+  			<value>ruff</value>
+  			<value>howllllllll</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="NutherBooleanAttr">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.BooleanType</value>
+  		</property>
+  		<property name="barks">
+  			<value>WOOF</value>
+  			<value>RUFF</value>
+  			<value>HOWLLL</value>
+  		</property>
+  	</cm-attribute>  	
+  	<cm-attribute name="MyValidValsAttr">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.MyStringArrayType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>FirstVal</value>
+  			<value>SecondVal</value>
+  			<value>ThirdVal</value>
+  			<value>FourthVal</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="MyNonMetaDataEnabledAttr">
+  		<property name="valid-values">
+  			<value>FirstVal</value>
+  			<value>SecondVal</value>
+  			<value>ThirdVal</value>
+  			<value>FourthVal</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="MyNoImplMetaDataEnabledAttr">
+  	  	<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.NoImplType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>FirstVal</value>
+  			<value>SecondVal</value>
+  			<value>ThirdVal</value>
+  			<value>FourthVal</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="MyDualTypeAttr">
+  	  	<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.MyStringArrayType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>AFirstVal</value>
+  			<value>ASecondVal</value>
+  			<value>AThirdVal</value>
+  			<value>AFourthVal</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="MyLongAttr">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.MyLongType</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="MyMissingType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.WhereIsIt</value>
+  		</property>
+  	</cm-attribute>
+  	<cm-attribute name="ValidatorID">
+	  	<property name="attribute-value-runtime-type">
+			<value>org.eclipse.jst.jsf.metadataprocessors.IdentifierType</value>
+		</property>
+	  	<property name="identifier-type">
+	  		<value>javax.faces.validator</value>
+	  	</property>
+  	</cm-attribute>
+  </cm-element>
+</grammar-annotation>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_tagprocessing.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_tagprocessing.xml
new file mode 100644
index 0000000..2270a6a
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_tagprocessing.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotation 
+	xmlns="http://org.eclipse.jsf.core/grammarAnnotationSchema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+>
+
+  <cm-element name="MyTag">
+  	<cm-attribute name="BooleanType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.BooleanType</value>
+  		</property>
+  		<property name="default-value">
+  			<value>true</value>
+  		</property>
+  	</cm-attribute>  	
+  	<cm-attribute name="StringType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.StringType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>A</value>
+  			<value>B</value>
+  			<value>C</value>
+  			<value>D</value>
+  		</property>
+  		<property name="displayed-values">
+  			<value>A FirstVal</value>
+  			<value>B SecondVal</value>
+  			<value>C ThirdVal</value>
+  			<value>D FourthVal</value>
+  		</property>  		
+  		<property name = "small-icon">
+  			<value>/icons/foo.gif</value>
+  		</property>
+  		<property name = "default-value">
+  			<value>A</value>
+  		</property>
+  	</cm-attribute> 
+  	<cm-attribute name="IntegerType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.IntegerType</value>
+  		</property>
+  		<property name="valid-minimum"><value>0</value></property>
+  		<property name="default-value"><value>10</value></property>
+  	</cm-attribute> 
+  	<cm-attribute name="LongType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.LongType</value>
+  		</property>
+	  	<property name="valid-minimum"><value>-1000</value></property>
+  		<property name="valid-maximum"><value>1000</value></property>
+  	</cm-attribute>    	
+  	<cm-attribute name="DoubleType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.DoubleType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>188.23</value>
+  			<value>245.32</value>
+  			<value>1</value>
+  		</property>
+  	</cm-attribute>    	
+  	<cm-attribute name="JavaClassType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.JavaClassType</value>
+  		</property>
+  	</cm-attribute>   
+  	<cm-attribute name="MethodBindingType">
+  		<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.taglibprocessing.attributevalues.MethodBindingType</value>
+  		</property>
+  	</cm-attribute>   
+  </cm-element>
+</grammar-annotation>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.properties b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.properties
new file mode 100644
index 0000000..7b2299c
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.properties
@@ -0,0 +1,5 @@
+NLS1=a day in the life
+NLS2=another string
+
+
+
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.xml b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.xml
new file mode 100644
index 0000000..ba19d27
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test.xml
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotations
+	xmlns="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://org.eclipse.wtp.jsf.core/grammarAnnotationSchema" >
+	<cm-element name="validator">
+		<cm-attribute name="validatorId">
+			<property name="attr-val-content-assistant">
+				<value>com.eclipse.wtp.jsf.ui.internal.ValidatorAttrValueContentAssistant</value>
+			</property>
+			<property name="attr-val-runtime-type">
+				<value>com.eclipse.wtp.jsf.core.internal.model.datatype.Validator</value>
+			</property>
+		</cm-attribute>
+	</cm-element>
+	<cm-element name="nopropsOrAttrs">
+	</cm-element>
+	<cm-element name="noAttrs">
+		<property name="A">
+			<value>a</value>
+		</property>
+		<property name="B"> 
+			<value>b</value>
+		</property>
+	</cm-element>
+	<cm-element name="loaded">
+		<cm-attribute name="att1">
+			<property name="A1">
+				<value>a1</value>
+			</property>
+			<property name="B1">
+				<value>b1</value>
+			</property>
+		</cm-attribute>
+		<cm-attribute name="att2">
+			<property name="A2">
+				<value>a2</value>
+			</property>
+			<property name="B2">
+				<value>b2</value>
+			</property>
+		</cm-attribute>
+		<cm-attribute name="att3">
+			<property name="A3">
+				<value>a3</value>
+			</property>
+			<property name="B3">
+				<value>b3</value>
+			</property>
+			<property name="multival"> 
+				<value>1</value>
+				<value>2</value>
+				<value>3</value>
+			</property>
+		</cm-attribute>	
+		<property name="A">
+			<value>a</value>
+		</property>
+		<property name="B"> 
+			<value>b</value>
+		</property>
+		<property name="multival"> 
+			<value>1</value>
+			<value>2</value>
+			<value>3</value>
+		</property>
+	</cm-element>
+	<cm-element name="NLS">	
+		<cm-attribute name="NLS">	
+			<property name="NLS1">
+				<value>%NLS1</value>
+			</property>
+			<property name="NLS2">
+				<value>%NLS2</value>
+			</property>  
+			<property name="NLS3">
+				<value>%NLS3</value>
+			</property>  			
+			<property name="multival"> 
+				<value>%NLS1</value>
+				<value>%NLS2</value>
+			</property>		
+		</cm-attribute>	
+		<property name="NLS1">
+			<value>%NLS1</value>
+		</property>
+		<property name="NLS2">
+			<value>%NLS2</value>
+		</property>  
+		<property name="NLS3">
+			<value>%NLS3</value>
+		</property>  			
+		<property name="multival"> 
+			<value>%NLS1</value>
+			<value>%NLS2</value>
+		</property>
+		<property name="NullVal">
+			<value></value>
+		</property>					
+	</cm-element>
+</grammar-annotations>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test_en_US.properties b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test_en_US.properties
new file mode 100644
index 0000000..94c8b66
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadata.tests/testfiles/metadata/jsf_test_en_US.properties
@@ -0,0 +1,5 @@
+NLS1=a day in the life(en_US)
+NLS2=another string(en_US)
+
+
+
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/.classpath b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/.classpath
@@ -0,0 +1,7 @@
+<?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/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/.cvsignore b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/.cvsignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/.cvsignore
@@ -0,0 +1 @@
+bin
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/.project b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/.project
new file mode 100644
index 0000000..27dce31
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.jst.jsf.metadataprocessingtests2</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/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/META-INF/MANIFEST.MF b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3c0a5a9
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Metadataprocessingtests2 Plug-in
+Bundle-SymbolicName: org.eclipse.jst.jsf.metadataprocessingtests2;singleton:=true
+Bundle-Version: 0.5.0.qualifier
+Bundle-Activator: org.eclipse.jst.jsf.metadataprocessingtests2.Activator
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.jst.jsf.contentmodel.annotations,
+ org.eclipse.jst.jsf.metadataprocessors,
+ org.eclipse.jst.jsf.metadata.tests
+Eclipse-LazyStart: true
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/build.properties b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/metadata/jsf_metadataprocessing2.xml b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/metadata/jsf_metadataprocessing2.xml
new file mode 100644
index 0000000..ecbbd4b
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/metadata/jsf_metadataprocessing2.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar-annotation 
+	xmlns="http://org.eclipse.jsf.core/grammarAnnotationSchema"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+>
+
+  <cm-element name="MyTag">
+  	<cm-attribute name="MyDualTypeAttr">
+  	  	<property name="attribute-value-runtime-type">
+  			<value>org.eclipse.jst.jsf.metadata.tests.NoImplType</value>
+  		</property>
+  		<property name="valid-values">
+  			<value>BFirstVal</value>
+  			<value>BSecondVal</value>
+  			<value>BThirdVal</value>
+  			<value>BFourthVal</value>
+  		</property>
+  	</cm-attribute>
+  </cm-element>
+</grammar-annotation>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/plugin.xml b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/plugin.xml
new file mode 100644
index 0000000..5f0dedf
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/plugin.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<plugin>
+   <extension
+         point="org.eclipse.jst.jsf.contentmodel.annotations.annotationFiles">
+      <annotationFile
+            location="/metadata/jsf_metadataprocessing2.xml"
+            uri=" http://org.eclipse.jsf/metadataprocessing"/>
+   </extension>
+   <extension
+         point="org.eclipse.jst.jsf.metadataprocessors.AttributeValueRuntimeTypes">
+      <attributeValueRuntimeType id="NoImplType"/>
+   </extension>
+   <extension
+         point="org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledFeatures">
+      <MetaDataEnabledFeature
+            class="org.eclipse.jst.jsf.metadataprocessingtests2.NoImplPossibleVals"
+            typeid="org.eclipse.jst.jsf.metadata.tests.NoImplType"/>
+   </extension>
+
+</plugin>
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/src/org/eclipse/jst/jsf/metadataprocessingtests2/Activator.java b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/src/org/eclipse/jst/jsf/metadataprocessingtests2/Activator.java
new file mode 100644
index 0000000..558981f
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/src/org/eclipse/jst/jsf/metadataprocessingtests2/Activator.java
@@ -0,0 +1,45 @@
+package org.eclipse.jst.jsf.metadataprocessingtests2;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The main plugin class to be used in the desktop.
+ */
+public class Activator extends Plugin {
+
+	//The shared instance.
+	private static Activator plugin;
+	
+	/**
+	 * The constructor.
+	 */
+	public Activator() {
+		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.
+	 *
+	 * @return the shared instance.
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/src/org/eclipse/jst/jsf/metadataprocessingtests2/NoImplPossibleVals.java b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/src/org/eclipse/jst/jsf/metadataprocessingtests2/NoImplPossibleVals.java
new file mode 100644
index 0000000..9f54375
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.metadataprocessingtests2/src/org/eclipse/jst/jsf/metadataprocessingtests2/NoImplPossibleVals.java
@@ -0,0 +1,32 @@
+package org.eclipse.jst.jsf.metadataprocessingtests2;
+
+
+import java.util.List;
+
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.AbstractMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.AbstractRootTypeDescriptor;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.IMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.internal.provisional.features.IPossibleValues;
+import org.eclipse.wtp.jsf.contentmodel.annotation.internal.provisional.CMAnnotationHelper;
+
+public class NoImplPossibleVals extends AbstractMetaDataEnabledFeature implements
+		IPossibleValues {
+
+	public NoImplPossibleVals() {
+		super();
+	}
+
+	public List getPossibleValues() {
+		return getPossibleVals();
+	}
+
+	private List getPossibleVals() {
+		return CMAnnotationHelper.getCMAttributePropertyValues(getCMAnnotationContext().getBundleId(), getCMAnnotationContext().getUri(),
+				getCMAnnotationContext().getElementName(), getCMAnnotationContext().getAttributeName(),
+				IPossibleValues.POSSIBLE_VALUES_PROP_NAME);
+
+	}
+	
+	
+
+}
