[292415] [content model] Add html5 support to HTML component
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/HTMLCoreMessages.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/HTMLCoreMessages.java
index 7673a86..f2f93b1 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/HTMLCoreMessages.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/HTMLCoreMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,6 +51,8 @@
 	public static String HTMLContentPropertiesManager_Updating;
 	public static String HTMLContentPropertiesManager_Problems_Updating;
 	public static String _ERROR_Resource_not_found_0;
+	public static String Obsolete_attribute_name___ERROR_;
+	public static String Obsolete_tag___ERROR_;
 
 	static {
 		// load message values from bundle file
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/HTMLCorePluginResources.properties b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/HTMLCorePluginResources.properties
index d26f16c..7301451 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/HTMLCorePluginResources.properties
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/HTMLCorePluginResources.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004, 2006 IBM Corporation and others.
+# Copyright (c) 2004, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -40,4 +40,6 @@
 #
 HTMLContentPropertiesManager_Updating=Updating Web Content Settings
 HTMLContentPropertiesManager_Problems_Updating=Problem saving Web Content Settings for {0}
-_ERROR_Resource_not_found_0=Resource not found: {0}
\ No newline at end of file
+_ERROR_Resource_not_found_0=Resource not found: {0}
+Obsolete_attribute_name___ERROR_=Attribute ({0}) is obsolete. Its use is discouraged in HTML5 documents.
+Obsolete_tag___ERROR_=Element ({0}) is obsolete. Its use is discouraged in HTML5 documents.
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/AttributeCollection.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/AttributeCollection.java
index ab2a71c..fa77f0e 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/AttributeCollection.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/AttributeCollection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,10 +23,10 @@
 /**
  * Factory for attribute declarations.
  */
-final class AttributeCollection extends CMNamedNodeMapImpl implements HTML40Namespace {
+class AttributeCollection extends CMNamedNodeMapImpl implements HTML40Namespace {
 
 	/** bodycolors. */
-	private static final String[] BODYCOLORS = {ATTR_NAME_BGCOLOR, ATTR_NAME_TEXT, ATTR_NAME_LINK, ATTR_NAME_VLINK, HTML40Namespace.ATTR_NAME_ALINK};
+	private static final String[] BODYCOLORS = {ATTR_NAME_BGCOLOR, ATTR_NAME_TEXT, ATTR_NAME_LINK, ATTR_NAME_VLINK, ATTR_NAME_ALINK};
 	/** coreattrs. */
 	private static final String[] CORE = {ATTR_NAME_ID, ATTR_NAME_CLASS, ATTR_NAME_STYLE, ATTR_NAME_TITLE};
 	/** events. */
@@ -49,7 +49,7 @@
 	 * @param attrName
 	 *            java.lang.String
 	 */
-	private HTMLAttrDeclImpl create(String attrName) {
+	protected HTMLAttrDeclImpl create(String attrName) {
 		HTMLAttrDeclImpl attr = null;
 		HTMLCMDataTypeImpl atype = null;
 
@@ -1209,7 +1209,7 @@
 		atype.setEnumValues(values);
 
 		HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_ALIGN, atype, CMAttributeDeclaration.OPTIONAL);
-		declarations.putNamedItem(HTML40Namespace.ATTR_NAME_ALIGN, attr);
+		declarations.putNamedItem(ATTR_NAME_ALIGN, attr);
 
 		// the rest.
 		Iterator names = Arrays.asList(CELLHALIGN).iterator();
@@ -1221,9 +1221,9 @@
 	 * (top|middle|bottom|baseline) #IMPLIED)
 	 */
 	public void getCellvalign(CMNamedNodeMapImpl declarations) {
-		HTMLAttributeDeclaration dec = getDeclaration(HTML40Namespace.ATTR_NAME_VALIGN);
+		HTMLAttributeDeclaration dec = getDeclaration(ATTR_NAME_VALIGN);
 		if (dec != null)
-			declarations.putNamedItem(HTML40Namespace.ATTR_NAME_VALIGN, dec);
+			declarations.putNamedItem(ATTR_NAME_VALIGN, dec);
 	}
 
 	/**
@@ -1282,4 +1282,410 @@
 		Iterator names = Arrays.asList(I18N).iterator();
 		getDeclarations(declarations, names);
 	}
+	
+	/**
+	 * create declarations.
+	 */
+	public void createAttributeDeclarations(String elementName, CMNamedNodeMapImpl attributes) {
+		 /* (type %InputType; TEXT) ... should be defined locally.
+		 * (name CDATA #IMPLIED)
+		 * (value CDATA #IMPLIED)
+		 * (checked (checked) #IMPLIED)
+		 * (disabled (disabled) #IMPLIED)
+		 * (readonly (readonly) #IMPLIED)
+		 * (size CDATA #IMPLIED) ... should be defined locally.
+		 * (maxlength NUMBER #IMPLIED)
+		 * (src %URI; #IMPLIED)
+		 * (alt CDATA #IMPLIED) ... should be defined locally.
+		 * (usemap %URI; #IMPLIED)
+		 * (ismap (ismap) #IMPLIED)
+		 * (tabindex NUMBER #IMPLIED)
+		 * (accesskey %Character; #IMPLIED)
+		 * (onfocus %Script; #IMPLIED)
+		 * (onblur %Script; #IMPLIED)
+		 * (onselect %Script; #IMPLIED)
+		 * (onchange %Script; #IMPLIED)
+		 * (accept %ContentTypes; #IMPLIED)
+		 * (align %IAlign; #IMPLIED) ... should be defined locally.
+		 * (istyle CDATA #IMPLIED)
+		 * <<D215684
+		 * (width CDATA; #IMPLIED)
+		 * (height CDATA; #IMPLIED)
+		 * (border CDATA; #IMPLIED)
+		 * D215684
+		 */
+		if (elementName.equals(HTML40Namespace.ElementName.INPUT)){
+			HTMLCMDataTypeImpl atype = null;
+			HTMLAttrDeclImpl attr = null;
+			// (type %InputType; TEXT) ... should be defined locally.
+			// NOTE: %InputType is ENUM;
+			// (text | password | checkbox | radio | submit | reset |
+			//  file | hidden | image | button)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_TEXT, ATTR_VALUE_PASSWORD, ATTR_VALUE_CHECKBOX, ATTR_VALUE_RADIO, ATTR_VALUE_SUBMIT, ATTR_VALUE_RESET, ATTR_VALUE_FILE, ATTR_VALUE_HIDDEN, ATTR_VALUE_IMAGE, ATTR_VALUE_BUTTON};
+			atype.setEnumValues(values);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_TEXT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+
+			// (size CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SIZE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_SIZE, attr);
+
+			// (alt CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ALT, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_ALT, attr);
+
+			// (align %IAlign; #IMPLIED) ... should be defined locally.
+			attr = AttributeCollection.createAlignForImage();
+			attributes.putNamedItem(ATTR_NAME_ALIGN, attr);
+
+			// the rest.
+			String[] names = {ATTR_NAME_NAME, ATTR_NAME_VALUE, ATTR_NAME_CHECKED, ATTR_NAME_DISABLED, ATTR_NAME_READONLY, ATTR_NAME_SIZE, ATTR_NAME_MAXLENGTH, ATTR_NAME_SRC, ATTR_NAME_ALT, ATTR_NAME_USEMAP, ATTR_NAME_ISMAP, ATTR_NAME_TABINDEX, ATTR_NAME_ACCESSKEY, ATTR_NAME_ONFOCUS, ATTR_NAME_ONBLUR, ATTR_NAME_ONSELECT, ATTR_NAME_ONCHANGE, ATTR_NAME_ACCEPT, ATTR_NAME_ALIGN, ATTR_NAME_ISTYLE,
+			//<<D215684
+						ATTR_NAME_WIDTH, ATTR_NAME_HEIGHT, ATTR_NAME_BORDER
+			//<D215684
+			};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+		}
+		 /* (charset %Charset; #IMPLIED)
+		 * (href %URI; #IMPLIED)
+		 * (hreflang %LanguageCode; #IMPLIED)
+		 * (type %ContentType; #IMPLIED): should be defined locally.
+		 * (rel %LinkTypes; #IMPLIED)
+		 * (rev %LinkTypes; #IMPLIED)
+		 * (media %MediaDesc; #IMPLIED)
+		 * (target %FrameTarget; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.LINK)){
+			String[] names = {ATTR_NAME_CHARSET, ATTR_NAME_HREF, ATTR_NAME_HREFLANG, ATTR_NAME_REL, ATTR_NAME_REV, ATTR_NAME_MEDIA, ATTR_NAME_TARGET};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// (type %ContentType; #IMPLIED)
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CONTENT_TYPE);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+		
+		}
+		/* (charset %Charset; #IMPLIED)
+		 * (type %ContentType; #IMPLIED)
+		 * (name CDATA #IMPLIED)
+		 * (href %URI; #IMPLIED)
+		 * (hreflang %LanguageCode; #IMPLIED)
+		 * (target %FrameTarget; #IMPLIED)
+		 * (rel %LinkTypes; #IMPLIED)
+		 * (rev %LinkTypes; #IMPLIED)
+		 * (accesskey %Character; #IMPLIED)
+		 * (directkey %Character; #IMPLIED)
+		 * (shape %Shape; rect)
+		 * (coords %Coords; #IMPLIED)
+		 * (tabindex NUMBER #IMPLIED)
+		 * (onfocus %Script; #IMPLIED)
+		 * (onblur %Script; #IMPLIED) 
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.A)){
+			String[] names = {ATTR_NAME_CHARSET, ATTR_NAME_TYPE, ATTR_NAME_NAME, ATTR_NAME_HREF, ATTR_NAME_HREFLANG, ATTR_NAME_TARGET, ATTR_NAME_REL, ATTR_NAME_REV, ATTR_NAME_ACCESSKEY, ATTR_NAME_DIRECTKEY, ATTR_NAME_SHAPE, ATTR_NAME_COORDS, ATTR_NAME_TABINDEX, ATTR_NAME_ONFOCUS, ATTR_NAME_ONBLUR};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+		
+		}
+		/*
+		 * (shape %Shape; rect)
+		 * (coords %Coords; #IMPLIED)
+		 * (href %URI; #IMPLIED)
+		 * (target %FrameTarget; #IMPLIED)
+		 * (nohref (nohref) #IMPLIED)
+		 * (alt %Text; #REQUIRED)
+		 * (tabindex NUMBER #IMPLIED)
+		 * (accesskey %Character; #IMPLIED)
+		 * (onfocus %Script; #IMPLIED)
+		 * (onblur %Script; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.AREA)){
+			String[] names = {ATTR_NAME_SHAPE, ATTR_NAME_COORDS, ATTR_NAME_HREF, ATTR_NAME_TARGET, ATTR_NAME_NOHREF, ATTR_NAME_ALT, ATTR_NAME_TABINDEX, ATTR_NAME_ACCESSKEY, ATTR_NAME_ONFOCUS, ATTR_NAME_ONBLUR};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+		}
+		/*
+		 *  %i18n;
+		 * (http-equiv NAME #IMPLIED)
+		 * (name NAME #IMPLIED) ... should be defined locally.
+		 * (content CDATA #REQUIRED)
+		 * (scheme CDATA #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.META)){
+			// %i18n;
+			getI18n(attributes);
+
+			// (name NAME #IMPLIED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.NAME);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_NAME, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_NAME, attr);
+
+			String[] names = {ATTR_NAME_HTTP_EQUIV, ATTR_NAME_CONTENT, ATTR_NAME_SCHEME};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+		}
+		/*
+		 * (src %URI; #REQUIRED): should be defined locally.
+		 * (alt %Text; #REQUIRED)
+		 * (longdesc %URI; #IMPLIED)
+		 * (name CDATA #IMPLIED)
+		 * (height %Length; #IMPLIED)
+		 * (width %Length; #IMPLIED)
+		 * (usemap %URI; #IMPLIED)
+		 * (ismap (ismap) #IMPLIED)
+		 * (align %IAlign; #IMPLIED): should be defined locally.
+		 * (border %Pixels; #IMPLIED)
+		 * (hspace %Pixels; #IMPLIED)
+		 * (vspace %Pixels; #IMPLIED)
+		 * (mapfile %URI; #IMPLIED)
+	 
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.IMG)){
+			// (src %URI; #REQUIRED): should be defined locally.
+			HTMLCMDataTypeImpl atype = null;
+			HTMLAttrDeclImpl attr = null;
+			atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SRC, atype, CMAttributeDeclaration.REQUIRED);
+			attributes.putNamedItem(ATTR_NAME_SRC, attr);
+
+			String[] names = {ATTR_NAME_ALT, ATTR_NAME_LONGDESC, ATTR_NAME_NAME, ATTR_NAME_HEIGHT, ATTR_NAME_WIDTH, ATTR_NAME_USEMAP, ATTR_NAME_ISMAP, ATTR_NAME_BORDER, ATTR_NAME_HSPACE, ATTR_NAME_VSPACE, ATTR_NAME_MAPFILE};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// align (local); should be defined locally.
+			attr = AttributeCollection.createAlignForImage();
+			attributes.putNamedItem(ATTR_NAME_ALIGN, attr);
+		
+		}
+		/*
+		 * (id ID #IMPLIED)
+		 * (name CDATA #REQUIRED) ... should be defined locally.
+		 * (value CDATA #IMPLIED)
+		 * (valuetype (DATA|REF|OBJECT) DATA)
+		 * (type %ContentType; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.PARAM)){
+			String[] names = {ATTR_NAME_ID, ATTR_NAME_VALUE, ATTR_NAME_VALUETYPE, ATTR_NAME_TYPE};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// (name CDATA #REQUIRED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_NAME, atype, CMAttributeDeclaration.REQUIRED);
+			attributes.putNamedItem(ATTR_NAME_NAME, attr);
+		}
+		/*
+		 * %reserved; ... empty
+		 * (name CDATA #IMPLIED)
+		 * (rows NUMBER #REQUIRED)
+		 * (cols NUMBER #REQUIRED)
+		 * (disabled (disabled) #IMPLIED)
+		 * (readonly (readonly) #IMPLIED)
+		 * (tabindex NUMBER #IMPLIED)
+		 * (accesskey %Character; #IMPLIED)
+		 * (onfocus %Script; #IMPLIED)
+		 * (onblur %Script; #IMPLIED)
+		 * (onselect %Script; #IMPLIED)
+		 * (onchange %Script; #IMPLIED)
+		 * (istyle CDATA #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.TEXTAREA)){
+			String[] names = {ATTR_NAME_NAME, ATTR_NAME_ROWS, ATTR_NAME_COLS, ATTR_NAME_DISABLED, ATTR_NAME_READONLY, ATTR_NAME_TABINDEX, ATTR_NAME_ACCESSKEY, ATTR_NAME_ONFOCUS, ATTR_NAME_ONBLUR, ATTR_NAME_ONSELECT, ATTR_NAME_ONCHANGE, ATTR_NAME_ISTYLE};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+		}
+		/*
+		 * (charset %Charset; #IMPLIED)
+		 * (type %ContentType; #REQUIRED) ... should be defined locally.
+		 * (language CDATA #IMPLIED)
+		 * (src %URI; #IMPLIED)
+		 * (defer (defer) #IMPLIED)
+		 * (event CDATA #IMPLIED)
+		 * (for %URI; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.SCRIPT)){
+			String[] names = {ATTR_NAME_CHARSET, ATTR_NAME_LANGUAGE, ATTR_NAME_SRC, ATTR_NAME_DEFER, ATTR_NAME_EVENT, ATTR_NAME_FOR};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// (type %ContentType; #REQUIRED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CONTENT_TYPE);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, "text/javascript"); //$NON-NLS-1$
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.REQUIRED);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+		
+		}
+		/*
+		 *  %i18n;
+		 * (type %ContentType; #REQUIRED) ... should be defined locally.
+		 * (media %MediaDesc; #IMPLIED)
+		 * (title %Text; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.STYLE)){
+			// %i18n;
+			getI18n(attributes);
+
+			String[] names = {ATTR_NAME_MEDIA, ATTR_NAME_TITLE};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+			// (type %ContentType; #REQUIRED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CONTENT_TYPE);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, "text/css"); //$NON-NLS-1$
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.REQUIRED);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+		
+		}
+		/*
+		 * %reserved;
+		 * (name CDATA #IMPLIED)
+		 * (size NUMBER #IMPLIED) ... should be defined locally.
+		 * (multiple (multiple) #IMPLIED)
+		 * (disabled (disabled) #IMPLIED)
+		 * (tabindex NUMBER #IMPLIED)
+		 * (onfocus %Script; #IMPLIED)
+		 * (onblur %Script; #IMPLIED)
+		 * (onchange %Script; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.SELECT)){
+			// (size NUMBER #IMPLIED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_SIZE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_SIZE, attr);
+
+			String[] names = {ATTR_NAME_NAME, ATTR_NAME_MULTIPLE, ATTR_NAME_DISABLED, ATTR_NAME_TABINDEX, ATTR_NAME_ONFOCUS, ATTR_NAME_ONBLUR, ATTR_NAME_ONCHANGE};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+		
+		}
+		/*
+		 * 	(type %LIStyle; #IMPLIED) ... should be defined locally.
+		 * (value NUMBER #IMPLIED) ... should be defined locally.
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.LI)){
+			// (type %LIStyle; #IMPLIED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.LI_STYLE);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+
+			// (value NUMBER #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_VALUE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_VALUE, attr);
+		
+		}
+		/*
+		 * (type %OLStyle; #IMPLIED) ... should be defined locally.
+		 * (compact (compact) #IMPLIED)
+		 * (start NUMBER #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.OL)){
+			// (type %OLStyle; #IMPLIED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.OL_STYLE);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+
+			// the rest.
+			String[] names = {ATTR_NAME_COMPACT, ATTR_NAME_START};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+		
+		}
+		/**
+		 * %coreattrs;
+		 * (longdesc %URI; #IMPLIED)
+		 * (name CDATA #IMPLIED)
+		 * (src %URI; #IMPLIED)
+		 * (frameborder (1|0) 1)
+		 * (marginwidth %Pixels; #IMPLIED)
+		 * (marginheight %Pixels; #IMPLIED)
+		 * (scrolling (yes|no|auto) auto)
+		 * (align %IAlign; #IMPLIED) ... should be defined locally.
+		 * (height %Length; #IMPLIED)
+		 * (width %Length; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.IFRAME)){
+			// %coreattrs;
+			getCore(attributes);
+
+			String[] names = {ATTR_NAME_LONGDESC, ATTR_NAME_NAME, ATTR_NAME_SRC, ATTR_NAME_FRAMEBORDER, ATTR_NAME_MARGINWIDTH, ATTR_NAME_MARGINHEIGHT, ATTR_NAME_SCROLLING, ATTR_NAME_HEIGHT, ATTR_NAME_WIDTH};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// align
+			HTMLAttrDeclImpl attr = AttributeCollection.createAlignForImage();
+			if (attr != null)
+				attributes.putNamedItem(ATTR_NAME_ALIGN, attr);
+		
+		}
+		/*
+		 * %i18n attrs
+		 * %version
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.HTML)){
+			// %i18n;
+			getI18n(attributes);
+			// version
+			HTMLAttributeDeclaration adec = getDeclaration(ATTR_NAME_VERSION);
+			if (adec != null)
+				attributes.putNamedItem(ATTR_NAME_VERSION, adec);
+		
+		}
+		/*
+		 * (compact (compact) #IMPLIED)
+	 	 */
+		else if (elementName.equals(HTML40Namespace.ElementName.MENU)){
+			String[] names = {ATTR_NAME_COMPACT};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+		
+		}
+		/*
+		 * %reserved; ... empty.
+		 * (name CDATA #IMPLIED)
+		 * (value CDATA #IMPLIED)
+		 * (type (button|submit|reset) submit) ... should be defined locally.
+		 * (disabled (disabled) #IMPLIED)
+		 * (tabindex NUMBER #IMPLIED)
+		 * (accesskey %Character; #IMPLIED)
+		 * (onfocus %Script; #IMPLIED)
+		 * (onblur %Script; #IMPLIED)
+	 	 */
+		else if (elementName.equals(HTML40Namespace.ElementName.BUTTON)){
+			String[] names = {ATTR_NAME_NAME, ATTR_NAME_VALUE, ATTR_NAME_DISABLED, ATTR_NAME_TABINDEX, ATTR_NAME_ACCESSKEY, ATTR_NAME_ONFOCUS, ATTR_NAME_ONBLUR};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// (type (button|submit|reset) submit) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_BUTTON, ATTR_VALUE_SUBMIT, ATTR_VALUE_RESET};
+			atype.setEnumValues(values);
+
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+		
+		}
+		/*
+		 * %reserved;
+		 * (summary %Text; #IMPLIED)
+		 * (width %Length; #IMPLIED)
+		 * (border %Pixels; #IMPLIED)
+		 * (frame %TFrame; #IMPLIED)
+		 * (rules %TRules; #IMPLIED)
+		 * (cellspacing %Length; #IMPLIED)
+		 * (cellpadding %Length; #IMPLIED)
+		 * (align %TAlign; #IMPLIED)
+		 * (bgcolor %Color; #IMPLIED)
+		 * (datapagesize CDATA #IMPLIED)
+		 * (height %Pixels; #IMPLIED)
+		 * (background %URI; #IMPLIED)
+		 * (bordercolor %Color #IMPLIED) ... D205514
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.TABLE)){
+			// %reserved;
+			// ... %reserved; is empty in the current DTD.
+
+			String[] names = {ATTR_NAME_SUMMARY, ATTR_NAME_WIDTH, ATTR_NAME_BORDER, ATTR_NAME_FRAME, ATTR_NAME_RULES, ATTR_NAME_CELLSPACING, ATTR_NAME_CELLPADDING, ATTR_NAME_BGCOLOR, ATTR_NAME_DATAPAGESIZE, ATTR_NAME_HEIGHT, ATTR_NAME_BACKGROUND, ATTR_NAME_BORDERCOLOR // D205514
+			};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// align (local)
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] alignValues = {ATTR_VALUE_LEFT, ATTR_VALUE_CENTER, ATTR_VALUE_RIGHT};
+			atype.setEnumValues(alignValues);
+			HTMLAttrDeclImpl adec = new HTMLAttrDeclImpl(ATTR_NAME_ALIGN, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_ALIGN, adec);
+			
+		}
+	}
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/ComplexTypeDefinitionFactory.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/ComplexTypeDefinitionFactory.java
index 9a38d53..51d693d 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/ComplexTypeDefinitionFactory.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/ComplexTypeDefinitionFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,6 +28,8 @@
 	public final static String CTYPE_COLUMN_GROUP = "CTYPE_COLUMN_GROUP";//$NON-NLS-1$
 	/** for DL. */
 	public final static String CTYPE_DEFINITION_LIST = "CTYPE_DEFINITION_LIST";//$NON-NLS-1$
+	/** for DETAILS */
+	public final static String CTYPE_DETAILS_CONTAINER = "CTYPE_DETAILS_CONTAINER";//$NON-NLS-1$
 	/** for EMBED. */
 	public final static String CTYPE_EMBED = "CTYPE_EMBED";//$NON-NLS-1$
 	/** empty content. No ComplexTypeDefinition instance should be created. */
@@ -64,7 +66,17 @@
 	public final static String CTYPE_TCELL_CONTAINER = "CTYPE_TCELL_CONTAINER";//$NON-NLS-1$
 	/** table record container. (TR)+ */
 	public final static String CTYPE_TR_CONTAINER = "CTYPE_TR_CONTAINER";//$NON-NLS-1$
-
+	/** heading group container. (H1|h2|H3|H4|H5|H6)+ */
+	public final static String CTYPE_HEADING_CONTAINER = "CTYPE_HGROUP_CONTAINER"; //$NON-NLS-1$
+	/** media content. (AUDIO|VIDEO) */
+	public final static String CTYPE_MEDIA_ELEMENT = "CTYPE_MEDIA";//$NON-NLS-1$
+	/** for DATALIST. */
+	public final static String CTYPE_DATALIST = "CTYPE_DATALIST";//$NON-NLS-1$
+	/** for FIGURE. */
+	public final static String CTYPE_FIGURE = "CTYPE_FIGURE";//$NON-NLS-1$
+	/** for RUBY. */
+	public final static String CTYPE_RUBY = "CTYPE_RUBY";//$NON-NLS-1$
+	
 	/**
 	 * ComplexTypeDefinitionFactory constructor comment.
 	 */
@@ -81,8 +93,17 @@
 	 * @param elementCollection ElementCollection
 	 */
 	public ComplexTypeDefinition createTypeDefinition(String definitionName, ElementCollection elementCollection) {
+		ComplexTypeDefinition[] defs = null;
 		if (definitions.containsKey(definitionName)) {
-			return (ComplexTypeDefinition) definitions.get(definitionName);
+			defs =  (ComplexTypeDefinition[]) definitions.get(definitionName);
+			for (int i = 0; i < defs.length; i++) {
+				if (defs[i].collection == elementCollection)
+					return defs[i];
+			}
+		}
+		else {
+			// initialize a new definition
+			defs = new ComplexTypeDefinition[0];
 		}
 
 		ComplexTypeDefinition def = null;
@@ -94,10 +115,17 @@
 			def = new CtdColumnGroup(elementCollection);
 
 		}
+		else if (definitionName == CTYPE_DATALIST) {
+			def = new CtdDatalist(elementCollection);
+
+		}
 		else if (definitionName == CTYPE_DEFINITION_LIST) {
 			def = new CtdDl(elementCollection);
 
 		}
+		else if (definitionName == CTYPE_DETAILS_CONTAINER) {
+			def = new CtdDetails(elementCollection);
+		}
 		else if (definitionName == CTYPE_EMBED) {
 			def = new CtdEmbed(elementCollection);
 
@@ -106,6 +134,10 @@
 			def = new CtdFieldset(elementCollection);
 
 		}
+		else if (definitionName == CTYPE_FIGURE) {
+			def = new CtdFigure(elementCollection);
+
+		}
 		else if (definitionName == CTYPE_FLOW_CONTAINER) {
 			def = new CtdFlowContainer(elementCollection);
 
@@ -118,6 +150,9 @@
 			def = new CtdHead(elementCollection);
 
 		}
+		else if (definitionName == CTYPE_HEADING_CONTAINER) {
+			def = new CtdHeadingContainer(elementCollection);
+		}
 		else if (definitionName == CTYPE_HTML) {
 			def = new CtdHtml(elementCollection);
 
@@ -134,6 +169,10 @@
 			def = new CtdMap(elementCollection);
 
 		}
+		else if (definitionName == CTYPE_MEDIA_ELEMENT) {
+			def = new CtdMediaElement(elementCollection);
+			
+		}
 		else if (definitionName == CTYPE_NOFRAMES_CONTENT) {
 			def = new CtdNoframesContent(elementCollection);
 
@@ -146,6 +185,10 @@
 			def = new CtdParamContainer(elementCollection);
 
 		}
+		else if (definitionName == CTYPE_RUBY) {
+			def = new CtdRuby(elementCollection);
+
+		}
 		else if (definitionName == CTYPE_SELECT) {
 			def = new CtdSelect(elementCollection);
 
@@ -167,7 +210,11 @@
 		}
 		if (def == null)
 			return null; // fail to create.
-		definitions.put(definitionName, def);
+		ComplexTypeDefinition[] temp = defs;
+		defs = new ComplexTypeDefinition[defs.length + 1];
+		System.arraycopy(temp, 0, defs, 0, temp.length);
+		defs[temp.length] = def;
+		definitions.put(definitionName, defs);
 		return def;
 	}
 
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdDatalist.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdDatalist.java
new file mode 100644
index 0000000..457debf
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdDatalist.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+/**
+ * for DATALIST.
+ */
+final class CtdDatalist extends ComplexTypeDefinition {
+
+	/**
+	 * @param elementCollection ElementCollection
+	 */
+	public CtdDatalist(ElementCollection elementCollection) {
+		super(elementCollection);
+		primaryCandidateName = HTML40Namespace.ElementName.OPTION;
+	}
+
+	/**
+	 * (OPTION)+.
+	 */
+	protected void createContent() {
+		if (content != null)
+			return; // already created.
+		if (collection == null)
+			return;
+
+	
+		content = new CMGroupImpl(CMGroup.CHOICE, 1, CMContentImpl.UNBOUNDED);
+		// OPTION
+		CMNode dec = collection.getNamedItem(HTML40Namespace.ElementName.OPTION);
+		if (dec != null)
+			content.appendChild(dec);
+	}
+
+	/**
+	 * (OPTION)+.
+	 * @return int; Should be one of ANY, EMPTY, ELEMENT, MIXED, PCDATA, CDATA,
+	 * those are defined in CMElementDeclaration.
+	 */
+	public int getContentType() {
+		return CMElementDeclaration.ELEMENT;
+	}
+
+	/**
+	 * @return java.lang.String
+	 */
+	public String getTypeName() {
+		return ComplexTypeDefinitionFactory.CTYPE_DATALIST;
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdDetails.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdDetails.java
new file mode 100644
index 0000000..914d5db
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdDetails.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+public class CtdDetails extends ComplexTypeDefinition {
+
+	public CtdDetails(ElementCollection elementCollection) {
+		super(elementCollection);
+		primaryCandidateName = HTML50Namespace.ElementName.SUMMARY;
+	}
+
+	protected void createContent() {
+		if (content != null)
+			return; // already created.
+		if (collection == null)
+			return;
+
+		content = new CMGroupImpl(CMGroup.SEQUENCE, 1, 1);
+		// summary
+		CMNode dec = collection.getNamedItem(HTML50Namespace.ElementName.SUMMARY);
+		if (dec != null)
+			content.appendChild(dec);
+
+		CMGroupImpl group = new CMGroupImpl(CMGroup.CHOICE, 1, CMContentImpl.UNBOUNDED);
+		content.appendChild(group);
+		collection.getFlow(group);
+	}
+
+	public int getContentType() {
+		return CMElementDeclaration.ELEMENT;
+	}
+
+	public String getTypeName() {
+		return ComplexTypeDefinitionFactory.CTYPE_DETAILS_CONTAINER;
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdFigure.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdFigure.java
new file mode 100644
index 0000000..165054f
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdFigure.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+/**
+ * for FIGURE.
+ */
+final class CtdFigure extends ComplexTypeDefinition {
+
+	/**
+	 * @param elementCollection ElementCollection
+	 */
+	public CtdFigure(ElementCollection elementCollection) {
+		super(elementCollection);
+		primaryCandidateName = HTML50Namespace.ElementName.FIGCAPTION;
+	}
+
+	/**
+	 * (FIGCAPTION)+.
+	 */
+	protected void createContent() {
+		if (content != null)
+			return; // already created.
+		if (collection == null)
+			return;
+
+		// ( | )+
+		content = new CMGroupImpl(CMGroup.CHOICE, 1, 1);
+		
+		CMGroupImpl group1 = new CMGroupImpl(CMGroup.SEQUENCE, 1, 1);
+		if (group1 != null){
+			content.appendChild(group1);
+		}
+		// FIGCAPTION, FLOW
+		CMNode dec = collection.getNamedItem(HTML50Namespace.ElementName.FIGCAPTION);
+		if (dec != null)
+			group1.appendChild(dec);
+		CMGroupImpl flowgroup = new CMGroupImpl(CMGroup.SEQUENCE, 1, 1);
+		group1.appendChild(flowgroup);
+		collection.getFlow(flowgroup);
+		
+		CMGroupImpl group2 = new CMGroupImpl(CMGroup.SEQUENCE, 1, 1);
+		if (group2 != null){
+			content.appendChild(group2);
+		}
+		// FLOW , FIGCAPTION
+		CMGroupImpl flowgroup2 = new CMGroupImpl(CMGroup.SEQUENCE, 1, 1);
+		group2.appendChild(flowgroup2);
+		collection.getFlow(flowgroup2);
+		CMNode dec1 = collection.getNamedItem(HTML50Namespace.ElementName.FIGCAPTION);
+		if (dec1 != null)
+			group2.appendChild(dec1);
+		//FLOW
+		CMGroupImpl group3 = new CMGroupImpl(CMGroup.SEQUENCE, 1, 1);
+		if (group3 != null){
+			content.appendChild(group3);
+			
+		}
+		collection.getFlow(group3);
+
+	}
+
+	/**
+	 * (FIGCAPTION)+.
+	 * @return int; Should be one of ANY, EMPTY, ELEMENT, MIXED, PCDATA, CDATA,
+	 * those are defined in CMElementDeclaration.
+	 */
+	public int getContentType() {
+		return CMElementDeclaration.ELEMENT;
+	}
+
+	/**
+	 * @return java.lang.String
+	 */
+	public String getTypeName() {
+		return ComplexTypeDefinitionFactory.CTYPE_FIGURE;
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdHeadingContainer.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdHeadingContainer.java
new file mode 100644
index 0000000..e7fdba7
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdHeadingContainer.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
+
+
+public class CtdHeadingContainer extends ComplexTypeDefinition {
+
+	/**
+	 * @param elementCollection ElementCollection
+	 */
+	public CtdHeadingContainer(ElementCollection elementCollection) {
+		super(elementCollection);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.html.core.internal.contentmodel.ComplexTypeDefinition#createContent()
+	 */
+	protected void createContent() {
+		if (content != null)
+			return; // already created.
+		if (collection == null)
+			return;
+		// ( )*
+		content = new CMGroupImpl(CMGroup.CHOICE, 1, CMContentImpl.UNBOUNDED);
+		// H1|H2|H3|H4|H5|H6
+		 collection.getHeading(content);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.html.core.internal.contentmodel.ComplexTypeDefinition#getContentType()
+	 */
+	public int getContentType() {
+		return CMElementDeclaration.ELEMENT;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.html.core.internal.contentmodel.ComplexTypeDefinition#getTypeName()
+	 */
+	public String getTypeName() {
+		return ComplexTypeDefinitionFactory.CTYPE_HEADING_CONTAINER;
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdHtml.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdHtml.java
index d2396fc..ca7295b 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdHtml.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdHtml.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@
 import java.util.Arrays;
 
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
@@ -319,6 +320,53 @@
 	    edec = collection.getNamedItem(HTML40Namespace.ElementName.STRONG);
 		if (edec != null)
 			content.appendChild(edec);
+		edec = collection.getNamedItem(HTML50Namespace.ElementName.ARTICLE);
+		if (edec != null)
+			content.appendChild(edec);
+
+	    edec = collection.getNamedItem(HTML50Namespace.ElementName.ASIDE);
+		if (edec != null)
+			content.appendChild(edec);
+		edec = collection.getNamedItem(HTML50Namespace.ElementName.NAV);
+		if (edec != null)
+			content.appendChild(edec);
+
+	    edec = collection.getNamedItem(HTML50Namespace.ElementName.SECTION);
+		if (edec != null)
+			content.appendChild(edec);
+		edec = collection.getNamedItem(HTML50Namespace.ElementName.AUDIO);
+		if (edec != null)
+			content.appendChild(edec);
+
+	    edec = collection.getNamedItem(HTML50Namespace.ElementName.VIDEO);
+		if (edec != null)
+			content.appendChild(edec);
+		edec = collection.getNamedItem(HTML50Namespace.ElementName.CANVAS);
+		if (edec != null)
+			content.appendChild(edec);
+
+	    edec = collection.getNamedItem(HTML50Namespace.ElementName.COMMAND);
+		if (edec != null)
+			content.appendChild(edec);
+		
+	    edec = collection.getNamedItem(HTML50Namespace.ElementName.HEADER);
+		if (edec != null)
+			content.appendChild(edec);
+		
+	    edec = collection.getNamedItem(HTML50Namespace.ElementName.FOOTER);
+		if (edec != null)
+			content.appendChild(edec);
+		
+	    edec = collection.getNamedItem(HTML50Namespace.ElementName.MARK);
+		if (edec != null)
+			content.appendChild(edec);
+		
+		edec = collection.getNamedItem(HTML50Namespace.ElementName.FIGURE);
+		if (edec != null)
+			content.appendChild(edec);
+		edec = collection.getNamedItem(HTML50Namespace.ElementName.RUBY);
+		if (edec != null)
+			content.appendChild(edec);
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdMediaElement.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdMediaElement.java
new file mode 100644
index 0000000..95cb598
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdMediaElement.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+
+public class CtdMediaElement extends ComplexTypeDefinition {
+
+	/**
+	 * @param elementCollection ElementCollection
+	 */
+	public CtdMediaElement(ElementCollection elementCollection) {
+		super(elementCollection);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.html.core.internal.contentmodel.ComplexTypeDefinition#createContent()
+	 */
+	protected void createContent() {
+		if (content != null)
+			return; // already created.
+		if (collection == null)
+			return;
+		// ( )*
+		content = new CMGroupImpl(CMGroup.SEQUENCE,0, 1);
+		//source
+		CMNode source = collection.getNamedItem(HTML50Namespace.ElementName.SOURCE);
+		if (source != null)
+			content.appendChild(source);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.html.core.internal.contentmodel.ComplexTypeDefinition#getContentType()
+	 */
+	public int getContentType() {
+		return CMElementDeclaration.ELEMENT;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.html.core.internal.contentmodel.ComplexTypeDefinition#getTypeName()
+	 */
+	public String getTypeName() {
+		return ComplexTypeDefinitionFactory.CTYPE_MEDIA_ELEMENT;
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdRuby.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdRuby.java
new file mode 100644
index 0000000..9ec37d0
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/CtdRuby.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+/**
+ * for RUBY.
+ */
+final class CtdRuby extends ComplexTypeDefinition {
+
+	/**
+	 * @param elementCollection ElementCollection
+	 */
+	public CtdRuby(ElementCollection elementCollection) {
+		super(elementCollection);
+		primaryCandidateName = HTML50Namespace.ElementName.RT;
+	}
+
+	/**
+	 * (RT)+.
+	 */
+	protected void createContent() {
+		if (content != null)
+			return; // already created.
+		if (collection == null)
+			return;
+
+	
+		content = new CMGroupImpl(CMGroup.SEQUENCE, 1, CMContentImpl.UNBOUNDED);
+		
+		CMGroupImpl phraseGroup = new CMGroupImpl(CMGroup.CHOICE, 0, CMContentImpl.UNBOUNDED);
+		if (phraseGroup == null)
+			return;
+		content.appendChild(phraseGroup);
+		collection.getPhrase(phraseGroup);
+		
+		CMGroupImpl rtrpgroup = new CMGroupImpl(CMGroup.CHOICE, 1, 1);
+		if (rtrpgroup == null)
+			return;
+		content.appendChild(rtrpgroup);
+		
+		//RT
+		CMNode dec = collection.getNamedItem(HTML50Namespace.ElementName.RT);
+		if (dec != null)
+			rtrpgroup.appendChild(dec);
+		
+		CMGroupImpl rpgroup = new CMGroupImpl(CMGroup.SEQUENCE, 1, 1);
+		if (rpgroup == null)
+			return;
+		rtrpgroup.appendChild(rpgroup);
+		
+		// RP
+		dec = collection.getNamedItem(HTML50Namespace.ElementName.RP);
+		if (dec != null)
+			rpgroup.appendChild(dec);
+		// RT
+		dec = collection.getNamedItem(HTML50Namespace.ElementName.RT);
+		if (dec != null)
+			rpgroup.appendChild(dec);
+		dec = collection.getNamedItem(HTML50Namespace.ElementName.RP);
+		if (dec != null)
+			rpgroup.appendChild(dec);
+	}
+
+	/**
+	 * (RT)+.
+	 * @return int; Should be one of ANY, EMPTY, ELEMENT, MIXED, PCDATA, CDATA,
+	 * those are defined in CMElementDeclaration.
+	 */
+	public int getContentType() {
+		return CMElementDeclaration.ELEMENT;
+	}
+
+	/**
+	 * @return java.lang.String
+	 */
+	public String getTypeName() {
+		return ComplexTypeDefinitionFactory.CTYPE_RUBY;
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/ElementCollection.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/ElementCollection.java
index 8349964..92ddfdf 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/ElementCollection.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/ElementCollection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,11 +22,11 @@
 /**
  * Factory for element declarations.
  */
-final class ElementCollection extends DeclCollection implements org.eclipse.wst.html.core.internal.provisional.HTML40Namespace.ElementName {
+class ElementCollection extends DeclCollection implements org.eclipse.wst.html.core.internal.provisional.HTML40Namespace.ElementName {
 
 
 	// Element IDs
-	private static class Ids {
+	protected static class Ids {
 		public static final int ID_A = 0;
 		public static final int ID_ABBR = 1;
 		public static final int ID_ACRONYM = 2;
@@ -183,123 +183,18 @@
 	private static final String[] LIST = {UL, OL, DIR, MENU};
 	/** %preformatted;. PRE */
 	private static final String[] PREFORMATTED = {PRE};
-	private AttributeCollection attributeCollection = null;
+	protected AttributeCollection attributeCollection = null;
 	private static String[] fNames = null;
 
-	static {
-		fNames = new String[Ids.getNumOfIds()];
-		fNames[Ids.ID_A] = A;
-		fNames[Ids.ID_ABBR] = ABBR;
-		fNames[Ids.ID_ACRONYM] = ACRONYM;
-		fNames[Ids.ID_ADDRESS] = ADDRESS;
-		fNames[Ids.ID_APPLET] = APPLET;
-		fNames[Ids.ID_AREA] = AREA;
-		fNames[Ids.ID_B] = B;
-		fNames[Ids.ID_BASE] = BASE;
-		fNames[Ids.ID_BASEFONT] = BASEFONT;
-		fNames[Ids.ID_BDO] = BDO;
-		fNames[Ids.ID_BIG] = BIG;
-		fNames[Ids.ID_BLINK] = BLINK;
-		fNames[Ids.ID_BLOCKQUOTE] = BLOCKQUOTE;
-		fNames[Ids.ID_BODY] = BODY;
-		fNames[Ids.ID_BR] = BR;
-		fNames[Ids.ID_BUTTON] = BUTTON;
-		fNames[Ids.ID_CAPTION] = CAPTION;
-		fNames[Ids.ID_CENTER] = CENTER;
-		fNames[Ids.ID_CITE] = CITE;
-		fNames[Ids.ID_CODE] = CODE;
-		fNames[Ids.ID_COL] = COL;
-		fNames[Ids.ID_COLGROUP] = COLGROUP;
-		fNames[Ids.ID_DD] = DD;
-		fNames[Ids.ID_DEL] = DEL;
-		fNames[Ids.ID_DFN] = DFN;
-		fNames[Ids.ID_DIR] = DIR;
-		fNames[Ids.ID_DIV] = DIV;
-		fNames[Ids.ID_DL] = DL;
-		fNames[Ids.ID_DT] = DT;
-		fNames[Ids.ID_EM] = EM;
-		fNames[Ids.ID_EMBED] = EMBED;
-		fNames[Ids.ID_FIELDSET] = FIELDSET;
-		fNames[Ids.ID_FONT] = FONT;
-		fNames[Ids.ID_FORM] = FORM;
-		fNames[Ids.ID_FRAME] = FRAME;
-		fNames[Ids.ID_FRAMESET] = FRAMESET;
-		fNames[Ids.ID_H1] = H1;
-		fNames[Ids.ID_H2] = H2;
-		fNames[Ids.ID_H3] = H3;
-		fNames[Ids.ID_H4] = H4;
-		fNames[Ids.ID_H5] = H5;
-		fNames[Ids.ID_H6] = H6;
-		fNames[Ids.ID_HEAD] = HEAD;
-		fNames[Ids.ID_HR] = HR;
-		fNames[Ids.ID_HTML] = HTML;
-		fNames[Ids.ID_I] = I;
-		fNames[Ids.ID_IFRAME] = IFRAME;
-		fNames[Ids.ID_IMG] = IMG;
-		fNames[Ids.ID_INPUT] = INPUT;
-		fNames[Ids.ID_INS] = INS;
-		fNames[Ids.ID_ISINDEX] = ISINDEX;
-		fNames[Ids.ID_KBD] = KBD;
-		fNames[Ids.ID_LABEL] = LABEL;
-		fNames[Ids.ID_LEGEND] = LEGEND;
-		fNames[Ids.ID_LI] = LI;
-		fNames[Ids.ID_LINK] = LINK;
-		fNames[Ids.ID_MAP] = MAP;
-		fNames[Ids.ID_MENU] = MENU;
-		fNames[Ids.ID_META] = META;
-		fNames[Ids.ID_NOEMBED] = NOEMBED;
-		fNames[Ids.ID_NOFRAMES] = NOFRAMES;
-		fNames[Ids.ID_NOSCRIPT] = NOSCRIPT;
-		fNames[Ids.ID_OBJECT] = OBJECT;
-		fNames[Ids.ID_OL] = OL;
-		fNames[Ids.ID_OPTGROUP] = OPTGROUP;
-		fNames[Ids.ID_OPTION] = OPTION;
-		fNames[Ids.ID_P] = P;
-		fNames[Ids.ID_PARAM] = PARAM;
-		fNames[Ids.ID_PRE] = PRE;
-		fNames[Ids.ID_Q] = Q;
-		fNames[Ids.ID_S] = S;
-		fNames[Ids.ID_SAMP] = SAMP;
-		fNames[Ids.ID_SCRIPT] = SCRIPT;
-		fNames[Ids.ID_SELECT] = SELECT;
-		fNames[Ids.ID_SMALL] = SMALL;
-		fNames[Ids.ID_SPAN] = SPAN;
-		fNames[Ids.ID_STRIKE] = STRIKE;
-		fNames[Ids.ID_STRONG] = STRONG;
-		fNames[Ids.ID_STYLE] = STYLE;
-		fNames[Ids.ID_SUB] = SUB;
-		fNames[Ids.ID_SUP] = SUP;
-		fNames[Ids.ID_TABLE] = TABLE;
-		fNames[Ids.ID_TBODY] = TBODY;
-		fNames[Ids.ID_TD] = TD;
-		fNames[Ids.ID_TEXTAREA] = TEXTAREA;
-		fNames[Ids.ID_TFOOT] = TFOOT;
-		fNames[Ids.ID_TH] = TH;
-		fNames[Ids.ID_THEAD] = THEAD;
-		fNames[Ids.ID_TITLE] = TITLE;
-		fNames[Ids.ID_TR] = TR;
-		fNames[Ids.ID_TT] = TT;
-		fNames[Ids.ID_U] = U;
-		fNames[Ids.ID_UL] = UL;
-		fNames[Ids.ID_VAR] = VAR;
-		fNames[Ids.ID_MARQUEE] = MARQUEE;
-		fNames[Ids.ID_SSI_CONFIG] = SSI_CONFIG;
-		fNames[Ids.ID_SSI_ECHO] = SSI_ECHO;
-		fNames[Ids.ID_SSI_EXEC] = SSI_EXEC;
-		fNames[Ids.ID_SSI_FSIZE] = SSI_FSIZE;
-		fNames[Ids.ID_SSI_FLASTMOD] = SSI_FLASTMOD;
-		fNames[Ids.ID_SSI_INCLUDE] = SSI_INCLUDE;
-		fNames[Ids.ID_SSI_PRINTENV] = SSI_PRINTENV;
-		fNames[Ids.ID_SSI_SET] = SSI_SET;
-		fNames[Ids.ID_BGSOUND] = BGSOUND;
-		fNames[Ids.ID_NOBR] = NOBR;
-		fNames[Ids.ID_WBR] = WBR;
-	}
-
 	/**
 	 */
 	public ElementCollection(AttributeCollection collection) {
-		super(fNames, TOLERANT_CASE);
+		super(getNames(), TOLERANT_CASE);
+		attributeCollection = collection;
+	}
+
+	public ElementCollection(String[] names, AttributeCollection collection) {
+		super(names, TOLERANT_CASE);
 		attributeCollection = collection;
 	}
 
@@ -747,7 +642,7 @@
 		return attributeCollection;
 	}
 
-	public final Collection getNamesOfBlock() {
+	public Collection getNamesOfBlock() {
 		// P, DL, DIV, CENTER, NOSCRIPT, NOFRAMES, BLOCKQUOTE, FORM, ISINDEX, HR,
 		// TABLE, FIELDSET, ADDRESS
 		String[] blockMisc = {P, DL, DIV, CENTER, NOSCRIPT, NOFRAMES, BLOCKQUOTE, FORM, ISINDEX, HR, TABLE, FIELDSET, ADDRESS};
@@ -781,7 +676,7 @@
 	 * into a <code>CMGroupImpl</code> instance.
 	 * @param group CMGroupImpl Return values.
 	 */
-	public final void getFlow(CMGroupImpl group) {
+	public void getFlow(CMGroupImpl group) {
 		if (group == null)
 			return;
 		getBlock(group);
@@ -793,7 +688,7 @@
 	 * instance.<br>
 	 * @param group CMGroupImpl Return values.
 	 */
-	public final void getFontstyle(CMGroupImpl group) {
+	public void getFontstyle(CMGroupImpl group) {
 		if (group == null)
 			return;
 		getDeclarations(group, Arrays.asList(FONTSTYLE).iterator());
@@ -804,7 +699,7 @@
 	 * instance.<br>
 	 * @param group CMGroupImpl Return values.
 	 */
-	public final void getFormctrl(CMGroupImpl group) {
+	public void getFormctrl(CMGroupImpl group) {
 		if (group == null)
 			return;
 		getDeclarations(group, Arrays.asList(FORMCTL).iterator());
@@ -814,7 +709,7 @@
 	 * %heading;.
 	 * @param group CMGroupImpl Return values.
 	 */
-	public final void getHeading(CMGroupImpl group) {
+	public void getHeading(CMGroupImpl group) {
 		if (group == null)
 			return;
 
@@ -826,7 +721,7 @@
 	 * into a <code>CMGroupImpl</code> instance.
 	 * @param group CMGroupImpl Return values.
 	 */
-	public final void getInline(CMGroupImpl group) {
+	public void getInline(CMGroupImpl group) {
 		if (group == null)
 			return;
 		getFontstyle(group);
@@ -839,7 +734,7 @@
 	 * %list;.
 	 * @param group CMGroupImpl Return values.
 	 */
-	public final void getList(CMGroupImpl group) {
+	public void getList(CMGroupImpl group) {
 		if (group == null)
 			return;
 
@@ -851,7 +746,7 @@
 	 * instance.<br>
 	 * @param group CMGroupImpl Return values.
 	 */
-	public final void getPhrase(CMGroupImpl group) {
+	public void getPhrase(CMGroupImpl group) {
 		if (group == null)
 			return;
 		getDeclarations(group, Arrays.asList(PHRASE).iterator());
@@ -861,7 +756,7 @@
 	 * %preformatted;
 	 * @param group CMGroupImpl Return values.
 	 */
-	public final void getPreformatted(CMGroupImpl group) {
+	public void getPreformatted(CMGroupImpl group) {
 		if (group == null)
 			return;
 
@@ -873,9 +768,122 @@
 	 * instance.<br>
 	 * @param group CMGroupImpl Return values.
 	 */
-	public final void getSpecial(CMGroupImpl group) {
+	public void getSpecial(CMGroupImpl group) {
 		if (group == null)
 			return;
 		getDeclarations(group, Arrays.asList(SPECIAL).iterator());
 	}
+
+	private static String[] getNames() {
+		if (fNames == null) {
+			fNames = new String[Ids.getNumOfIds()];
+			fNames[Ids.ID_A] = A;
+			fNames[Ids.ID_ABBR] = ABBR;
+			fNames[Ids.ID_ACRONYM] = ACRONYM;
+			fNames[Ids.ID_ADDRESS] = ADDRESS;
+			fNames[Ids.ID_APPLET] = APPLET;
+			fNames[Ids.ID_AREA] = AREA;
+			fNames[Ids.ID_B] = B;
+			fNames[Ids.ID_BASE] = BASE;
+			fNames[Ids.ID_BASEFONT] = BASEFONT;
+			fNames[Ids.ID_BDO] = BDO;
+			fNames[Ids.ID_BIG] = BIG;
+			fNames[Ids.ID_BLINK] = BLINK;
+			fNames[Ids.ID_BLOCKQUOTE] = BLOCKQUOTE;
+			fNames[Ids.ID_BODY] = BODY;
+			fNames[Ids.ID_BR] = BR;
+			fNames[Ids.ID_BUTTON] = BUTTON;
+			fNames[Ids.ID_CAPTION] = CAPTION;
+			fNames[Ids.ID_CENTER] = CENTER;
+			fNames[Ids.ID_CITE] = CITE;
+			fNames[Ids.ID_CODE] = CODE;
+			fNames[Ids.ID_COL] = COL;
+			fNames[Ids.ID_COLGROUP] = COLGROUP;
+			fNames[Ids.ID_DD] = DD;
+			fNames[Ids.ID_DEL] = DEL;
+			fNames[Ids.ID_DFN] = DFN;
+			fNames[Ids.ID_DIR] = DIR;
+			fNames[Ids.ID_DIV] = DIV;
+			fNames[Ids.ID_DL] = DL;
+			fNames[Ids.ID_DT] = DT;
+			fNames[Ids.ID_EM] = EM;
+			fNames[Ids.ID_EMBED] = EMBED;
+			fNames[Ids.ID_FIELDSET] = FIELDSET;
+			fNames[Ids.ID_FONT] = FONT;
+			fNames[Ids.ID_FORM] = FORM;
+			fNames[Ids.ID_FRAME] = FRAME;
+			fNames[Ids.ID_FRAMESET] = FRAMESET;
+			fNames[Ids.ID_H1] = H1;
+			fNames[Ids.ID_H2] = H2;
+			fNames[Ids.ID_H3] = H3;
+			fNames[Ids.ID_H4] = H4;
+			fNames[Ids.ID_H5] = H5;
+			fNames[Ids.ID_H6] = H6;
+			fNames[Ids.ID_HEAD] = HEAD;
+			fNames[Ids.ID_HR] = HR;
+			fNames[Ids.ID_HTML] = HTML;
+			fNames[Ids.ID_I] = I;
+			fNames[Ids.ID_IFRAME] = IFRAME;
+			fNames[Ids.ID_IMG] = IMG;
+			fNames[Ids.ID_INPUT] = INPUT;
+			fNames[Ids.ID_INS] = INS;
+			fNames[Ids.ID_ISINDEX] = ISINDEX;
+			fNames[Ids.ID_KBD] = KBD;
+			fNames[Ids.ID_LABEL] = LABEL;
+			fNames[Ids.ID_LEGEND] = LEGEND;
+			fNames[Ids.ID_LI] = LI;
+			fNames[Ids.ID_LINK] = LINK;
+			fNames[Ids.ID_MAP] = MAP;
+			fNames[Ids.ID_MENU] = MENU;
+			fNames[Ids.ID_META] = META;
+			fNames[Ids.ID_NOEMBED] = NOEMBED;
+			fNames[Ids.ID_NOFRAMES] = NOFRAMES;
+			fNames[Ids.ID_NOSCRIPT] = NOSCRIPT;
+			fNames[Ids.ID_OBJECT] = OBJECT;
+			fNames[Ids.ID_OL] = OL;
+			fNames[Ids.ID_OPTGROUP] = OPTGROUP;
+			fNames[Ids.ID_OPTION] = OPTION;
+			fNames[Ids.ID_P] = P;
+			fNames[Ids.ID_PARAM] = PARAM;
+			fNames[Ids.ID_PRE] = PRE;
+			fNames[Ids.ID_Q] = Q;
+			fNames[Ids.ID_S] = S;
+			fNames[Ids.ID_SAMP] = SAMP;
+			fNames[Ids.ID_SCRIPT] = SCRIPT;
+			fNames[Ids.ID_SELECT] = SELECT;
+			fNames[Ids.ID_SMALL] = SMALL;
+			fNames[Ids.ID_SPAN] = SPAN;
+			fNames[Ids.ID_STRIKE] = STRIKE;
+			fNames[Ids.ID_STRONG] = STRONG;
+			fNames[Ids.ID_STYLE] = STYLE;
+			fNames[Ids.ID_SUB] = SUB;
+			fNames[Ids.ID_SUP] = SUP;
+			fNames[Ids.ID_TABLE] = TABLE;
+			fNames[Ids.ID_TBODY] = TBODY;
+			fNames[Ids.ID_TD] = TD;
+			fNames[Ids.ID_TEXTAREA] = TEXTAREA;
+			fNames[Ids.ID_TFOOT] = TFOOT;
+			fNames[Ids.ID_TH] = TH;
+			fNames[Ids.ID_THEAD] = THEAD;
+			fNames[Ids.ID_TITLE] = TITLE;
+			fNames[Ids.ID_TR] = TR;
+			fNames[Ids.ID_TT] = TT;
+			fNames[Ids.ID_U] = U;
+			fNames[Ids.ID_UL] = UL;
+			fNames[Ids.ID_VAR] = VAR;
+			fNames[Ids.ID_MARQUEE] = MARQUEE;
+			fNames[Ids.ID_SSI_CONFIG] = SSI_CONFIG;
+			fNames[Ids.ID_SSI_ECHO] = SSI_ECHO;
+			fNames[Ids.ID_SSI_EXEC] = SSI_EXEC;
+			fNames[Ids.ID_SSI_FSIZE] = SSI_FSIZE;
+			fNames[Ids.ID_SSI_FLASTMOD] = SSI_FLASTMOD;
+			fNames[Ids.ID_SSI_INCLUDE] = SSI_INCLUDE;
+			fNames[Ids.ID_SSI_PRINTENV] = SSI_PRINTENV;
+			fNames[Ids.ID_SSI_SET] = SSI_SET;
+			fNames[Ids.ID_BGSOUND] = BGSOUND;
+			fNames[Ids.ID_NOBR] = NOBR;
+			fNames[Ids.ID_WBR] = WBR;
+		}
+		return fNames;
+	}
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/H5CMDocImpl.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/H5CMDocImpl.java
new file mode 100644
index 0000000..e16c9dd
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/H5CMDocImpl.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNamespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+/**
+ * CMDocument implementation for the HTML.
+ */
+class H5CMDocImpl extends CMNodeImpl implements HTMLCMDocument {
+
+	/** Namespace for all names of elements, entities and attributes. */
+	private CMNamespaceImpl namespace = null;
+	private HTML5ElementCollection elements = null;
+	private EntityCollection entities = null;
+	private AttributeCollection attributes = null;
+
+	/**
+	 */
+	public H5CMDocImpl(String docTypeName, CMNamespaceImpl targetNamespace) {
+		super(docTypeName);
+		namespace = targetNamespace;
+		
+		attributes = new HTML5AttributeCollection();
+		elements = new HTML5ElementCollection(attributes);
+		entities = new EntityCollection();
+	}
+
+	AttributeCollection getAttributes() {
+		return attributes;
+	}
+
+	public HTMLElementDeclaration getElementDeclaration(String elementName) {
+		if (elements == null)
+			return null;
+		return (HTMLElementDeclaration) elements.getNamedItem(elementName);
+	}
+
+	/**
+	 * @see org.eclipse.wst.xml.core.internal.contentmodel.CMDocument
+	 */
+	public CMNamedNodeMap getElements() {
+		return elements;
+	}
+
+	/**
+	 * @see org.eclipse.wst.xml.core.internal.contentmodel.CMDocument
+	 */
+	public CMNamedNodeMap getEntities() {
+		return entities;
+	}
+
+	public HTMLEntityDeclaration getEntityDeclaration(String entityName) {
+		if (entities == null)
+			return null;
+		return (HTMLEntityDeclaration) entities.getNamedItem(entityName);
+	}
+
+	/**
+	 * @see org.eclipse.wst.xml.core.internal.contentmodel.CMDocument
+	 */
+	public CMNamespace getNamespace() {
+		return namespace;
+	}
+
+	/**
+	 * @see CMNode
+	 */
+	public int getNodeType() {
+		return CMNode.DOCUMENT;
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTML5AttributeCollection.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTML5AttributeCollection.java
new file mode 100644
index 0000000..9622122
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTML5AttributeCollection.java
@@ -0,0 +1,1332 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
+
+public class HTML5AttributeCollection extends AttributeCollection implements HTML50Namespace {
+	/** html5 core attribs */
+	private static final String[] CORE = {ATTR_NAME_ACCESSKEY, ATTR_NAME_CLASS, ATTR_NAME_CONTENT_EDITABLE, ATTR_NAME_CONTEXT_MENU, ATTR_NAME_DIR, ATTR_NAME_DRAGGABLE, ATTR_NAME_HIDDEN, ATTR_NAME_ID, ATTR_NAME_LANG, ATTR_NAME_SPELLCHECK,ATTR_NAME_STYLE, ATTR_NAME_TABINDEX, ATTR_NAME_TITLE};
+	/** events for HTML5. */
+	private static final String[] EVENTS = {ATTR_NAME_ONABORT, ATTR_NAME_ONBLUR, ATTR_NAME_ONCAN_PLAY, ATTR_NAME_ONCAN_PLAY_THROUGH, ATTR_NAME_ONCHANGE, ATTR_NAME_ONCLICK, ATTR_NAME_ONCONTEXT_MENU, ATTR_NAME_ONDBLCLICK, ATTR_NAME_ONDRAG, ATTR_NAME_ONDRAG_END, ATTR_NAME_ONDRAG_ENTER, ATTR_NAME_ONDRAG_LEAVE, 
+		ATTR_NAME_ONDRAG_OVER, ATTR_NAME_ONDRAG_START, ATTR_NAME_ONDROP, ATTR_NAME_ONDURATION_CHANGE, ATTR_NAME_ONEMPTIED, ATTR_NAME_ONENDED, ATTR_NAME_ONERROR, ATTR_NAME_ONFOCUS, ATTR_NAME_ONFORM_CHANGE, ATTR_NAME_ONFORM_INPUT, ATTR_NAME_ONINVALID,ATTR_NAME_ONKEYPRESS, ATTR_NAME_ONKEYDOWN, ATTR_NAME_ONKEYUP, 
+		ATTR_NAME_ONLOAD, ATTR_NAME_ONLOAD_START, ATTR_NAME_ONLOADED_DATA, ATTR_NAME_ONLOADED_METADATA, ATTR_NAME_ONMOUSEDOWN, ATTR_NAME_ONMOUSEUP, ATTR_NAME_ONMOUSEOVER, ATTR_NAME_ONMOUSEMOVE, ATTR_NAME_ONMOUSEOUT, ATTR_NAME_ONMOUSE_WHEEL, ATTR_NAME_ONPAUSE, ATTR_NAME_ONPLAY, ATTR_NAME_ONPLAYING, ATTR_NAME_ONPROGRESS,
+		ATTR_NAME_ONRATE_CHANGE, ATTR_NAME_ONREADY_STATE_CHANGE, ATTR_NAME_ONSCROLL, ATTR_NAME_ONSEEKED, ATTR_NAME_ONSEEKING, ATTR_NAME_ONSELECT, ATTR_NAME_ONSHOW, ATTR_NAME_ONSTALLED, ATTR_NAME_ONSUBMIT, ATTR_NAME_ONSUSPEND, ATTR_NAME_ONTIME_UPDATE, ATTR_NAME_ONVOLUME_UPDATE, ATTR_NAME_ONWAITING};
+
+	protected HTMLAttrDeclImpl create(String attrName) {
+		HTMLAttrDeclImpl attr = null;
+		HTMLCMDataTypeImpl atype = null;
+		if (attrName.equalsIgnoreCase(ATTR_NAME_AUTOFOCUS)) {
+			// (disabled (disabled) #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			// boolean attribute must have the same value as its name.
+			String[] values = {ATTR_NAME_AUTOFOCUS};
+			atype.setEnumValues(values);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_AUTOFOCUS, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_CONTENT_EDITABLE)) {
+			// (contenteditable (EMPTY|TRUE|FALSE|INHERIT) TRUE)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_EMPTY, ATTR_VALUE_TRUE, ATTR_VALUE_FALSE, ATTR_VALUE_INHERIT};
+			atype.setEnumValues(values);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_TRUE);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_CONTENT_EDITABLE, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_CHALLENGE)) {
+			// (challenge CDATA; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_CHALLENGE, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_CONTEXT_MENU)) {
+			// (contextmenu, CDATA, IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_CONTEXT_MENU, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_DRAGGABLE)) {
+			// (draggable (TRUE|FALSE|AUTO) TRUE)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_TRUE, ATTR_VALUE_FALSE, ATTR_VALUE_AUTO};
+			atype.setEnumValues(values);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_FALSE);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_DRAGGABLE, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_FORM)) {
+			// (form CDATA; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORM, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_KEYTYPE)) {
+			// (keytype CDATA; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_KEYTYPE, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_LOW)) {
+			atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_LOW, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_HIGH)) {
+			atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_HIGH, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_OPTIMUM)) {
+			atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_OPTIMUM, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_MIN)) {
+			atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_MIN, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_MAX)) {
+			atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_MAX, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_OPEN)) {
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			atype.setEnumValues(new String[] { ATTR_NAME_OPEN });
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_OPEN, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_PUBDATE)) {
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			atype.setEnumValues(new String[] { ATTR_NAME_PUBDATE });
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_PUBDATE, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_SPELLCHECK)) {
+			// (spellcheck (EMPTY|TRUE|FALSE) TRUE)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_EMPTY, ATTR_VALUE_TRUE, ATTR_VALUE_FALSE};
+			atype.setEnumValues(values);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_FALSE);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SPELLCHECK, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONABORT)) {
+			// (onabort %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONABORT, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONCAN_PLAY)) {
+			// (oncanplay %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONCAN_PLAY, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONCAN_PLAY_THROUGH)) {
+			// (oncanplaythrough %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONCAN_PLAY_THROUGH, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONCHANGE)) {
+			// (onchange %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONCHANGE, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONCONTEXT_MENU)) {
+			// (onacontextmenu %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONCONTEXT_MENU, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONDRAG)) {
+			// (onadrag %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONDRAG, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONDRAG_END)) {
+			// (ondragend %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONDRAG_END, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONDRAG_ENTER)) {
+			// (ondragenter %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONDRAG_ENTER, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONDRAG_LEAVE)) {
+			// (ondragleave %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONDRAG_LEAVE, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONDRAG_OVER)) {
+			// (ondragover %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONDRAG_OVER, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONDRAG_START)) {
+			// (ondragstart %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONDRAG_START, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONDROP)) {
+			// (ondrop %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONDROP, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONDURATION_CHANGE)) {
+			// (ondurationchange %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONDURATION_CHANGE, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONEMPTIED)) {
+			// (onemptied %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONEMPTIED, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONENDED)) {
+			// (onended %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONENDED, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONERROR)) {
+			// (onerror %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONERROR, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONFOCUS)) {
+			// (onfocus %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONFOCUS, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONFORM_CHANGE)) {
+			// (onformchange %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONFORM_CHANGE, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONFORM_INPUT)) {
+			// (onforminput %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONFORM_INPUT, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONINPUT)) {
+			// (oninput %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONINPUT, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONINVALID)) {
+			// (oninvalid %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONINVALID, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONLOAD)) {
+			// (onload %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONLOAD, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONLOAD_START)) {
+			// (onloadstart %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONLOAD_START, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONLOADED_DATA)) {
+			// (onloadeddata %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONLOADED_DATA, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONLOADED_METADATA)) {
+			// (onloadedmetadata %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONLOADED_METADATA, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONMOUSE_WHEEL)) {
+			// (onmousewheel %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONMOUSE_WHEEL, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONPLAY)) {
+			// (onplay %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONPLAY, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONPLAYING)) {
+			// (onplaying %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONPLAYING, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONPAUSE)) {
+			// (onpause %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONPAUSE, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONPROGRESS)) {
+			// (onprogress %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONPROGRESS, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONRATE_CHANGE)) {
+			// (onratechange %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONRATE_CHANGE, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONREADY_STATE_CHANGE)) {
+			// (onreadystatechange %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONREADY_STATE_CHANGE, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONSCROLL)) {
+			// (onscroll %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONSCROLL, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONSEEKED)) {
+			// (onseeked %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONSEEKED, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONSEEKING)) {
+			// (onseeking %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONSEEKING, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONSELECT)) {
+			// (onselect %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONSELECT, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONSHOW)) {
+			// (onshow %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONSHOW, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONSTALLED)) {
+			// (onstalled %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONSTALLED, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONSUBMIT)) {
+			// (onsubmit %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONSUBMIT, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONSUSPEND)) {
+			// (onsuspend %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONSUSPEND, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONTIME_UPDATE)) {
+			// (ontimeupdate %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONTIME_UPDATE, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONVOLUME_UPDATE)) {
+			// (onvolumeupdate %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONVOLUME_UPDATE, atype, CMAttributeDeclaration.OPTIONAL);
+
+		}
+		else if (attrName.equalsIgnoreCase(ATTR_NAME_ONWAITING)) {
+			// (onwaiting %Script; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.SCRIPT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ONWAITING, atype, CMAttributeDeclaration.OPTIONAL);
+		}
+		else {
+			attr = super.create(attrName);
+		}
+		return attr;
+	}
+
+	public void getAttrs(CMNamedNodeMapImpl declarations) {
+		// %coreattrs;
+		getCore(declarations);
+		// %events;
+		getEvents(declarations);
+	}
+
+	public void getCore(CMNamedNodeMapImpl declarations) {
+		Iterator names = Arrays.asList(CORE).iterator();
+		getDeclarations(declarations, names);
+	}
+
+	public void getEvents(CMNamedNodeMapImpl declarations) {
+		Iterator names = Arrays.asList(EVENTS).iterator();
+		getDeclarations(declarations, names);
+	}
+	
+	public void createAttributeDeclarations(String elementName, CMNamedNodeMapImpl attributes) {
+		/* (type %InputType; TEXT) ... should be defined locally.
+		 * (name CDATA #IMPLIED)
+		 * (value CDATA #IMPLIED)
+		 * (checked (checked) #IMPLIED)
+		 * (disabled (disabled) #IMPLIED)
+		 * (readonly (readonly) #IMPLIED)
+		 * (size CDATA #IMPLIED) ... should be defined locally.
+		 * (maxlength NUMBER #IMPLIED)
+		 * (src %URI; #IMPLIED)
+		 * (alt CDATA #IMPLIED) ... should be defined locally.
+		 * (accept %ContentTypes; #IMPLIED)
+		 * (width CDATA; #IMPLIED)
+		 * (height CDATA; #IMPLIED)
+		 * (autocomplete Boolean; #IMPLIED)
+		 * (autofocus Boolean; #IMPLIED)
+		 * (form CDATA; #IMPLIED)
+		 * (formaction)
+		 * (formenctype)
+		 * (formmethod)
+		 * (formnovalidate)
+		 * (formtarget)
+		 * (list)
+		 * (max)
+		 * (min)
+		 * (multiple)
+		 * (pattern)
+		 * (placeholder CDATA #IMPLIED)
+		 * (required)
+		 * (step)
+		 * discouraged tags :- 
+		 * (usemap %URI; #IMPLIED)
+		 * (ismap (ismap) #IMPLIED)
+		 */
+		if (elementName.equals(HTML40Namespace.ElementName.INPUT)){
+			HTMLCMDataTypeImpl atype = null;
+			HTMLAttrDeclImpl attr = null;
+			// (type %InputType; TEXT) ... should be defined locally.
+			// NOTE: %InputType is ENUM;
+			// (text | password | checkbox | radio | submit | reset |
+			//  file | hidden | image | button
+			//  color| date | time | datetime | datetime-local | month | week| email| 
+			//  number | range | search | tel)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_TEXT, ATTR_VALUE_PASSWORD, ATTR_VALUE_CHECKBOX, ATTR_VALUE_RADIO, ATTR_VALUE_SUBMIT, ATTR_VALUE_RESET, ATTR_VALUE_FILE, ATTR_VALUE_HIDDEN, ATTR_VALUE_IMAGE, ATTR_VALUE_BUTTON,
+					 ATTR_VALUE_COLOR, ATTR_VALUE_DATE, ATTR_VALUE_DATETIME, ATTR_VALUE_DATETIME_LOCAL, ATTR_VALUE_EMAIL, ATTR_VALUE_MONTH, ATTR_VALUE_NUMBER, ATTR_VALUE_RANGE, ATTR_VALUE_SEARCH, ATTR_VALUE_TEL, ATTR_VALUE_TIME};
+			atype.setEnumValues(values);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_TEXT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+
+			// (size CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SIZE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_SIZE, attr);
+
+			// (alt CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ALT, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_ALT, attr);
+			
+			
+			// (type %autocomeplete; ) ... should be defined locally.
+			// NOTE: %autocomeplete is ENUM;
+			// (on | off)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] autoCompleteValues = {ATTR_VALUE_ON, ATTR_VALUE_OFF};
+			atype.setEnumValues(autoCompleteValues);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_AUTOCOMPLETE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_AUTOCOMPLETE, attr);
+
+			
+			// (form CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORM, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORM, attr);
+			
+			
+			// (formaction URI #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORMACTION, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORMACTION, attr);
+
+			
+			// (type %formmethod; GET) ... should be defined locally.
+			// NOTE: %formmethod is ENUM;
+			// (GET|POST|PUT|DELETE)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] formMethodValues = {ATTR_VALUE_GET, ATTR_VALUE_POST, ATTR_VALUE_PUT, ATTR_VALUE_DELETE};
+			atype.setEnumValues(formMethodValues);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_GET);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORMMETHOD, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORMMETHOD, attr);
+
+			// (type %formenctype; GET) ... should be defined locally.
+			// NOTE: %formenctype is ENUM;
+			// (application/x-www-form-urlencoded| multipart/form-data| text/plain)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] formEncTypeValues = {ATTR_VALUE_WWW_FORM_URLENCODED, ATTR_VALUE_FORM_DATA, ATTR_VALUE_PLAIN};
+			atype.setEnumValues(formEncTypeValues);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_WWW_FORM_URLENCODED);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORMENCTYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORMENCTYPE, attr);
+
+			// (formtarget BROWSEING CONTEXT #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.BROWSING_CONTEXT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORMTARGET, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORMTARGET, attr);
+			
+			// (formtnovalidate  #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			// boolean attribute must have the same value as its name.
+			String[] formNoValidateValues = {ATTR_NAME_FORMNOVALIDATE};
+			atype.setEnumValues(formNoValidateValues);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORMNOVALIDATE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORMNOVALIDATE, attr);
+
+		
+			// (list ID #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.ID);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_LIST, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_LIST, attr);
+
+			// (min CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_MIN, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_MIN, attr);
+
+			// (max CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_MAX, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_MAX, attr);
+
+			// (maxlength NUMBER #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_MAXLENGTH, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_MAXLENGTH, attr);
+
+			// (multiple  #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			// boolean attribute must have the same value as its name.
+			String[] multipleValues = {ATTR_NAME_MULTIPLE};
+			atype.setEnumValues(multipleValues);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_MULTIPLE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_MULTIPLE, attr);
+
+		
+			// (step CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_STEP, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_STEP, attr);
+
+			// (placeholder CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.TEXT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_PLACEHOLDER, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_PLACEHOLDER, attr);
+
+			// (pattern CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_PATTERN, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_PATTERN, attr);
+
+			// (required  #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			// boolean attribute must have the same value as its name.
+			String[] requiredValues = {ATTR_NAME_REQUIRED};
+			atype.setEnumValues(requiredValues);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_REQUIRED, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_REQUIRED, attr);
+
+			String[] names = {ATTR_NAME_NAME, ATTR_NAME_VALUE, ATTR_NAME_CHECKED, ATTR_NAME_DISABLED, ATTR_NAME_READONLY, ATTR_NAME_SIZE, ATTR_NAME_MAXLENGTH, ATTR_NAME_SRC, ATTR_NAME_ALT, ATTR_NAME_ACCEPT, //<<D215684
+						ATTR_NAME_WIDTH, ATTR_NAME_HEIGHT,			//<D215684
+				//html5
+						ATTR_NAME_AUTOFOCUS
+			};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+			//discouraged
+			// (ismap (ismap) #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] ismapValues = {ATTR_NAME_ISMAP};
+			atype.setEnumValues(ismapValues);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ISMAP, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_ISMAP, attr);
+			
+			// (usemap %URI; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_USEMAP, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_USEMAP, attr);
+
+			
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+		}
+		/* (href %URI; #IMPLIED)
+		 * (hreflang %LanguageCode; #IMPLIED)
+		 * (type %ContentType; #IMPLIED): should be defined locally.
+		 * (rel %LinkTypes; #IMPLIED)
+		 * (media %MediaDesc; #IMPLIED)
+		 * // discouraged
+		 * (charset %Charset; #IMPLIED)
+		 * (rev %LinkTypes; #IMPLIED)
+		 * (target %FrameTarget; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.LINK)){
+			String[] names = { ATTR_NAME_TYPE, ATTR_NAME_HREF, ATTR_NAME_HREFLANG, ATTR_NAME_REL,  ATTR_NAME_MEDIA};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// (sizes %Pixels; #IMPLIED)
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.PIXELS);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_SIZES, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_SIZES, attr);
+			
+			//discouraged
+			// (charset %Charset; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CHARSET);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_CHARSET, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_CHARSET, attr);
+			
+			// (rev %LinkTypes; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.LINK_TYPES);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_REV, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_REV, attr);
+			
+			// (target %FrameTarget; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.FRAME_TARGET);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_TARGET, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_TARGET, attr);
+			
+		}
+		/* (type %ContentType; #IMPLIED)
+		 * (href %URI; #IMPLIED)
+		 * (hreflang %LanguageCode; #IMPLIED)
+		 * (target %FrameTarget; #IMPLIED)
+		 * (rel %LinkTypes; #IMPLIED)
+		 * (media %media_desc; #IMPLIED
+		 * //discouraged
+		 * (charset %Charset; #IMPLIED)
+		 * (name CDATA #IMPLIED)
+		 * (rev %LinkTypes; #IMPLIED)
+		 * (directkey %Character; #IMPLIED)
+		 * (shape %Shape; rect)
+		 * (coords %Coords; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.A)){
+			String[] names = { ATTR_NAME_MEDIA, ATTR_NAME_TYPE, ATTR_NAME_HREF, ATTR_NAME_HREFLANG, ATTR_NAME_REL};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+			
+			
+			//discouraged
+			// (charset %Charset; #IMPLIED)
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CHARSET);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_CHARSET, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_CHARSET, attr);
+			
+			// (rev %LinkTypes; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.LINK_TYPES);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_REV, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_REV, attr);
+			
+			// (target %FrameTarget; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.FRAME_TARGET);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_TARGET, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_TARGET, attr);
+			
+			// (directkey %Character; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CHARACTER);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_DIRECTKEY, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_DIRECTKEY, attr);
+			
+			// (shape %Shape; rect): %Shape; is (rect|circle|poly|default).
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_RECT, ATTR_VALUE_CIRCLE, ATTR_VALUE_POLY, ATTR_VALUE_DEFAULT};
+			atype.setEnumValues(values);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_RECT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SHAPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_SHAPE, attr);
+			
+			// (coords %Coords; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.COORDS);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_COORDS, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_COORDS, attr);
+			
+			// (name CDATA #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_NAME, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_NAME, attr);
+	
+		}
+		/*
+		 * (shape %Shape; rect)
+		 * (coords %Coords; #IMPLIED)
+		 * (href %URI; #IMPLIED)
+		 * (target %FrameTarget; #IMPLIED)
+		 * (alt %Text; #REQUIRED)
+		 * (media %media_desc; #IMPLIED)
+		 * (rel %LinkTypes; #IMPLIED)
+		 * (type %ContentType; #IMPLIED)
+		 * //disocuraged
+		 * (nohref (nohref) #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.AREA)){
+			// (media %MediaDesc; #IMPLIED)
+			String[] names = {ATTR_NAME_TYPE, ATTR_NAME_MEDIA, ATTR_NAME_SHAPE, ATTR_NAME_COORDS, ATTR_NAME_HREF, ATTR_NAME_HREFLANG, ATTR_NAME_TARGET, ATTR_NAME_ALT, ATTR_NAME_REL};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+			
+			// (nohref (nohref) #IMPLIED)
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_NAME_NOHREF};
+			atype.setEnumValues(values);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_NOHREF, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_NOHREF, attr);
+		
+		}
+		/*
+		 *  %globalattrs;
+		 * (http-equiv NAME #IMPLIED)
+		 * (name NAME #IMPLIED) ... should be defined locally.
+		 * (content CDATA #REQUIRED)
+		 * (charset %Charset; #IMPLIED)
+		 *  //discouraged
+		 * (scheme CDATA #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.META)){
+			// globalattrs;
+			getAttrs(attributes);
+
+			// (name NAME #IMPLIED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.NAME);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_NAME, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_NAME, attr);
+
+			// (content CDATA #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_CONTENT, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_CONTENT, attr);
+			
+			String[] names = {ATTR_NAME_HTTP_EQUIV, ATTR_NAME_CHARSET};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+			
+			// discouraged
+			// (scheme CDATA #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SCHEME, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_SCHEME, attr);
+			
+		}
+		/*
+		 * (src %URI; #REQUIRED): should be defined locally.
+		 * (alt %Text; #REQUIRED)
+		 * (usemap %URI; #IMPLIED)
+		 * (ismap (ismap) #IMPLIED)
+		 *  // discouraged
+		 * (longdesc %URI; #IMPLIED)
+		 * (name CDATA #IMPLIED)
+		 * (height %Length; #IMPLIED)
+		 * (width %Length; #IMPLIED)
+		 * (align %IAlign; #IMPLIED): should be defined locally.
+		 * (border %Pixels; #IMPLIED)
+		 * (hspace %Pixels; #IMPLIED)
+		 * (vspace %Pixels; #IMPLIED)
+		 * (mapfile %URI; #IMPLIED)
+	 
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.IMG)){
+			// (src %URI; #REQUIRED): should be defined locally.
+			HTMLCMDataTypeImpl atype = null;
+			HTMLAttrDeclImpl attr = null;
+			atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SRC, atype, CMAttributeDeclaration.REQUIRED);
+			attributes.putNamedItem(ATTR_NAME_SRC, attr);
+
+			String[] names = {ATTR_NAME_ALT, ATTR_NAME_LONGDESC, ATTR_NAME_NAME, ATTR_NAME_HEIGHT, ATTR_NAME_WIDTH, ATTR_NAME_USEMAP, ATTR_NAME_ISMAP, ATTR_NAME_BORDER, ATTR_NAME_HSPACE, ATTR_NAME_VSPACE, ATTR_NAME_MAPFILE};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// align (local); should be defined locally.
+			attr = AttributeCollection.createAlignForImage();
+			attributes.putNamedItem(ATTR_NAME_ALIGN, attr);
+		
+		}
+		/*
+		 * (name CDATA #REQUIRED) ... should be defined locally.
+		 * (value CDATA #IMPLIED)
+		 * global attributes
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.PARAM)){
+			
+			// (name CDATA #REQUIRED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_NAME, atype, CMAttributeDeclaration.REQUIRED);
+			attributes.putNamedItem(ATTR_NAME_NAME, attr);
+			
+			// (value CDATA #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_VALUE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_VALUE, attr);
+			
+			// gloabl attrs
+			getAttrs(attributes);
+		}
+		/*
+		 * (autofocus Boolean; #IMPLIED)
+		 * (form CDATA; #IMPLIED)
+		 * (placeholder CDATA #IMPLIED)
+		 * (name CDATA #IMPLIED)
+		 * (rows NUMBER #REQUIRED)
+		 * (cols NUMBER #REQUIRED)
+		 * (disabled (disabled) #IMPLIED)
+		 * (readonly (readonly) #IMPLIED)
+		 * (maxlength NUMBER; #IMPLIED)
+		 * (wrap ENUM; #IMPLIED)
+		 *  //discouraged
+		 * (istyle CDATA #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.TEXTAREA)){
+			String[] names = {ATTR_NAME_MAXLENGTH, ATTR_NAME_FORM, ATTR_NAME_AUTOFOCUS, ATTR_NAME_NAME, ATTR_NAME_ROWS, ATTR_NAME_COLS, ATTR_NAME_DISABLED, ATTR_NAME_READONLY};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+			
+			// (placeholder CDATA #IMPLIED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.TEXT);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_PLACEHOLDER, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_PLACEHOLDER, attr);
+			
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_SOFT, ATTR_VALUE_HARD};
+			atype.setEnumValues(values);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_SOFT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_WRAP, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_WRAP, attr);
+			
+			// discouraged
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ISTYLE, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_ISTYLE, attr);
+		}
+		/*
+		 * (charset %Charset; #IMPLIED)
+		 * (type %ContentType; #REQUIRED) ... should be defined locally.
+		 * (asynch boolean #IMPLIED)
+		 * (src %URI; #IMPLIED)
+		 * (defer (defer) #IMPLIED)
+		 *  // discouraged
+		 * (language CDATA #IMPLIED)
+		 * (event CDATA #IMPLIED)
+		 * (for %URI; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.TEXTAREA)){
+			String[] names = {ATTR_NAME_CHARSET,  ATTR_NAME_SRC, ATTR_NAME_DEFER};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// (type %ContentType; #REQUIRED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CONTENT_TYPE);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, "text/javascript"); //$NON-NLS-1$
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.REQUIRED);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+			
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_NAME_ASYNC};
+			atype.setEnumValues(values);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_ASYNC, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_ASYNC, attr);
+			
+			
+			// discouraged
+			// (language %CDATA; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_LANGUAGE, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_LANGUAGE, attr);
+			
+			// (event CDATA #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_EVENT, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_EVENT, attr);
+			
+			// (for %URI; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FOR, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_FOR, attr);
+		
+		}
+		/*
+		 *  %attrs;
+		 * (type %ContentType; #REQUIRED) ... should be defined locally.
+		 * (media %MediaDesc; #IMPLIED)
+		 * (scoped boolean; #implied)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.STYLE)){
+			// %i18n;
+			getAttrs(attributes);
+
+			String[] names = {ATTR_NAME_MEDIA};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+			// (type %ContentType; #REQUIRED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CONTENT_TYPE);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, "text/css"); //$NON-NLS-1$
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.REQUIRED);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+			
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_NAME_SCOPED};
+			atype.setEnumValues(values);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SCOPED, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_SCOPED, attr);
+		}
+		/*
+		 * %reserved;
+		 * (name CDATA #IMPLIED)
+		 * (size NUMBER #IMPLIED) ... should be defined locally.
+		 * (multiple (multiple) #IMPLIED)
+		 * (disabled (disabled) #IMPLIED)
+		 * (autofocus Boolean; #IMPLIED)
+		 * (form CDATA; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.SELECT)){
+			// (size NUMBER #IMPLIED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_SIZE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_SIZE, attr);
+
+			String[] names = {ATTR_NAME_FORM, ATTR_NAME_AUTOFOCUS,ATTR_NAME_NAME, ATTR_NAME_MULTIPLE, ATTR_NAME_DISABLED, ATTR_NAME_TABINDEX, ATTR_NAME_ONFOCUS, ATTR_NAME_ONBLUR, ATTR_NAME_ONCHANGE};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+		
+		}
+		/*
+		 * (value NUMBER #IMPLIED) ... should be defined locally.
+		 *  //discouraged
+		 *  (type %LIStyle; #IMPLIED) ... should be defined locally.
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.LI)){
+			// (type %LIStyle; #IMPLIED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.LI_STYLE);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+
+			// (value NUMBER #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_VALUE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_VALUE, attr);
+		
+		}
+		/*
+		 * (start NUMBER #IMPLIED)
+		 * (reversed BOOLEAN; IMPLIED)
+		 *   //discouraged
+		 * (type %OLStyle; #IMPLIED) ... should be defined locally.
+		 * (compact (compact) #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.OL)){
+
+			String[] names = { ATTR_NAME_START};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+			
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_NAME_REVERSED};
+			atype.setEnumValues(values);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_REVERSED, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_REVERSED, attr);
+			
+			//discouraged 
+			// (type %OLStyle; #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.OL_STYLE);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+			
+			// (compact (compact) #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] compactValues = {ATTR_NAME_COMPACT};
+			atype.setEnumValues(compactValues);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_COMPACT, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_COMPACT, attr);
+		}
+		/**
+		 * %attrs;
+		 * (src %URI; #IMPLIED)
+		 * (srcdoc %CONTENT_TYPE; #IMPLIED)
+		 * (seamless BOOLEAN; #IMPLIED)
+		 * (sandbox CDATA; #IMPLED)
+		 * (height %Length; #IMPLIED)
+		 * (width %Length; #IMPLIED)
+		 * (name CDATA #IMPLIED)
+		 * //discouraged
+		 * (longdesc %URI; #IMPLIED)
+		 * (frameborder (1|0) 1)
+		 * (marginwidth %Pixels; #IMPLIED)
+		 * (marginheight %Pixels; #IMPLIED)
+		 * (scrolling (yes|no|auto) auto)
+		 * (align %IAlign; #IMPLIED) ... should be defined locally.
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.IFRAME)){
+			// %attrs;
+			getAttrs(attributes);
+			
+			//srcdoc
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CONTENT_TYPE);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_SRCDOC, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_SRCDOC, attr);
+
+			// (seamless (seamless) #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] compactValues = {ATTR_NAME_SEAMLESS};
+			atype.setEnumValues(compactValues);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SEAMLESS, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_SEAMLESS, attr);
+		
+			//sandbox
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SANDBOX, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_SANDBOX, attr);
+			
+			
+			String[] names = { ATTR_NAME_NAME, ATTR_NAME_SRC, ATTR_NAME_HEIGHT, ATTR_NAME_WIDTH};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			//discouraged
+			// (marginwidth %Pixels; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.PIXELS);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_MARGINWIDTH, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_MARGINWIDTH, attr);
+			
+			// (marginheight %Pixels; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.PIXELS);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_MARGINHEIGHT, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_MARGINHEIGHT, attr);
+			
+			// (scrolling (yes|no|auto) auto)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_YES, ATTR_VALUE_NO, ATTR_VALUE_AUTO};
+			atype.setEnumValues(values);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_AUTO);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_SCROLLING, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_SCROLLING, attr);
+
+			// (frameborder (1|0) 1)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] frameValues = {ATTR_VALUE_1, ATTR_VALUE_0};
+			atype.setEnumValues(frameValues);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_1);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FRAMEBORDER, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_FRAMEBORDER, attr);
+			
+			// (longdesc %URI; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_LONGDESC, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_LONGDESC, attr);
+			
+			
+			// align
+			attr = AttributeCollection.createAlignForImage();
+			if (attr != null)
+				attr.obsolete(true);
+				attributes.putNamedItem(ATTR_NAME_ALIGN, attr);
+		}
+		/*
+		 * (%attrs)
+		 * (manisfest %URI; #IMPLIED)
+		 * (xmlns %URI; #IMPLIED)
+		 * //discouraged
+		 * (version CDATA #FIXED '%HTML.Version;)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.HTML)){
+			// %attrs;
+			getAttrs(attributes);
+			// (manisfest %URI; #IMPLIED)
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_MANIFEST, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_MANIFEST, attr);
+			
+			// (version CDATA #FIXED '%HTML.Version;)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_FIXED, ATTR_VALUE_VERSION_TRANSITIONAL);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_VERSION, atype, CMAttributeDeclaration.FIXED);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_VERSION, attr);
+			
+			// (xmlns CDATA #FIXED '%xmlns;)
+			atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_XMLNS, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_XMLNS, attr);
+		}
+		/*
+		 * (type enum; (context | toolbar | list))
+		 * (label %Text; #IMPLIED)
+		 *  //discouraged
+		 * (compact (compact) #IMPLIED)
+	 	 */
+		else if (elementName.equals(HTML40Namespace.ElementName.MENU)){
+			// (type %menuType; list) ... should be defined locally is ENUM.
+			//  (context | toolbar | list)
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_CONTEXT, ATTR_VALUE_TOOLBAR, ATTR_VALUE_LIST};
+			atype.setEnumValues(values);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_LIST);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+
+			// (label %Text; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.TEXT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_LABEL, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_LABEL, attr);
+
+			// (compact (compact) #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] compactValues = {ATTR_NAME_COMPACT};
+			atype.setEnumValues(compactValues);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_COMPACT, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_COMPACT, attr);
+		}
+		/*
+		 * (type %button; TEXT) ... should be defined locally.
+		 * (name CDATA #IMPLIED)
+		 * (value CDATA #IMPLIED)
+		 * (disabled (disabled) #IMPLIED)
+		 * (autofocus Boolean; #IMPLIED)
+		 * (form CDATA; #IMPLIED)
+		 * (formaction)
+		 * (formenctype)
+		 * (formmethod)
+		 * (formnovalidate)
+		 * (formtarget)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.BUTTON)){
+			// (type (button|submit|reset) submit) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_BUTTON, ATTR_VALUE_SUBMIT, ATTR_VALUE_RESET};
+			atype.setEnumValues(values);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_TYPE, attr);
+			
+
+			String[] names = {ATTR_NAME_NAME, ATTR_NAME_VALUE, ATTR_NAME_DISABLED,
+				//html5
+						ATTR_NAME_AUTOFOCUS
+			};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+			
+			// (form CDATA #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORM, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORM, attr);
+			
+			
+			// (formaction URI #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORMACTION, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORMACTION, attr);
+
+			
+			// (type %formmethod; GET) ... should be defined locally.
+			// NOTE: %formmethod is ENUM;
+			// (GET|POST|PUT|DELETE)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] formMethodValues = {ATTR_VALUE_GET, ATTR_VALUE_POST, ATTR_VALUE_PUT, ATTR_VALUE_DELETE};
+			atype.setEnumValues(formMethodValues);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_GET);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORMMETHOD, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORMMETHOD, attr);
+
+			// (type %formenctype; GET) ... should be defined locally.
+			// NOTE: %formenctype is ENUM;
+			// (application/x-www-form-urlencoded| multipart/form-data| text/plain)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] formEncTypeValues = {ATTR_VALUE_WWW_FORM_URLENCODED, ATTR_VALUE_FORM_DATA, ATTR_VALUE_PLAIN};
+			atype.setEnumValues(formEncTypeValues);
+			atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, ATTR_VALUE_WWW_FORM_URLENCODED);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORMENCTYPE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORMENCTYPE, attr);
+
+			// (formtarget BROWSEING CONTEXT #IMPLIED) ... should be defined locally.
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.BROWSING_CONTEXT);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORMTARGET, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORMTARGET, attr);
+			
+			// (formtnovalidate  #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			// boolean attribute must have the same value as its name.
+			String[] formNoValidateValues = {ATTR_NAME_FORMNOVALIDATE};
+			atype.setEnumValues(formNoValidateValues);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FORMNOVALIDATE, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORMNOVALIDATE, attr);
+
+		}
+		/*
+		 * (name CDATA #IMPLIED)
+		 * (disabled (disabled) #IMPLIED)
+		 * (form CDATA; #IMPLIED)
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.FIELDSET)){
+			// (form CDATA #IMPLIED) ... should be defined locally.
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_FORM, atype, CMAttributeDeclaration.OPTIONAL);
+			attributes.putNamedItem(ATTR_NAME_FORM, attr);
+			
+			String[] names = {ATTR_NAME_NAME, ATTR_NAME_DISABLED };
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+				
+		}
+		/*
+		 * (summary %Text; #IMPLIED)
+		 *  //discouraged
+		 * %reserved;
+		 * (width %Length; #IMPLIED)
+		 * (border %Pixels; #IMPLIED)
+		 * (frame %TFrame; #IMPLIED)
+		 * (rules %TRules; #IMPLIED)
+		 * (cellspacing %Length; #IMPLIED)
+		 * (cellpadding %Length; #IMPLIED)
+		 * (align %TAlign; #IMPLIED)
+		 * (bgcolor %Color; #IMPLIED)
+		 * (datapagesize CDATA #IMPLIED)
+		 * (height %Pixels; #IMPLIED)
+		 * (background %URI; #IMPLIED)
+		 * (bordercolor %Color #IMPLIED) ... D205514
+		 */
+		else if (elementName.equals(HTML40Namespace.ElementName.TABLE)){
+			// %reserved;
+			// ... %reserved; is empty in the current DTD.
+
+			String[] names = {ATTR_NAME_SUMMARY};
+			getDeclarations(attributes, Arrays.asList(names).iterator());
+
+			// align (local)
+			HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] alignValues = {ATTR_VALUE_LEFT, ATTR_VALUE_CENTER, ATTR_VALUE_RIGHT};
+			atype.setEnumValues(alignValues);
+			HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(ATTR_NAME_ALIGN, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_ALIGN, attr);
+			
+			// (width %Length; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.LENGTH);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_WIDTH, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_WIDTH, attr);
+			
+			// (border %Pixels; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.PIXELS);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_BORDER, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_BORDER, attr);
+			
+			// (frame %TFrame; #IMPLIED)
+			// %TFrame; is
+			// (void|above|below|hsides|lhs|rhs|vsides|box|border).
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] values = {ATTR_VALUE_VOID, ATTR_VALUE_ABOVE, ATTR_VALUE_BELOW, ATTR_VALUE_HSIDES, ATTR_VALUE_LHS, ATTR_VALUE_RHS, ATTR_VALUE_VSIDES, ATTR_VALUE_BOX, ATTR_VALUE_BORDER};
+			atype.setEnumValues(values);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_FRAME, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_FRAME, attr);
+			
+			// (rules %TRules; #IMPLIED)
+			// %TRules; is (none | groups | rows | cols | all).
+			atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+			String[] ruleValues = {ATTR_VALUE_NONE, ATTR_VALUE_GROUPS, ATTR_VALUE_ROWS, ATTR_VALUE_COLS, ATTR_VALUE_ALL};
+			atype.setEnumValues(ruleValues);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_RULES, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_RULES, attr);
+			
+			// (cellspacing %Length; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.LENGTH);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_CELLSPACING, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_CELLSPACING, attr);
+			
+			// (cellpadding %Length; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.LENGTH);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_CELLPADDING, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_CELLPADDING, attr);
+			
+			// (bgcolor %Color; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.COLOR);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_BGCOLOR, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_BGCOLOR, attr);
+			
+			// (datapagesize CDATA #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_DATAPAGESIZE, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_DATAPAGESIZE, attr);
+			
+			// (height %Length; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.LENGTH);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_HEIGHT, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_HEIGHT, attr);
+			
+			// (background %URI; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_BACKGROUND, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_BACKGROUND, attr);
+			
+			// (bordercolor, %Color; #IMPLIED)
+			atype = new HTMLCMDataTypeImpl(HTMLCMDataType.COLOR);
+			attr = new HTMLAttrDeclImpl(ATTR_NAME_BORDERCOLOR, atype, CMAttributeDeclaration.OPTIONAL);
+			attr.obsolete(true);
+			attributes.putNamedItem(ATTR_NAME_BORDERCOLOR, attr);
+			
+			
+		}
+	}
+	
+	public static String[] getGlobalAttributeList(){
+		return CORE;
+	}
+	
+	public static String[] getGlobalEventList(){
+		return EVENTS;
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTML5ElementCollection.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTML5ElementCollection.java
new file mode 100644
index 0000000..9e2d4b8
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTML5ElementCollection.java
@@ -0,0 +1,577 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Vector;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+/**
+ * Factory for element declarations.
+ */
+class HTML5ElementCollection extends ElementCollection implements org.eclipse.wst.html.core.internal.provisional.HTML50Namespace.ElementName {
+
+
+	// Element IDs
+	private static class Ids50 extends Ids {
+		// <<D205513
+		
+		public static final int ID_ARTICLE =106;
+		public static final int ID_ASIDE =107;
+		public static final int ID_AUDIO =108;
+		public static final int ID_CANVAS =109;
+		public static final int ID_COMMAND =110;
+		public static final int ID_DATALIST =111;
+		public static final int ID_DETAILS = 112;
+		public static final int ID_FIGURE =113;
+		public static final int ID_FIGCAPTION = 114;
+		public static final int ID_FOOTER =115;
+		public static final int ID_HEADER = 116;
+		public static final int ID_HGROUP =117;
+		public static final int ID_KEYGEN =118;
+		public static final int ID_MARK =119;
+		public static final int ID_MATH =120;
+		public static final int ID_METER =121;
+		public static final int ID_NAV =122;
+		public static final int ID_OUTPUT =123;
+		public static final int ID_PROGRESS =124;
+		public static final int ID_RP = 125;
+		public static final int ID_RT = 126;
+		public static final int ID_RUBY =127;
+		public static final int ID_SECTION =128;
+		public static final int ID_SOURCE = 129;
+		public static final int ID_SUMMARY = 130;
+		public static final int ID_SVG =131;
+		public static final int ID_TIME =132;
+		public static final int ID_VIDEO =133;
+
+		// D205513
+
+		public static int getNumOfIds() {
+			if (numofids != -1)
+				return numofids;
+
+			// NOTE: If the reflection is too slow, this method should
+			// just return the literal value, like 105.
+			// -- 5/25/2001
+			Class clazz = Ids50.class;
+			Field[] fields = clazz.getFields();
+			numofids = 0;
+			for (int i = 0; i < fields.length; i++) {
+				String name = fields[i].getName();
+				if (name.startsWith("ID_"))//$NON-NLS-1$
+					numofids++;
+			}
+			return numofids;
+		}
+
+		// chache the result of the reflection.
+		private static int numofids = -1;
+	}
+
+	/** %fontstyle;. TT | I | B | U | S | STRIKE | BIG | SMALL | BLINK */
+	private static final String[] FONTSTYLE = {TT, I, B, U, S, STRIKE, BIG, SMALL, BLINK};
+	/** %formctl;. INPUT | SELECT | TEXTAREA | LABEL | BUTTON */
+	private static final String[] FORMCTL = {INPUT, SELECT, TEXTAREA, LABEL, BUTTON, DATALIST};
+	/** %phrase;.
+	 * EM | STRONG | DFN | CODE | SAMP | KBD | VAR | CITE | ABBR | ACRONYM | MARK
+	 */	private static final String[] PHRASE = {KEYGEN, EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ABBR, ACRONYM, MARK};
+	/** %special;.
+	 * A | IMG | APPLET | OBJECT | FONT | BASEFONT | BR | SCRIPT |
+	 * MAP | Q | SUB | SUP | SPAN | BDO | IFRAME | EMBED | MARQUEE |
+	 * D2W | SUBMIT
+	 * WBR | NOBR | BGSOUND
+	 */
+	private static final String[] SPECIAL = {A, IMG, APPLET, OBJECT, FONT, BASEFONT, BR, WBR, // D205513
+				SCRIPT, MAP, Q, SUB, SUP, SPAN, BDO, IFRAME, EMBED, BGSOUND, // D205513
+				MARQUEE, NOBR, // D205513
+				OUTPUT, TIME, METER, PROGRESS,
+				COMMAND
+	};
+	/** %heading;. H[1-6] */
+	private static final String[] HEADING = {H1, H2, H3, H4, H5, H6};
+	/** %list;. UL | OL | DIR | MENU */
+	private static final String[] LIST = {UL, OL, DIR, MENU};
+	/** %preformatted;. PRE */
+	private static final String[] PREFORMATTED = {PRE};
+	/** %sectioning;. ARTICLE | ASIDE | NAV | SECTION */
+	private static final String[] SECTIONING = { ARTICLE, ASIDE, NAV, SECTION };
+
+	/** %embedded;. AUDIO|CANVAS|EMBED|IFRAME|IMG|MATH|OBJECT|SVG|VIDEO */
+	private static final String[] EMBEDDED = { AUDIO, CANVAS, EMBED, IFRAME, IMG, MATH, OBJECT, SVG, VIDEO};
+
+    private static String[] fNames = null;
+
+	/**
+	 */
+	public HTML5ElementCollection(AttributeCollection collection) {
+		super(getNames(), collection);
+		attributeCollection = collection;
+	}
+
+	/**
+	 * Actually creates HTMLElementDeclaration instance.
+	 * @return HTMLElementDeclaration
+	 */
+	protected CMNode create(String elementName) {
+		CMNode edec = null;
+
+		if (elementName.equalsIgnoreCase(ACRONYM)) {
+			edec = new HedPhrase(ACRONYM, this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(APPLET)) {
+			edec = new HedAPPLET(this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(ARTICLE)) {
+			edec = new HedSectioning(ARTICLE, this);
+
+		}
+		else if (elementName.equalsIgnoreCase(ASIDE)) {
+			edec = new HedSectioning(ASIDE, this);
+
+		}
+		else if (elementName.equalsIgnoreCase(AUDIO)) {
+			edec = new HedMediaElement(AUDIO, this);
+
+		}
+		else if (elementName.equalsIgnoreCase(BASEFONT)) {
+			edec = new HedBASEFONT(this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(BIG)) {
+			edec = new HedFontStyle(BIG, this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(CANVAS)) {
+			edec = new HedCANVAS(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(CENTER)) {
+			edec = new HedCENTER(this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(COMMAND)) {
+			edec = new HedCOMMAND(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(DATALIST)) {
+			edec = new HedDATALIST(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(DETAILS)) {
+			edec = new HedDETAILS(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(DIR)) {
+			edec = new HedMENU(DIR, this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(FIGCAPTION)) {
+			edec = new HedFIGCAPTION(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(FIGURE)) {
+			edec = new HedFIGURE(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(FOOTER)) {
+			edec = new HedHEADER(HTML50Namespace.ElementName.FOOTER ,this);
+
+		}
+		else if (elementName.equalsIgnoreCase(FRAME)) {
+			edec = new HedFRAME(this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(FRAMESET)) {
+			edec = new HedFRAMESET(this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(HEADER)) {
+			edec = new HedHEADER(HTML50Namespace.ElementName.HEADER ,this);
+		}
+		else if (elementName.equalsIgnoreCase(HGROUP)) {
+			edec = new HedHGROUP(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(ISINDEX)) {
+			edec = new HedISINDEX(this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(KEYGEN)) {
+			edec = new HedKEYGEN(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(MARK)) {
+			edec = new HedPhrase(HTML50Namespace.ElementName.MARK,this);
+
+		}
+		else if (elementName.equalsIgnoreCase(MATH)) {
+			edec = new HedMath(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(METER)) {
+			edec = new HedMETER(this);
+		}
+		else if (elementName.equalsIgnoreCase(NAV)) {
+			edec = new HedSectioning(NAV, this);
+		}
+		else if (elementName.equalsIgnoreCase(NOFRAMES)) {
+			edec = new HedNOFRAMES(this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(OUTPUT)) {
+			edec = new HedOUTPUT(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(PROGRESS)) {
+			edec = new HedPROGRESS(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(RP)) {
+			edec = new HedRP(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(RT)) {
+			edec = new HedRT(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(RUBY)) {
+			edec = new HedRUBY(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(S)) {
+			edec = new HedFontStyle(S, this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(SECTION)) {
+			edec = new HedSectioning(SECTION, this);
+
+		}
+		else if (elementName.equalsIgnoreCase(SOURCE)) {
+			edec = new HedSOURCE(this);
+
+		}
+		else if (elementName.equalsIgnoreCase(STRIKE)) {
+			edec = new HedFontStyle(STRIKE, this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(SUMMARY)) {
+			edec = new HedSUMMARY(this);
+		}
+		else if (elementName.equalsIgnoreCase(SVG)) {
+			edec = new HedSVG(this);
+		}
+		else if (elementName.equalsIgnoreCase(TIME)) {
+			edec = new HedTIME(this);
+		}
+		else if (elementName.equalsIgnoreCase(TT)) {
+			edec = new HedFontStyle(TT, this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(U)) {
+			edec = new HedFontStyle(U, this);
+			((HTMLElemDeclImpl) edec).obsolete(true);
+		}
+		else if (elementName.equalsIgnoreCase(VIDEO)) {
+			edec = new HedVIDEO(this);
+
+		}
+		// unknown
+		else {
+			// NOTE: We don't define the UNKNOWN element declaration.
+			// <code>null</code> for a declaration is a sign of
+			// the target element is unknown.
+			// -- 3/9/2001
+			edec = super.create(elementName);
+		}
+		return edec;
+	}
+
+	public AttributeCollection getAttributeCollection() {
+		return attributeCollection;
+	}
+
+	public final Collection getNamesOfBlock() {
+		// P, DL, DIV, CENTER, NOSCRIPT, NOFRAMES, BLOCKQUOTE, FORM, ISINDEX, HR,
+		// TABLE, FIELDSET, ADDRESS, RUBY, FIGURE
+		String[] blockMisc = {HEADER, FOOTER, HGROUP, P, DL, DIV, CENTER, NOSCRIPT, NOFRAMES, BLOCKQUOTE, FORM, ISINDEX, HR, TABLE, FIELDSET, ADDRESS, RUBY, FIGURE};
+		Vector names = new Vector(Arrays.asList(blockMisc));
+		// %heading;
+		names.addAll(Arrays.asList(HEADING));
+		// %list;
+		names.addAll(Arrays.asList(LIST));
+		// %preformatted;
+		names.addAll(Arrays.asList(PREFORMATTED));
+
+		
+		return names;
+	}
+
+	
+	public final void getSectioning(CMGroupImpl group) {
+		if (group == null)
+			return;
+		getDeclarations(group, Arrays.asList(SECTIONING).iterator());
+	}
+	
+	public void getEmbedded(CMGroupImpl group) {
+		if (group == null)
+			return;
+		getDeclarations(group, Arrays.asList(EMBEDDED).iterator());
+	}
+
+	public void getFlow(CMGroupImpl group) {
+		if (group == null)
+			return;
+		super.getFlow(group);
+		getSectioning(group);
+		CMNode node = getNamedItem(DETAILS);
+		if (node != null) {
+			group.appendChild(node);
+		}
+	}
+
+	public void getInline(CMGroupImpl group) {
+		if (group == null)
+			return;
+		super.getInline(group);
+		getEmbedded(group);
+	}
+
+	/**
+	 * Create element declarations and store them into a <code>CMGroupImpl</code>
+	 * instance.<br>
+	 * @param group CMGroupImpl Return values.
+	 */
+	public final void getFontstyle(CMGroupImpl group) {
+		if (group == null)
+			return;
+		getDeclarations(group, Arrays.asList(FONTSTYLE).iterator());
+	}
+
+	/**
+	 * Create element declarations and store them into a <code>CMGroupImpl</code>
+	 * instance.<br>
+	 * @param group CMGroupImpl Return values.
+	 */
+	public final void getFormctrl(CMGroupImpl group) {
+		if (group == null)
+			return;
+		getDeclarations(group, Arrays.asList(FORMCTL).iterator());
+	}
+
+	/**
+	 * %heading;.
+	 * @param group CMGroupImpl Return values.
+	 */
+	public final void getHeading(CMGroupImpl group) {
+		if (group == null)
+			return;
+
+		getDeclarations(group, Arrays.asList(HEADING).iterator());
+	}
+
+	
+
+	/**
+	 * %list;.
+	 * @param group CMGroupImpl Return values.
+	 */
+	public final void getList(CMGroupImpl group) {
+		if (group == null)
+			return;
+
+		getDeclarations(group, Arrays.asList(LIST).iterator());
+	}
+
+	/**
+	 * Create element declarations and store them into a <code>CMGroupImpl</code>
+	 * instance.<br>
+	 * @param group CMGroupImpl Return values.
+	 */
+	public final void getPhrase(CMGroupImpl group) {
+		if (group == null)
+			return;
+		getDeclarations(group, Arrays.asList(PHRASE).iterator());
+	}
+
+	/**
+	 * %preformatted;
+	 * @param group CMGroupImpl Return values.
+	 */
+	public final void getPreformatted(CMGroupImpl group) {
+		if (group == null)
+			return;
+
+		getDeclarations(group, Arrays.asList(PREFORMATTED).iterator());
+	}
+
+	/**
+	 * Create element declarations and store them into a <code>CMGroupImpl</code>
+	 * instance.<br>
+	 * @param group CMGroupImpl Return values.
+	 */
+	public final void getSpecial(CMGroupImpl group) {
+		if (group == null)
+			return;
+		getDeclarations(group, Arrays.asList(SPECIAL).iterator());
+	}
+
+	private static String[] getNames() {
+		if (fNames == null) {
+			fNames = new String[Ids50.getNumOfIds()];
+			fNames[Ids.ID_A] = A;
+			fNames[Ids.ID_ABBR] = ABBR;
+			fNames[Ids.ID_ACRONYM] = ACRONYM;
+			fNames[Ids.ID_ADDRESS] = ADDRESS;
+			fNames[Ids.ID_APPLET] = APPLET;
+			fNames[Ids.ID_AREA] = AREA;
+			fNames[Ids50.ID_ARTICLE] = ARTICLE;
+			fNames[Ids50.ID_ASIDE] = ASIDE;
+			fNames[Ids50.ID_AUDIO] = AUDIO;
+			fNames[Ids.ID_B] = B;
+			fNames[Ids.ID_BASE] = BASE;
+			fNames[Ids.ID_BASEFONT] = BASEFONT;
+			fNames[Ids.ID_BDO] = BDO;
+			fNames[Ids.ID_BIG] = BIG;
+			fNames[Ids.ID_BLINK] = BLINK;
+			fNames[Ids.ID_BLOCKQUOTE] = BLOCKQUOTE;
+			fNames[Ids.ID_BODY] = BODY;
+			fNames[Ids.ID_BR] = BR;
+			fNames[Ids.ID_BUTTON] = BUTTON;
+			fNames[Ids.ID_CAPTION] = CAPTION;
+			fNames[Ids50.ID_CANVAS] = CANVAS;
+			fNames[Ids.ID_CENTER] = CENTER;
+			fNames[Ids.ID_CITE] = CITE;
+			fNames[Ids.ID_CODE] = CODE;
+			fNames[Ids.ID_COL] = COL;
+			fNames[Ids.ID_COLGROUP] = COLGROUP;
+			fNames[Ids50.ID_COMMAND] = COMMAND;
+			fNames[Ids50.ID_DATALIST] = DATALIST;
+			fNames[Ids50.ID_DETAILS] = DETAILS;
+			fNames[Ids.ID_DD] = DD;
+			fNames[Ids.ID_DEL] = DEL;
+			fNames[Ids.ID_DFN] = DFN;
+			fNames[Ids.ID_DIR] = DIR;
+			fNames[Ids.ID_DIV] = DIV;
+			fNames[Ids.ID_DL] = DL;
+			fNames[Ids.ID_DT] = DT;
+			fNames[Ids.ID_EM] = EM;
+			fNames[Ids.ID_EMBED] = EMBED;
+			fNames[Ids.ID_FIELDSET] = FIELDSET;
+			fNames[Ids50.ID_FIGURE] = FIGURE;
+			fNames[Ids50.ID_FIGCAPTION] = FIGCAPTION;
+			fNames[Ids.ID_FONT] = FONT;
+			fNames[Ids.ID_FORM] = FORM;
+			fNames[Ids50.ID_FOOTER] = FOOTER;
+			fNames[Ids.ID_FRAME] = FRAME;
+			fNames[Ids.ID_FRAMESET] = FRAMESET;
+			fNames[Ids.ID_H1] = H1;
+			fNames[Ids.ID_H2] = H2;
+			fNames[Ids.ID_H3] = H3;
+			fNames[Ids.ID_H4] = H4;
+			fNames[Ids.ID_H5] = H5;
+			fNames[Ids.ID_H6] = H6;
+			fNames[Ids.ID_HEAD] = HEAD;
+			fNames[Ids50.ID_HEADER] = HEADER;
+			fNames[Ids50.ID_HGROUP] = HGROUP;
+			fNames[Ids.ID_HR] = HR;
+			fNames[Ids.ID_HTML] = HTML;
+			fNames[Ids.ID_I] = I;
+			fNames[Ids.ID_IFRAME] = IFRAME;
+			fNames[Ids.ID_IMG] = IMG;
+			fNames[Ids.ID_INPUT] = INPUT;
+			fNames[Ids.ID_INS] = INS;
+			fNames[Ids.ID_ISINDEX] = ISINDEX;
+			fNames[Ids.ID_KBD] = KBD;
+			fNames[Ids50.ID_KEYGEN] = KEYGEN;
+			fNames[Ids.ID_LABEL] = LABEL;
+			fNames[Ids.ID_LEGEND] = LEGEND;
+			fNames[Ids.ID_LI] = LI;
+			fNames[Ids.ID_LINK] = LINK;
+			fNames[Ids.ID_MAP] = MAP;
+			fNames[Ids50.ID_MARK] = MARK;
+			fNames[Ids.ID_MARQUEE] = MARQUEE;
+			fNames[Ids50.ID_MATH] = MATH;
+			fNames[Ids.ID_MENU] = MENU;
+			fNames[Ids.ID_META] = META;
+			fNames[Ids50.ID_METER] = METER;
+			fNames[Ids50.ID_NAV] = NAV;
+			fNames[Ids.ID_NOEMBED] = NOEMBED;
+			fNames[Ids.ID_NOFRAMES] = NOFRAMES;
+			fNames[Ids.ID_NOSCRIPT] = NOSCRIPT;
+			fNames[Ids.ID_OBJECT] = OBJECT;
+			fNames[Ids.ID_OL] = OL;
+			fNames[Ids.ID_OPTGROUP] = OPTGROUP;
+			fNames[Ids.ID_OPTION] = OPTION;
+			fNames[Ids50.ID_OUTPUT] = OUTPUT;
+			fNames[Ids.ID_P] = P;
+			fNames[Ids.ID_PARAM] = PARAM;
+			fNames[Ids.ID_PRE] = PRE;
+			fNames[Ids50.ID_PROGRESS] = PROGRESS;
+			fNames[Ids.ID_Q] = Q;
+			fNames[Ids50.ID_RP] = RP;
+			fNames[Ids50.ID_RT] = RT;
+			fNames[Ids50.ID_RUBY] = RUBY;
+			fNames[Ids.ID_S] = S;
+			fNames[Ids.ID_SAMP] = SAMP;
+			fNames[Ids.ID_SCRIPT] = SCRIPT;
+			fNames[Ids50.ID_SECTION] = SECTION;
+			fNames[Ids.ID_SELECT] = SELECT;
+			fNames[Ids.ID_SMALL] = SMALL;
+			fNames[Ids50.ID_SOURCE] = SOURCE;
+			fNames[Ids.ID_SPAN] = SPAN;
+			fNames[Ids.ID_STRIKE] = STRIKE;
+			fNames[Ids.ID_STRONG] = STRONG;
+			fNames[Ids.ID_STYLE] = STYLE;
+			fNames[Ids50.ID_SUMMARY] = SUMMARY;
+			fNames[Ids.ID_SUB] = SUB;
+			fNames[Ids.ID_SUP] = SUP;
+			fNames[Ids50.ID_SVG] = SVG;
+			fNames[Ids.ID_TABLE] = TABLE;
+			fNames[Ids.ID_TBODY] = TBODY;
+			fNames[Ids.ID_TD] = TD;
+			fNames[Ids.ID_TEXTAREA] = TEXTAREA;
+			fNames[Ids.ID_TFOOT] = TFOOT;
+			fNames[Ids.ID_TH] = TH;
+			fNames[Ids.ID_THEAD] = THEAD;
+			fNames[Ids50.ID_TIME] = TIME;
+			fNames[Ids.ID_TITLE] = TITLE;
+			fNames[Ids.ID_TR] = TR;
+			fNames[Ids.ID_TT] = TT;
+			fNames[Ids.ID_U] = U;
+			fNames[Ids.ID_UL] = UL;
+			fNames[Ids.ID_VAR] = VAR;
+			fNames[Ids50.ID_VIDEO] = VIDEO;
+			fNames[Ids.ID_WBR] = WBR;
+			fNames[Ids.ID_SSI_CONFIG] = SSI_CONFIG;
+			fNames[Ids.ID_SSI_ECHO] = SSI_ECHO;
+			fNames[Ids.ID_SSI_EXEC] = SSI_EXEC;
+			fNames[Ids.ID_SSI_FSIZE] = SSI_FSIZE;
+			fNames[Ids.ID_SSI_FLASTMOD] = SSI_FLASTMOD;
+			fNames[Ids.ID_SSI_INCLUDE] = SSI_INCLUDE;
+			fNames[Ids.ID_SSI_PRINTENV] = SSI_PRINTENV;
+			fNames[Ids.ID_SSI_SET] = SSI_SET;
+			fNames[Ids.ID_BGSOUND] = BGSOUND;
+			fNames[Ids.ID_NOBR] = NOBR;
+			fNames[Ids.ID_WBR] = WBR;
+		}
+		return fNames;
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLAttrDeclImpl.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLAttrDeclImpl.java
index ce938e3..9c85e4a 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLAttrDeclImpl.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLAttrDeclImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,8 @@
 
 	private HTMLCMDataTypeImpl type = null;
 	private int usage = 0;
+	private boolean is_obsolete = false;
+
 
 	/**
 	 */
@@ -106,6 +108,9 @@
 			return true;
 		else if (propertyName.equals(HTMLCMProperties.IS_SCRIPTABLE))
 			return true;
+		else if (propertyName.equals(HTMLCMProperties.IS_OBSOLETE))
+			return is_obsolete;
+		
 		return super.supports(propertyName);
 	}
 
@@ -117,6 +122,13 @@
 		else if (propertyName.equals(HTMLCMProperties.IS_SCRIPTABLE)) {
 			return getAttrType().getDataTypeName() == HTMLCMDataType.SCRIPT ? new Boolean(true) : new Boolean(false);
 		}
+		else if (propertyName.equals(HTMLCMProperties.IS_OBSOLETE))
+			return new Boolean(is_obsolete);
+		
 		return super.getProperty(propertyName);
 	}
+	
+	public void obsolete(boolean is_obsolete){
+		this.is_obsolete = is_obsolete;
+	}
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLCMDataType.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLCMDataType.java
index fba0b86..3c94c47 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLCMDataType.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLCMDataType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,4 +63,9 @@
 	public static final String STYLE_SHEET = CMDataType.CDATA;
 	/** %Text; == CDATA */
 	public static final String TEXT = CMDataType.CDATA;
+	/** %MediaType; == CDATA */
+	public static final String MEDIA_TYPE = CMDataType.CDATA;
+	/** %BrowsingContext; == CDATA */
+	public static final String BROWSING_CONTEXT = CMDataType.CDATA;
+	
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLCMDocumentFactory.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLCMDocumentFactory.java
index 7bf5249..7b9f634 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLCMDocumentFactory.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLCMDocumentFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@
 
 import org.eclipse.wst.html.core.internal.contentmodel.chtml.CHCMDocImpl;
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
 import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocType;
 
@@ -27,7 +28,7 @@
 public final class HTMLCMDocumentFactory {
 
 	private static Hashtable cmdocs = new Hashtable();
-	private static List supportedCMtypes = Arrays.asList(new Object[]{CMDocType.HTML_DOC_TYPE, CMDocType.CHTML_DOC_TYPE, CMDocType.JSP11_DOC_TYPE, CMDocType.JSP12_DOC_TYPE, CMDocType.JSP20_DOC_TYPE, CMDocType.TAG20_DOC_TYPE, CMDocType.JSP21_DOC_TYPE});
+	private static List supportedCMtypes = Arrays.asList(new Object[]{CMDocType.HTML_DOC_TYPE, CMDocType.CHTML_DOC_TYPE, CMDocType.JSP11_DOC_TYPE, CMDocType.JSP12_DOC_TYPE, CMDocType.JSP20_DOC_TYPE, CMDocType.TAG20_DOC_TYPE, CMDocType.JSP21_DOC_TYPE, CMDocType.HTML5_DOC_TYPE});
 
 	private static JCMDocImpl jsp11doc = null;
 
@@ -62,6 +63,12 @@
 			return html40doc;
 		}
 
+		else if (CMDocType.HTML5_DOC_TYPE.equals(cmtype)) {
+			CMNamespaceImpl h50ns = new CMNamespaceImpl(HTML50Namespace.HTML50_URI, HTML50Namespace.HTML50_TAG_PREFIX);
+			H5CMDocImpl html50doc = new H5CMDocImpl(CMDocType.HTML5_DOC_TYPE, h50ns);
+			return html50doc;
+		}
+		
 		else if (CMDocType.JSP20_DOC_TYPE.equals(cmtype)) {
 			CMNamespaceImpl j20ns = new CMNamespaceImpl(JSP20Namespace.JSP20_URI, JSP11Namespace.JSP_TAG_PREFIX);
 			JCM20DocImpl jsp20doc = new JCM20DocImpl(CMDocType.JSP20_DOC_TYPE, j20ns);
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLElemDeclImpl.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLElemDeclImpl.java
index f0b1471..3f5a9b7 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLElemDeclImpl.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HTMLElemDeclImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,6 +43,7 @@
 	protected boolean indentChild = false;
 	protected ElementCollection elementCollection = null;
 	protected AttributeCollection attributeCollection = null;
+	private boolean is_obsolete = false;
 	protected final static CMNamedNodeMap EMPTY_MAP = new CMNamedNodeMap() {
 		public int getLength() {
 			return 0;
@@ -282,6 +283,9 @@
 			ComplexTypeDefinition def = getComplexTypeDefinition();
 			return (def != null);
 		}
+		if (propertyName.equals(HTMLCMProperties.IS_OBSOLETE)) {
+			return is_obsolete;
+		}
 		else {
 			PropertyProvider pp = PropertyProviderFactory.getProvider(propertyName);
 			if (pp == null)
@@ -301,6 +305,9 @@
 			ComplexTypeDefinition def = getComplexTypeDefinition();
 			return (def != null) ? def.getPrimaryCandidate() : null;
 		}
+		else if (propertyName.equals(HTMLCMProperties.IS_OBSOLETE)){
+			return new Boolean(is_obsolete);
+		}
 		else {
 			PropertyProvider pp = PropertyProviderFactory.getProvider(propertyName);
 			if (pp == null)
@@ -363,4 +370,8 @@
 		}
 		return false;
 	}
+	
+	public void obsolete(boolean is_obsolete){
+		this.is_obsolete = is_obsolete;
+	}
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedA.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedA.java
index 92eb28e..270fc91 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedA.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedA.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMContent;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
@@ -35,21 +33,6 @@
 
 	/**
 	 * %attrs;
-	 * (charset %Charset; #IMPLIED)
-	 * (type %ContentType; #IMPLIED)
-	 * (name CDATA #IMPLIED)
-	 * (href %URI; #IMPLIED)
-	 * (hreflang %LanguageCode; #IMPLIED)
-	 * (target %FrameTarget; #IMPLIED)
-	 * (rel %LinkTypes; #IMPLIED)
-	 * (rev %LinkTypes; #IMPLIED)
-	 * (accesskey %Character; #IMPLIED)
-	 * (directkey %Character; #IMPLIED)
-	 * (shape %Shape; rect)
-	 * (coords %Coords; #IMPLIED)
-	 * (tabindex NUMBER #IMPLIED)
-	 * (onfocus %Script; #IMPLIED)
-	 * (onblur %Script; #IMPLIED) 
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -62,8 +45,9 @@
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
 
-		String[] names = {HTML40Namespace.ATTR_NAME_CHARSET, HTML40Namespace.ATTR_NAME_TYPE, HTML40Namespace.ATTR_NAME_NAME, HTML40Namespace.ATTR_NAME_HREF, HTML40Namespace.ATTR_NAME_HREFLANG, HTML40Namespace.ATTR_NAME_TARGET, HTML40Namespace.ATTR_NAME_REL, HTML40Namespace.ATTR_NAME_REV, HTML40Namespace.ATTR_NAME_ACCESSKEY, HTML40Namespace.ATTR_NAME_DIRECTKEY, HTML40Namespace.ATTR_NAME_SHAPE, HTML40Namespace.ATTR_NAME_COORDS, HTML40Namespace.ATTR_NAME_TABINDEX, HTML40Namespace.ATTR_NAME_ONFOCUS, HTML40Namespace.ATTR_NAME_ONBLUR};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.A, attributes);
+	
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedAREA.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedAREA.java
index 3afad06..322e65c 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedAREA.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedAREA.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
 
 
@@ -34,16 +32,6 @@
 	/**
 	 * AREA.
 	 * %attrs;
-	 * (shape %Shape; rect)
-	 * (coords %Coords; #IMPLIED)
-	 * (href %URI; #IMPLIED)
-	 * (target %FrameTarget; #IMPLIED)
-	 * (nohref (nohref) #IMPLIED)
-	 * (alt %Text; #REQUIRED)
-	 * (tabindex NUMBER #IMPLIED)
-	 * (accesskey %Character; #IMPLIED)
-	 * (onfocus %Script; #IMPLIED)
-	 * (onblur %Script; #IMPLIED)
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -55,7 +43,8 @@
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
 
-		String[] names = {HTML40Namespace.ATTR_NAME_SHAPE, HTML40Namespace.ATTR_NAME_COORDS, HTML40Namespace.ATTR_NAME_HREF, HTML40Namespace.ATTR_NAME_TARGET, HTML40Namespace.ATTR_NAME_NOHREF, HTML40Namespace.ATTR_NAME_ALT, HTML40Namespace.ATTR_NAME_TABINDEX, HTML40Namespace.ATTR_NAME_ACCESSKEY, HTML40Namespace.ATTR_NAME_ONFOCUS, HTML40Namespace.ATTR_NAME_ONBLUR};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.AREA, attributes);
+	
 	}
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedBUTTON.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedBUTTON.java
index 9754980..6ace2cb 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedBUTTON.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedBUTTON.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,9 +15,7 @@
 import java.util.Arrays;
 
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMContent;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
 
@@ -35,15 +33,6 @@
 
 	/**
 	 * %attrs;
-	 * %reserved; ... empty.
-	 * (name CDATA #IMPLIED)
-	 * (value CDATA #IMPLIED)
-	 * (type (button|submit|reset) submit) ... should be defined locally.
-	 * (disabled (disabled) #IMPLIED)
-	 * (tabindex NUMBER #IMPLIED)
-	 * (accesskey %Character; #IMPLIED)
-	 * (onfocus %Script; #IMPLIED)
-	 * (onblur %Script; #IMPLIED)
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -55,17 +44,10 @@
 
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
-
-		String[] names = {HTML40Namespace.ATTR_NAME_NAME, HTML40Namespace.ATTR_NAME_VALUE, HTML40Namespace.ATTR_NAME_DISABLED, HTML40Namespace.ATTR_NAME_TABINDEX, HTML40Namespace.ATTR_NAME_ACCESSKEY, HTML40Namespace.ATTR_NAME_ONFOCUS, HTML40Namespace.ATTR_NAME_ONBLUR};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
-
-		// (type (button|submit|reset) submit) ... should be defined locally.
-		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
-		String[] values = {HTML40Namespace.ATTR_VALUE_BUTTON, HTML40Namespace.ATTR_VALUE_SUBMIT, HTML40Namespace.ATTR_VALUE_RESET};
-		atype.setEnumValues(values);
-
-		HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_TYPE, attr);
+		
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.BUTTON, attributes);
+	
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedCANVAS.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedCANVAS.java
new file mode 100644
index 0000000..453fb1c
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedCANVAS.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import java.util.Arrays;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+
+
+/**
+ * CANVAS.
+ */
+final class HedCANVAS extends HTMLElemDeclImpl {
+
+	/**
+	 */
+	public HedCANVAS(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.CANVAS, collection);
+		layoutType = LAYOUT_BLOCK;
+	}
+
+	/**
+	 * %attrs;
+	 * (height, width)
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+		
+		
+		String[] names = { HTML40Namespace.ATTR_NAME_WIDTH, HTML40Namespace.ATTR_NAME_HEIGHT };
+		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedCOMMAND.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedCOMMAND.java
new file mode 100644
index 0000000..3fc7c03
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedCOMMAND.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
+
+/**
+ * COMMAND.
+ */
+final class HedCOMMAND extends HTMLElemDeclImpl {
+
+	/**
+	 */
+	public HedCOMMAND(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.COMMAND, collection);
+		layoutType = LAYOUT_OBJECT;
+	}
+
+	/**
+	 * COMMAND.
+	 * %attrs;
+	 * // (type %CommandTYPE; command | checkbox|radio) 
+	 * // (label %CDATA; #REQUIRED) 
+	 * // (icon %URI; #OPTIONAL) 
+	 * // (disabled %BOOLEAN; #OPTIONAL) 
+	 * // (checked %BOOLEAN; #OPTIONAL) 
+	 * // (radiogroup %TEXT; #OPTIONAL) 
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+
+		HTMLCMDataTypeImpl atype = null;
+		HTMLAttrDeclImpl attr = null;
+		// (type %CommandTYPE; command | checkbox|radio) 
+		// NOTE: %InputType is ENUM;
+		atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+		String[] values = {HTML50Namespace.ATTR_VALUE_COMMAND, HTML40Namespace.ATTR_VALUE_CHECKBOX, HTML40Namespace.ATTR_VALUE_RADIO};
+		atype.setEnumValues(values);
+		atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, HTML50Namespace.ATTR_VALUE_COMMAND);
+		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_TYPE, attr);
+		
+		// (label %CDATA; #REQUIRED) 
+		atype = new HTMLCMDataTypeImpl(HTMLCMDataType.TEXT);
+		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_LABEL, atype, CMAttributeDeclaration.REQUIRED);
+		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_LABEL, attr);
+
+		// (icon %URI; #OPTIONAL) 
+		atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+		attr = new HTMLAttrDeclImpl(HTML50Namespace.ATTR_NAME_ICON, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML50Namespace.ATTR_NAME_ICON, attr);
+
+		
+		// (disabled %BOOLEAN; #OPTIONAL) 
+		atype = new HTMLCMDataTypeImpl(HTMLCMDataType.BOOLEAN);
+		atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, HTML40Namespace.ATTR_VALUE_FALSE);
+		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_DISABLED, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_DISABLED, attr);
+
+		// (checked %BOOLEAN; #OPTIONAL) 
+		atype = new HTMLCMDataTypeImpl(HTMLCMDataType.BOOLEAN);
+		atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, HTML40Namespace.ATTR_VALUE_FALSE);
+		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_CHECKED, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_CHECKED, attr);
+
+		// (radiogroup %TEXT; #OPTIONAL) 
+		atype = new HTMLCMDataTypeImpl(HTMLCMDataType.TEXT);
+		attr = new HTMLAttrDeclImpl(HTML50Namespace.ATTR_NAME_RADIOGROUP, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML50Namespace.ATTR_NAME_RADIOGROUP, attr);
+
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedDATALIST.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedDATALIST.java
new file mode 100644
index 0000000..ba671c6
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedDATALIST.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+/**
+ * DATALIST.
+ */
+final class HedDATALIST extends HTMLElemDeclImpl {
+
+	/**
+	 */
+	public HedDATALIST(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.DATALIST, collection);
+		typeDefinitionName = ComplexTypeDefinitionFactory.CTYPE_DATALIST;
+		layoutType = LAYOUT_OBJECT;
+		indentChild = true;
+	}
+
+	/**
+	 * %attrs;
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedDETAILS.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedDETAILS.java
new file mode 100644
index 0000000..a4e8f01
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedDETAILS.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+public class HedDETAILS extends HTMLElemDeclImpl {
+
+	public HedDETAILS(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.DETAILS, collection);
+		typeDefinitionName = ComplexTypeDefinitionFactory.CTYPE_DETAILS_CONTAINER;
+	}
+
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+
+		CMNode node = attributeCollection.getDeclaration(HTML50Namespace.ATTR_NAME_OPEN);
+		if (node != null)
+			attributes.putNamedItem(HTML50Namespace.ATTR_NAME_OPEN, node);
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedFIELDSET.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedFIELDSET.java
index f47fbcb..3e0d7ff 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedFIELDSET.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedFIELDSET.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,6 +41,9 @@
 
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.FIELDSET, attributes);
+	
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedFIGCAPTION.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedFIGCAPTION.java
new file mode 100644
index 0000000..9b6162c
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedFIGCAPTION.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+public class HedFIGCAPTION extends HedFlowContainer {
+	public HedFIGCAPTION(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.FIGCAPTION, collection);
+		layoutType = LAYOUT_HIDDEN;
+	}
+
+	/**
+	 * Article.
+	 * %attrs;
+	 * Global attributes
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedFIGURE.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedFIGURE.java
new file mode 100644
index 0000000..87a4610
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedFIGURE.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+/**
+ * FIGURE.
+ */
+final class HedFIGURE extends HTMLElemDeclImpl {
+
+	/**
+	 */
+	public HedFIGURE(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.FIGURE, collection);
+		typeDefinitionName = ComplexTypeDefinitionFactory.CTYPE_FIGURE;
+		layoutType = LAYOUT_BLOCK;
+		indentChild = true;
+	}
+
+	/**
+	 * %attrs;
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+
+	}
+	
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedHEADER.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedHEADER.java
new file mode 100644
index 0000000..5e72a35
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedHEADER.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMContent;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+public class HedHEADER extends HedFlowContainer {
+
+	public HedHEADER(String name, ElementCollection collection) {
+		super(name, collection);
+	}
+
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+	}
+
+	/**
+	 * Exclusion.
+	 * <code>HEADER</code> has the exclusion.
+	 * It is <code>HEADER</code> and <code>FOOTER</code>.
+	 */
+	public CMContent getExclusion() {
+		if (exclusion != null)
+			return exclusion; // already created.
+		if (elementCollection == null)
+			return null; // fatal
+
+		exclusion = new CMGroupImpl(CMGroup.CHOICE, 1, 1);
+		CMNode node = elementCollection.getNamedItem(HTML50Namespace.ElementName.HEADER);
+		if (node != null)
+			exclusion.appendChild(node);
+		node = elementCollection.getNamedItem(HTML50Namespace.ElementName.FOOTER);
+		if (node != null)
+			exclusion.appendChild(node);
+
+		return exclusion;
+	}
+
+	/**
+	 */
+	public CMNamedNodeMap getProhibitedAncestors() {
+		if (prohibitedAncestors != null)
+			return prohibitedAncestors;
+
+		String[] names = {HTML50Namespace.ElementName.HEADER, HTML50Namespace.ElementName.FOOTER};
+		prohibitedAncestors = elementCollection.getDeclarations(names);
+
+		return prohibitedAncestors;
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedHGROUP.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedHGROUP.java
new file mode 100644
index 0000000..3bb51a4
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedHGROUP.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
+
+public class HedHGROUP extends HTMLElemDeclImpl {
+
+	public HedHGROUP(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.HGROUP, collection);
+		typeDefinitionName = ComplexTypeDefinitionFactory.CTYPE_HEADING_CONTAINER;
+		correctionType = CORRECT_EMPTY;
+		layoutType = LAYOUT_BLOCK;
+		indentChild = true;
+	}
+
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+	}
+
+	/**
+	 */
+	public CMNamedNodeMap getProhibitedAncestors() {
+		if (prohibitedAncestors != null)
+			return prohibitedAncestors;
+
+		String[] names = {HTML40Namespace.ElementName.DIR, HTML40Namespace.ElementName.MENU};
+		prohibitedAncestors = elementCollection.getDeclarations(names);
+
+		return prohibitedAncestors;
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedHTML.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedHTML.java
index 99b6332..e393d04 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedHTML.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedHTML.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,13 +62,10 @@
 
 		attributes = new CMNamedNodeMapImpl();
 
-		// %i18n;
-		attributeCollection.getI18n(attributes);
-		// version
-		HTMLAttributeDeclaration adec = attributeCollection.getDeclaration(HTML40Namespace.ATTR_NAME_VERSION);
-		if (adec != null)
-			attributes.putNamedItem(HTML40Namespace.ATTR_NAME_VERSION, adec);
-	}
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.HTML, attributes);
+	
+		}
 
 	/**
 	 * HTML has terminators.
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedIFRAME.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedIFRAME.java
index 191615e..0e4c564 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedIFRAME.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedIFRAME.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
 
@@ -29,19 +27,7 @@
 		layoutType = LAYOUT_OBJECT;
 	}
 
-	/**
-	 * %coreattrs;
-	 * (longdesc %URI; #IMPLIED)
-	 * (name CDATA #IMPLIED)
-	 * (src %URI; #IMPLIED)
-	 * (frameborder (1|0) 1)
-	 * (marginwidth %Pixels; #IMPLIED)
-	 * (marginheight %Pixels; #IMPLIED)
-	 * (scrolling (yes|no|auto) auto)
-	 * (align %IAlign; #IMPLIED) ... should be defined locally.
-	 * (height %Length; #IMPLIED)
-	 * (width %Length; #IMPLIED)
-	 */
+	
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
 			return; // already created.
@@ -50,16 +36,9 @@
 
 		attributes = new CMNamedNodeMapImpl();
 
-		// %coreattrs;
-		attributeCollection.getCore(attributes);
-
-		String[] names = {HTML40Namespace.ATTR_NAME_LONGDESC, HTML40Namespace.ATTR_NAME_NAME, HTML40Namespace.ATTR_NAME_SRC, HTML40Namespace.ATTR_NAME_FRAMEBORDER, HTML40Namespace.ATTR_NAME_MARGINWIDTH, HTML40Namespace.ATTR_NAME_MARGINHEIGHT, HTML40Namespace.ATTR_NAME_SCROLLING, HTML40Namespace.ATTR_NAME_HEIGHT, HTML40Namespace.ATTR_NAME_WIDTH};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
-
-		// align
-		HTMLAttrDeclImpl attr = AttributeCollection.createAlignForImage();
-		if (attr != null)
-			attributes.putNamedItem(HTML40Namespace.ATTR_NAME_ALIGN, attr);
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.IFRAME, attributes);
+	
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedIMG.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedIMG.java
index 1e1805e..b719416 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedIMG.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedIMG.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,11 +12,7 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
 
 /**
@@ -34,19 +30,6 @@
 	/**
 	 * IMG.
 	 * %attrs;
-	 * (src %URI; #REQUIRED): should be defined locally.
-	 * (alt %Text; #REQUIRED)
-	 * (longdesc %URI; #IMPLIED)
-	 * (name CDATA #IMPLIED)
-	 * (height %Length; #IMPLIED)
-	 * (width %Length; #IMPLIED)
-	 * (usemap %URI; #IMPLIED)
-	 * (ismap (ismap) #IMPLIED)
-	 * (align %IAlign; #IMPLIED): should be defined locally.
-	 * (border %Pixels; #IMPLIED)
-	 * (hspace %Pixels; #IMPLIED)
-	 * (vspace %Pixels; #IMPLIED)
-	 * (mapfile %URI; #IMPLIED)
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -59,19 +42,9 @@
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
 
-		// (src %URI; #REQUIRED): should be defined locally.
-		HTMLCMDataTypeImpl atype = null;
-		HTMLAttrDeclImpl attr = null;
-		atype = new HTMLCMDataTypeImpl(CMDataType.URI);
-		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_SRC, atype, CMAttributeDeclaration.REQUIRED);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_SRC, attr);
-
-		String[] names = {HTML40Namespace.ATTR_NAME_ALT, HTML40Namespace.ATTR_NAME_LONGDESC, HTML40Namespace.ATTR_NAME_NAME, HTML40Namespace.ATTR_NAME_HEIGHT, HTML40Namespace.ATTR_NAME_WIDTH, HTML40Namespace.ATTR_NAME_USEMAP, HTML40Namespace.ATTR_NAME_ISMAP, HTML40Namespace.ATTR_NAME_BORDER, HTML40Namespace.ATTR_NAME_HSPACE, HTML40Namespace.ATTR_NAME_VSPACE, HTML40Namespace.ATTR_NAME_MAPFILE};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
-
-		// align (local); should be defined locally.
-		attr = AttributeCollection.createAlignForImage();
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_ALIGN, attr);
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.IMG, attributes);
+	
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedINPUT.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedINPUT.java
index 60b3049..9080201 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedINPUT.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedINPUT.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,11 +12,7 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
 
 /**
@@ -34,32 +30,7 @@
 	/**
 	 * INPUT.
 	 * %attrs;
-	 * (type %InputType; TEXT) ... should be defined locally.
-	 * (name CDATA #IMPLIED)
-	 * (value CDATA #IMPLIED)
-	 * (checked (checked) #IMPLIED)
-	 * (disabled (disabled) #IMPLIED)
-	 * (readonly (readonly) #IMPLIED)
-	 * (size CDATA #IMPLIED) ... should be defined locally.
-	 * (maxlength NUMBER #IMPLIED)
-	 * (src %URI; #IMPLIED)
-	 * (alt CDATA #IMPLIED) ... should be defined locally.
-	 * (usemap %URI; #IMPLIED)
-	 * (ismap (ismap) #IMPLIED)
-	 * (tabindex NUMBER #IMPLIED)
-	 * (accesskey %Character; #IMPLIED)
-	 * (onfocus %Script; #IMPLIED)
-	 * (onblur %Script; #IMPLIED)
-	 * (onselect %Script; #IMPLIED)
-	 * (onchange %Script; #IMPLIED)
-	 * (accept %ContentTypes; #IMPLIED)
-	 * (align %IAlign; #IMPLIED) ... should be defined locally.
-	 * (istyle CDATA #IMPLIED)
-	 * <<D215684
-	 * (width CDATA; #IMPLIED)
-	 * (height CDATA; #IMPLIED)
-	 * (border CDATA; #IMPLIED)
-	 * D215684
+	
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -72,40 +43,8 @@
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
 
-		HTMLCMDataTypeImpl atype = null;
-		HTMLAttrDeclImpl attr = null;
-		// (type %InputType; TEXT) ... should be defined locally.
-		// NOTE: %InputType is ENUM;
-		// (text | password | checkbox | radio | submit | reset |
-		//  file | hidden | image | button)
-		atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
-		String[] values = {HTML40Namespace.ATTR_VALUE_TEXT, HTML40Namespace.ATTR_VALUE_PASSWORD, HTML40Namespace.ATTR_VALUE_CHECKBOX, HTML40Namespace.ATTR_VALUE_RADIO, HTML40Namespace.ATTR_VALUE_SUBMIT, HTML40Namespace.ATTR_VALUE_RESET, HTML40Namespace.ATTR_VALUE_FILE, HTML40Namespace.ATTR_VALUE_HIDDEN, HTML40Namespace.ATTR_VALUE_IMAGE, HTML40Namespace.ATTR_VALUE_BUTTON};
-		atype.setEnumValues(values);
-		atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, HTML40Namespace.ATTR_VALUE_TEXT);
-		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_TYPE, attr);
-
-		// (size CDATA #IMPLIED) ... should be defined locally.
-		atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
-		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_SIZE, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_SIZE, attr);
-
-		// (alt CDATA #IMPLIED) ... should be defined locally.
-		atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
-		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_ALT, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_ALT, attr);
-
-		// (align %IAlign; #IMPLIED) ... should be defined locally.
-		attr = AttributeCollection.createAlignForImage();
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_ALIGN, attr);
-
-		// the rest.
-		String[] names = {HTML40Namespace.ATTR_NAME_NAME, HTML40Namespace.ATTR_NAME_VALUE, HTML40Namespace.ATTR_NAME_CHECKED, HTML40Namespace.ATTR_NAME_DISABLED, HTML40Namespace.ATTR_NAME_READONLY, HTML40Namespace.ATTR_NAME_SIZE, HTML40Namespace.ATTR_NAME_MAXLENGTH, HTML40Namespace.ATTR_NAME_SRC, HTML40Namespace.ATTR_NAME_ALT, HTML40Namespace.ATTR_NAME_USEMAP, HTML40Namespace.ATTR_NAME_ISMAP, HTML40Namespace.ATTR_NAME_TABINDEX, HTML40Namespace.ATTR_NAME_ACCESSKEY, HTML40Namespace.ATTR_NAME_ONFOCUS, HTML40Namespace.ATTR_NAME_ONBLUR, HTML40Namespace.ATTR_NAME_ONSELECT, HTML40Namespace.ATTR_NAME_ONCHANGE, HTML40Namespace.ATTR_NAME_ACCEPT, HTML40Namespace.ATTR_NAME_ALIGN, HTML40Namespace.ATTR_NAME_ISTYLE,
-		//<<D215684
-					HTML40Namespace.ATTR_NAME_WIDTH, HTML40Namespace.ATTR_NAME_HEIGHT, HTML40Namespace.ATTR_NAME_BORDER
-		//<D215684
-		};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.INPUT, attributes);
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedKEYGEN.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedKEYGEN.java
new file mode 100644
index 0000000..c84b30a
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedKEYGEN.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import java.util.Arrays;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+public class HedKEYGEN extends HedEmpty {
+
+	public HedKEYGEN(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.KEYGEN, collection);
+		layoutType = LAYOUT_OBJECT;
+	}
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		attributeCollection.getAttrs(attributes);
+
+		String[] names = { HTML50Namespace.ATTR_NAME_AUTOFOCUS, HTML50Namespace.ATTR_NAME_CHALLENGE, HTML40Namespace.ATTR_NAME_DISABLED, HTML50Namespace.ATTR_NAME_FORM, HTML50Namespace.ATTR_NAME_KEYTYPE, HTML40Namespace.ATTR_NAME_NAME};
+		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedLI.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedLI.java
index f43785e..a413193 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedLI.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedLI.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,8 +16,6 @@
 import java.util.Iterator;
 
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
 
 /**
  * LI.
@@ -36,8 +34,6 @@
 
 	/**
 	 * %attrs;
-	 * (type %LIStyle; #IMPLIED) ... should be defined locally.
-	 * (value NUMBER #IMPLIED) ... should be defined locally.
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -50,15 +46,9 @@
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
 
-		// (type %LIStyle; #IMPLIED) ... should be defined locally.
-		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.LI_STYLE);
-		HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_TYPE, attr);
-
-		// (value NUMBER #IMPLIED) ... should be defined locally.
-		atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
-		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_VALUE, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_VALUE, attr);
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.LI, attributes);
+	
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedLINK.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedLINK.java
index bfe132c..4c28bbe 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedLINK.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedLINK.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,10 +12,7 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
 
 /**
  * LINK.
@@ -32,14 +29,6 @@
 	/**
 	 * LINK.
 	 * %attrs;
-	 * (charset %Charset; #IMPLIED)
-	 * (href %URI; #IMPLIED)
-	 * (hreflang %LanguageCode; #IMPLIED)
-	 * (type %ContentType; #IMPLIED): should be defined locally.
-	 * (rel %LinkTypes; #IMPLIED)
-	 * (rev %LinkTypes; #IMPLIED)
-	 * (media %MediaDesc; #IMPLIED)
-	 * (target %FrameTarget; #IMPLIED)
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -52,12 +41,8 @@
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
 
-		String[] names = {HTML40Namespace.ATTR_NAME_CHARSET, HTML40Namespace.ATTR_NAME_HREF, HTML40Namespace.ATTR_NAME_HREFLANG, HTML40Namespace.ATTR_NAME_REL, HTML40Namespace.ATTR_NAME_REV, HTML40Namespace.ATTR_NAME_MEDIA, HTML40Namespace.ATTR_NAME_TARGET};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
-
-		// (type %ContentType; #IMPLIED)
-		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CONTENT_TYPE);
-		HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_TYPE, attr);
+		// different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.LINK, attributes);
+		
 	}
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMENU.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMENU.java
index 0142558..812af9b 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMENU.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMENU.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,8 +32,7 @@
 
 	/**
 	 * MENU/DIR.
-	 * (compact (compact) #IMPLIED)
-	 */
+	*/
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
 			return; // already created.
@@ -45,8 +44,8 @@
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
 
-		String[] names = {HTML40Namespace.ATTR_NAME_COMPACT};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.MENU, attributes);
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMETA.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMETA.java
index d5b232c..92554ea 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMETA.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMETA.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,10 +12,7 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
 
 /**
  * META.
@@ -31,11 +28,7 @@
 
 	/**
 	 * META.
-	 * %i18n;
-	 * (http-equiv NAME #IMPLIED)
-	 * (name NAME #IMPLIED) ... should be defined locally.
-	 * (content CDATA #REQUIRED)
-	 * (scheme CDATA #IMPLIED)
+
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -44,16 +37,9 @@
 			return; // fatal
 
 		attributes = new CMNamedNodeMapImpl();
-
-		// %i18n;
-		attributeCollection.getI18n(attributes);
-
-		// (name NAME #IMPLIED) ... should be defined locally.
-		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.NAME);
-		HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_NAME, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_NAME, attr);
-
-		String[] names = {HTML40Namespace.ATTR_NAME_HTTP_EQUIV, HTML40Namespace.ATTR_NAME_CONTENT, HTML40Namespace.ATTR_NAME_SCHEME};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+		
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.META, attributes);
+	
 	}
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMETER.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMETER.java
new file mode 100644
index 0000000..c79e9e9
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMETER.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import java.util.Arrays;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMContent;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+public class HedMETER extends HedInlineContainer {
+
+	public HedMETER(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.METER, collection);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.html.core.internal.contentmodel.HTMLElemDeclImpl#createAttributeDeclarations()
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+		attributeCollection.getAttrs(attributes);
+
+		String[] names = { HTML50Namespace.ATTR_NAME_MIN, HTML50Namespace.ATTR_NAME_MAX, HTML50Namespace.ATTR_NAME_LOW, HTML50Namespace.ATTR_NAME_HIGH, HTML50Namespace.ATTR_NAME_OPTIMUM, HTML50Namespace.ATTR_NAME_FORM };
+		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+
+		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
+		HTMLAttrDeclImpl decl = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_VALUE, atype, CMAttributeDeclaration.REQUIRED);
+		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_VALUE, decl);
+	}
+
+	public CMContent getExclusion() {
+		if (exclusion != null)
+			return exclusion; // already created.
+		if (elementCollection == null)
+			return null;
+
+		exclusion = new CMGroupImpl(CMGroup.CHOICE, 1, 1);
+		CMNode meter = elementCollection.getNamedItem(HTML50Namespace.ElementName.METER);
+		if (meter != null)
+			exclusion.appendChild(meter);
+
+		return exclusion;
+	}
+
+	public CMNamedNodeMap getProhibitedAncestors() {
+		if (prohibitedAncestors != null)
+			return prohibitedAncestors;
+
+		String[] names = {HTML50Namespace.ElementName.METER};
+		prohibitedAncestors = elementCollection.getDeclarations(names);
+
+		return prohibitedAncestors;
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMath.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMath.java
new file mode 100644
index 0000000..154dbfa
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMath.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+
+/**
+ * Math.
+ */
+final class HedMath extends HTMLElemDeclImpl {
+
+	private static String[] terminators = {HTML50Namespace.ElementName.MATH};
+
+	/**
+	 */
+	public HedMath(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.MATH, collection);
+		layoutType = LAYOUT_OBJECT;
+	}
+
+	/**
+	 * Create all attribute declarations.
+	 * MathML namespace
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+	}
+
+	/**
+	 * MATH has terminators.
+	 * @return java.util.Iterator
+	 */
+	protected Iterator getTerminators() {
+		return Arrays.asList(terminators).iterator();
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMediaElement.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMediaElement.java
new file mode 100644
index 0000000..dd23bd4
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedMediaElement.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
+
+/**
+ * EMBED.
+ */
+class HedMediaElement extends HTMLElemDeclImpl {
+
+	/**
+	 */
+	public HedMediaElement(String elementName, ElementCollection collection) {
+		super(elementName, collection);
+		typeDefinitionName = ComplexTypeDefinitionFactory.CTYPE_MEDIA_ELEMENT;
+		layoutType = LAYOUT_OBJECT;
+		indentChild = true;
+	}
+
+	/**
+	 * MediaElement
+	 * %attrs;
+	 * (src %URI; #REQUIRED): should be defined locally.
+	 * (preload %CDATA; #IMPLIED) 
+	 * (autoplay %ENUM; #IMPLIED) 
+	 * (loop %ENUM; #IMPLIED)
+	 * (controls %MediaType; #IMPLIED)
+	 * Global attributes
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+	
+		// (src %URI; #REQUIRED): should be defined locally.
+		HTMLCMDataTypeImpl atype = null;
+		HTMLAttrDeclImpl attr = null;
+		atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_SRC, atype, CMAttributeDeclaration.REQUIRED);
+		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_SRC, attr);
+
+		//(preload %CDATA; #IMPLIED) ENUM
+		// (none | metadata | auto)
+		atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+		String[] values = {HTML40Namespace.ATTR_VALUE_NONE, HTML50Namespace.ATTR_VALUE_METADATA, HTML40Namespace.ATTR_VALUE_AUTO, HTML50Namespace.ATTR_VALUE_EMPTY};
+		atype.setEnumValues(values);
+		atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, HTML40Namespace.ATTR_VALUE_AUTO);
+		attr = new HTMLAttrDeclImpl(HTML50Namespace.ATTR_NAME_PRELOAD, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML50Namespace.ATTR_NAME_PRELOAD, attr);
+
+		// (autoplay (boolean) #IMPLIED)
+		atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+		String[] autoPlayValues = {HTML50Namespace.ATTR_NAME_AUTOPLAY};
+		atype.setEnumValues(autoPlayValues);
+		attr = new HTMLAttrDeclImpl(HTML50Namespace.ATTR_NAME_AUTOPLAY, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML50Namespace.ATTR_NAME_AUTOPLAY, attr);
+
+		// (loop (true|false) #IMPLIED)
+		atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+		String[] loopValues = {HTML40Namespace.ATTR_VALUE_TRUE, HTML40Namespace.ATTR_VALUE_FALSE};
+		atype.setEnumValues(loopValues);
+		atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, HTML40Namespace.ATTR_VALUE_FALSE);
+		attr = new HTMLAttrDeclImpl(HTML50Namespace.ATTR_NAME_LOOP, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML50Namespace.ATTR_NAME_LOOP, attr);
+
+		// (controls (true|false) #IMPLIED)
+		atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
+		String[] controlValues = {HTML40Namespace.ATTR_VALUE_TRUE, HTML40Namespace.ATTR_VALUE_FALSE};
+		atype.setEnumValues(controlValues);
+		atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, HTML40Namespace.ATTR_VALUE_FALSE);
+		attr = new HTMLAttrDeclImpl(HTML50Namespace.ATTR_NAME_CONTROLS, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML50Namespace.ATTR_NAME_CONTROLS, attr);
+
+		
+		// global attributes
+		attributeCollection.getAttrs(attributes);
+	}
+}
+
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedOL.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedOL.java
index 6668b90..6c6d50c 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedOL.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedOL.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,10 +12,7 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
 
 /**
@@ -31,9 +28,6 @@
 
 	/**
 	 * OL.
-	 * (type %OLStyle; #IMPLIED) ... should be defined locally.
-	 * (compact (compact) #IMPLIED)
-	 * (start NUMBER #IMPLIED)
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -46,14 +40,9 @@
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
 
-		// (type %OLStyle; #IMPLIED) ... should be defined locally.
-		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.OL_STYLE);
-		HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_TYPE, attr);
-
-		// the rest.
-		String[] names = {HTML40Namespace.ATTR_NAME_COMPACT, HTML40Namespace.ATTR_NAME_START};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.OL, attributes);
+	
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedOUTPUT.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedOUTPUT.java
new file mode 100644
index 0000000..fc172e1
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedOUTPUT.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import java.util.Arrays;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+public class HedOUTPUT extends HedInlineContainer {
+
+	public HedOUTPUT(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.OUTPUT, collection);
+	}
+
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+
+		String[] names = { HTML40Namespace.ATTR_NAME_FOR, HTML50Namespace.ATTR_NAME_FORM, HTML40Namespace.ATTR_NAME_NAME};
+		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedPARAM.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedPARAM.java
index 5541a1f..1bcea7e 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedPARAM.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedPARAM.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,11 +12,7 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
 
 /**
  * PARAM.
@@ -32,11 +28,6 @@
 
 	/**
 	 * PARAM.
-	 * (id ID #IMPLIED)
-	 * (name CDATA #REQUIRED) ... should be defined locally.
-	 * (value CDATA #IMPLIED)
-	 * (valuetype (DATA|REF|OBJECT) DATA)
-	 * (type %ContentType; #IMPLIED)
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -46,12 +37,9 @@
 
 		attributes = new CMNamedNodeMapImpl();
 
-		String[] names = {HTML40Namespace.ATTR_NAME_ID, HTML40Namespace.ATTR_NAME_VALUE, HTML40Namespace.ATTR_NAME_VALUETYPE, HTML40Namespace.ATTR_NAME_TYPE};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
-
-		// (name CDATA #REQUIRED) ... should be defined locally.
-		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.CDATA);
-		HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_NAME, atype, CMAttributeDeclaration.REQUIRED);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_NAME, attr);
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.PARAM, attributes);
+	
+		
 	}
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedPROGRESS.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedPROGRESS.java
new file mode 100644
index 0000000..223c129
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedPROGRESS.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import java.util.Arrays;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMContent;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+public class HedPROGRESS extends HedInlineContainer {
+
+	public HedPROGRESS(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.PROGRESS, collection);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.html.core.internal.contentmodel.HTMLElemDeclImpl#createAttributeDeclarations()
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+		attributeCollection.getAttrs(attributes);
+
+		String[] names = { HTML40Namespace.ATTR_NAME_VALUE, HTML50Namespace.ATTR_NAME_MAX, HTML50Namespace.ATTR_NAME_FORM };
+		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+	}
+
+	public CMContent getExclusion() {
+		if (exclusion != null)
+			return exclusion;
+		if (elementCollection == null)
+			return null;
+
+		exclusion = new CMGroupImpl(CMGroup.CHOICE, 1, 1);
+		CMNode progress = elementCollection.getNamedItem(HTML50Namespace.ElementName.PROGRESS);
+		if (progress != null) {
+			exclusion.appendChild(progress);
+		}
+		return exclusion;
+	}
+
+	public CMNamedNodeMap getProhibitedAncestors() {
+		if (prohibitedAncestors == null) {
+			String[] names = { HTML50Namespace.ElementName.PROGRESS };
+			prohibitedAncestors = elementCollection.getDeclarations(names);
+		}
+		return prohibitedAncestors;
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedRP.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedRP.java
new file mode 100644
index 0000000..e31a9bc
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedRP.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+
+/**
+ * RP.
+ */
+final class HedRP extends HedPcdata {
+
+	private static String[] terminators = {HTML50Namespace.ElementName.RP};
+
+	/**
+	 */
+	public HedRP(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.RP, collection);
+		layoutType = LAYOUT_HIDDEN;
+	}
+
+	/**
+	 * OPTION.
+	 * %attrs;
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+
+	}
+
+	/**
+	 * OPTION has terminators.
+	 * @return java.util.Iterator
+	 */
+	protected Iterator getTerminators() {
+		return Arrays.asList(terminators).iterator();
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedRT.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedRT.java
new file mode 100644
index 0000000..aba4a38
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedRT.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+
+/**
+ * RT.
+ */
+final class HedRT extends HedPcdata {
+
+	private static String[] terminators = {HTML50Namespace.ElementName.RT};
+
+	/**
+	 */
+	public HedRT(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.RT, collection);
+		layoutType = LAYOUT_BLOCK;
+
+	}
+
+	/**
+	 * OPTION.
+	 * %attrs;
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+
+	}
+
+	/**
+	 * OPTION has terminators.
+	 * @return java.util.Iterator
+	 */
+	protected Iterator getTerminators() {
+		return Arrays.asList(terminators).iterator();
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedRUBY.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedRUBY.java
new file mode 100644
index 0000000..6686a25
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedRUBY.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+/**
+ * RUBY.
+ */
+final class HedRUBY extends HTMLElemDeclImpl {
+
+	/**
+	 */
+	public HedRUBY(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.RUBY, collection);
+		typeDefinitionName = ComplexTypeDefinitionFactory.CTYPE_RUBY;
+		layoutType = LAYOUT_BLOCK;
+		indentChild = true;
+	}
+
+	/**
+	 * %attrs;
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSCRIPT.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSCRIPT.java
index ae910b7..2af1317 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSCRIPT.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSCRIPT.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,12 +12,8 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMContent;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
 
 /**
@@ -35,13 +31,6 @@
 
 	/**
 	 * SCRIPT.
-	 * (charset %Charset; #IMPLIED)
-	 * (type %ContentType; #REQUIRED) ... should be defined locally.
-	 * (language CDATA #IMPLIED)
-	 * (src %URI; #IMPLIED)
-	 * (defer (defer) #IMPLIED)
-	 * (event CDATA #IMPLIED)
-	 * (for %URI; #IMPLIED)
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -51,14 +40,9 @@
 
 		attributes = new CMNamedNodeMapImpl();
 
-		String[] names = {HTML40Namespace.ATTR_NAME_CHARSET, HTML40Namespace.ATTR_NAME_LANGUAGE, HTML40Namespace.ATTR_NAME_SRC, HTML40Namespace.ATTR_NAME_DEFER, HTML40Namespace.ATTR_NAME_EVENT, HTML40Namespace.ATTR_NAME_FOR};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
-
-		// (type %ContentType; #REQUIRED) ... should be defined locally.
-		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CONTENT_TYPE);
-		atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, "text/javascript"); //$NON-NLS-1$
-		HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_TYPE, atype, CMAttributeDeclaration.REQUIRED);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_TYPE, attr);
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.SCRIPT, attributes);
+	
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSELECT.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSELECT.java
index 78c3a08..a0de442 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSELECT.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSELECT.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,11 +12,7 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
 
 /**
@@ -35,15 +31,6 @@
 
 	/**
 	 * %attrs;
-	 * %reserved;
-	 * (name CDATA #IMPLIED)
-	 * (size NUMBER #IMPLIED) ... should be defined locally.
-	 * (multiple (multiple) #IMPLIED)
-	 * (disabled (disabled) #IMPLIED)
-	 * (tabindex NUMBER #IMPLIED)
-	 * (onfocus %Script; #IMPLIED)
-	 * (onblur %Script; #IMPLIED)
-	 * (onchange %Script; #IMPLIED)
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -55,14 +42,11 @@
 
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
+		
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.SELECT, attributes);
+	
 
-		// (size NUMBER #IMPLIED) ... should be defined locally.
-		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.NUMBER);
-		HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_SIZE, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_SIZE, attr);
-
-		String[] names = {HTML40Namespace.ATTR_NAME_NAME, HTML40Namespace.ATTR_NAME_MULTIPLE, HTML40Namespace.ATTR_NAME_DISABLED, HTML40Namespace.ATTR_NAME_TABINDEX, HTML40Namespace.ATTR_NAME_ONFOCUS, HTML40Namespace.ATTR_NAME_ONBLUR, HTML40Namespace.ATTR_NAME_ONCHANGE};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSOURCE.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSOURCE.java
new file mode 100644
index 0000000..647a9d4
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSOURCE.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
+
+/**
+ * SOURCE.
+ */
+final class HedSOURCE extends HTMLElemDeclImpl {
+
+	private static String[] terminators = {HTML50Namespace.ElementName.SOURCE};
+
+	/**
+	 */
+	public HedSOURCE(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.SOURCE, collection);
+		typeDefinitionName = ComplexTypeDefinitionFactory.CTYPE_CDATA;
+		layoutType = LAYOUT_HIDDEN;
+	}
+
+	/**
+	 * SOURCE
+	 * %attrs;
+	 * (src %URI; #REQUIRED): should be defined locally.
+	 * (type %ContentType; #IMPLIED) 
+	 * (media %MediaType; #IMPLIED) 
+	 * Global attributes
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+	
+		// (src %URI; #REQUIRED): should be defined locally.
+		HTMLCMDataTypeImpl atype = null;
+		HTMLAttrDeclImpl attr = null;
+		atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_SRC, atype, CMAttributeDeclaration.REQUIRED);
+		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_SRC, attr);
+
+		// (type %ContentType; #IMPLIED) 
+		atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CONTENT_TYPE);
+		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_TYPE, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_TYPE, attr);
+		
+
+		// (media %MediaType; #IMPLIED) 
+		atype = new HTMLCMDataTypeImpl(HTMLCMDataType.MEDIA_TYPE);
+		atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, HTML40Namespace.ATTR_VALUE_ALL);
+		attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_MEDIA, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_MEDIA, attr);
+		
+		
+		// global attributes
+		attributeCollection.getAttrs(attributes);
+	}
+	
+	/**
+	 * SOURCE has terminators.
+	 * @return java.util.Iterator
+	 */
+	protected Iterator getTerminators() {
+		return Arrays.asList(terminators).iterator();
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSTYLE.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSTYLE.java
index 985b7fa..da0c3ed 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSTYLE.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSTYLE.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,12 +12,8 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMContent;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
 
 /**
@@ -35,11 +31,7 @@
 
 	/**
 	 * STYLE
-	 * %i18n;
-	 * (type %ContentType; #REQUIRED) ... should be defined locally.
-	 * (media %MediaDesc; #IMPLIED)
-	 * (title %Text; #IMPLIED)
-	 */
+	*/
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
 			return; // already created.
@@ -47,17 +39,11 @@
 			return; // fatal
 
 		attributes = new CMNamedNodeMapImpl();
-
-		// %i18n;
-		attributeCollection.getI18n(attributes);
-
-		String[] names = {HTML40Namespace.ATTR_NAME_MEDIA, HTML40Namespace.ATTR_NAME_TITLE};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
-		// (type %ContentType; #REQUIRED) ... should be defined locally.
-		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(HTMLCMDataType.CONTENT_TYPE);
-		atype.setImpliedValue(CMDataType.IMPLIED_VALUE_DEFAULT, "text/css"); //$NON-NLS-1$
-		HTMLAttrDeclImpl attr = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_TYPE, atype, CMAttributeDeclaration.REQUIRED);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_TYPE, attr);
+		
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.STYLE, attributes);
+	
+		
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSUMMARY.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSUMMARY.java
new file mode 100644
index 0000000..c2b3e82
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSUMMARY.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+public class HedSUMMARY extends HedInlineContainer {
+
+	public HedSUMMARY(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.SUMMARY, collection);
+	}
+
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSVG.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSVG.java
new file mode 100644
index 0000000..0515172
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSVG.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+
+
+import java.util.Arrays;
+import java.util.Iterator;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+
+
+/**
+ * SVG.
+ */
+final class HedSVG extends HTMLElemDeclImpl {
+
+	private static String[] terminators = {HTML50Namespace.ElementName.SVG};
+
+	/**
+	 */
+	public HedSVG(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.SVG, collection);
+		layoutType = LAYOUT_OBJECT;
+	}
+
+	/**
+	 * Create all attribute declarations.
+	 * SVG namespace
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		attributeCollection.getAttrs(attributes);
+	}
+
+	/**
+	 * SVG has terminators.
+	 * @return java.util.Iterator
+	 */
+	protected Iterator getTerminators() {
+		return Arrays.asList(terminators).iterator();
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSectioning.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSectioning.java
new file mode 100644
index 0000000..07a7209
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedSectioning.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+public class HedSectioning extends HedFlowContainer {
+	public HedSectioning(String elementName, ElementCollection collection) {
+		super(elementName, collection);
+		layoutType = LAYOUT_BLOCK;
+		correctionType = CORRECT_EMPTY;
+	}
+
+	/**
+	 * Article.
+	 * %attrs;
+	 * Global attributes
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+
+		// %attrs;
+		attributeCollection.getAttrs(attributes);
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTABLE.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTABLE.java
index bed267c..426cd78 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTABLE.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTABLE.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,11 +12,7 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
 
 /**
@@ -36,20 +32,6 @@
 	/**
 	 * TABLE.
 	 * %attrs;
-	 * %reserved;
-	 * (summary %Text; #IMPLIED)
-	 * (width %Length; #IMPLIED)
-	 * (border %Pixels; #IMPLIED)
-	 * (frame %TFrame; #IMPLIED)
-	 * (rules %TRules; #IMPLIED)
-	 * (cellspacing %Length; #IMPLIED)
-	 * (cellpadding %Length; #IMPLIED)
-	 * (align %TAlign; #IMPLIED)
-	 * (bgcolor %Color; #IMPLIED)
-	 * (datapagesize CDATA #IMPLIED)
-	 * (height %Pixels; #IMPLIED)
-	 * (background %URI; #IMPLIED)
-	 * (bordercolor %Color #IMPLIED) ... D205514
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -61,19 +43,10 @@
 
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
-		// %reserved;
-		// ... %reserved; is empty in the current DTD.
-
-		String[] names = {HTML40Namespace.ATTR_NAME_SUMMARY, HTML40Namespace.ATTR_NAME_WIDTH, HTML40Namespace.ATTR_NAME_BORDER, HTML40Namespace.ATTR_NAME_FRAME, HTML40Namespace.ATTR_NAME_RULES, HTML40Namespace.ATTR_NAME_CELLSPACING, HTML40Namespace.ATTR_NAME_CELLPADDING, HTML40Namespace.ATTR_NAME_BGCOLOR, HTML40Namespace.ATTR_NAME_DATAPAGESIZE, HTML40Namespace.ATTR_NAME_HEIGHT, HTML40Namespace.ATTR_NAME_BACKGROUND, HTML40Namespace.ATTR_NAME_BORDERCOLOR // D205514
-		};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
-
-		// align (local)
-		HTMLCMDataTypeImpl atype = new HTMLCMDataTypeImpl(CMDataType.ENUM);
-		String[] alignValues = {HTML40Namespace.ATTR_VALUE_LEFT, HTML40Namespace.ATTR_VALUE_CENTER, HTML40Namespace.ATTR_VALUE_RIGHT};
-		atype.setEnumValues(alignValues);
-		HTMLAttrDeclImpl adec = new HTMLAttrDeclImpl(HTML40Namespace.ATTR_NAME_ALIGN, atype, CMAttributeDeclaration.OPTIONAL);
-		attributes.putNamedItem(HTML40Namespace.ATTR_NAME_ALIGN, adec);
+		
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.TABLE, attributes);
+		
 	}
 
 	/**
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTEXTAREA.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTEXTAREA.java
index f8a61c6..1b5ba41 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTEXTAREA.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTEXTAREA.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 
 
-import java.util.Arrays;
-
 import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
 
@@ -35,19 +33,6 @@
 	/**
 	 * TEXTAREA.
 	 * %attrs;
-	 * %reserved; ... empty
-	 * (name CDATA #IMPLIED)
-	 * (rows NUMBER #REQUIRED)
-	 * (cols NUMBER #REQUIRED)
-	 * (disabled (disabled) #IMPLIED)
-	 * (readonly (readonly) #IMPLIED)
-	 * (tabindex NUMBER #IMPLIED)
-	 * (accesskey %Character; #IMPLIED)
-	 * (onfocus %Script; #IMPLIED)
-	 * (onblur %Script; #IMPLIED)
-	 * (onselect %Script; #IMPLIED)
-	 * (onchange %Script; #IMPLIED)
-	 * (istyle CDATA #IMPLIED)
 	 */
 	protected void createAttributeDeclarations() {
 		if (attributes != null)
@@ -58,10 +43,10 @@
 
 		// %attrs;
 		attributeCollection.getAttrs(attributes);
-
-		String[] names = {HTML40Namespace.ATTR_NAME_NAME, HTML40Namespace.ATTR_NAME_ROWS, HTML40Namespace.ATTR_NAME_COLS, HTML40Namespace.ATTR_NAME_DISABLED, HTML40Namespace.ATTR_NAME_READONLY, HTML40Namespace.ATTR_NAME_TABINDEX, HTML40Namespace.ATTR_NAME_ACCESSKEY, HTML40Namespace.ATTR_NAME_ONFOCUS, HTML40Namespace.ATTR_NAME_ONBLUR, HTML40Namespace.ATTR_NAME_ONSELECT, HTML40Namespace.ATTR_NAME_ONCHANGE, HTML40Namespace.ATTR_NAME_ISTYLE};
-		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
-	}
+		//different sets of attributes for html 4 & 5
+		attributeCollection.createAttributeDeclarations(HTML40Namespace.ElementName.TEXTAREA, attributes);
+	
+		}
 
 	/**
 	 */
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTIME.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTIME.java
new file mode 100644
index 0000000..ec8191c
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedTIME.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import java.util.Arrays;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMContent;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMGroup;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+public class HedTIME extends HedInlineContainer {
+
+	public HedTIME(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.TIME, collection);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.html.core.internal.contentmodel.HTMLElemDeclImpl#createAttributeDeclarations()
+	 */
+	protected void createAttributeDeclarations() {
+		if (attributes != null)
+			return; // already created.
+		if (attributeCollection == null)
+			return; // fatal
+
+		attributes = new CMNamedNodeMapImpl();
+		attributeCollection.getAttrs(attributes);
+
+		String[] names = { HTML40Namespace.ATTR_NAME_DATETIME, HTML50Namespace.ATTR_NAME_PUBDATE };
+		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+
+	}
+
+	public CMContent getExclusion() {
+		if (exclusion != null)
+			return exclusion; // already created.
+		if (elementCollection == null)
+			return null;
+
+		exclusion = new CMGroupImpl(CMGroup.CHOICE, 1, 1);
+		CMNode time = elementCollection.getNamedItem(HTML50Namespace.ElementName.TIME);
+		if (time != null)
+			exclusion.appendChild(time);
+
+		return exclusion;
+	}
+
+	public CMNamedNodeMap getProhibitedAncestors() {
+		if (prohibitedAncestors != null)
+			return prohibitedAncestors;
+
+		String[] names = {HTML50Namespace.ElementName.TIME};
+		prohibitedAncestors = elementCollection.getDeclarations(names);
+		return prohibitedAncestors;
+	}
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedVIDEO.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedVIDEO.java
new file mode 100644
index 0000000..98eb444
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contentmodel/HedVIDEO.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.contentmodel;
+
+import java.util.Arrays;
+
+import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMDataType;
+
+
+
+
+/**
+ * VIDEO.
+ */
+final class HedVIDEO extends HedMediaElement {
+
+	
+	public HedVIDEO(ElementCollection collection) {
+		super(HTML50Namespace.ElementName.VIDEO, collection);
+	}
+
+	/**
+	 * MediaElement
+	 * %attrs;
+	 * (src %URI; #REQUIRED): should be defined locally.
+	 * (preload %CDATA; #IMPLIED) 
+	 * (autoplay %ENUM; #IMPLIED) 
+	 * (loop %ENUM; #IMPLIED)
+	 * (controls %MediaType; #IMPLIED)
+	 * (poster %URI; OPTIONAL)
+	 * (height %Length; #IMPLIED)
+	 * (width %Length; #IMPLIED)
+	 * Global attributes
+	 */
+	protected void createAttributeDeclarations() {
+		super.createAttributeDeclarations();
+		
+		// (poster %URI; #optional): should be defined locally.
+		
+		HTMLCMDataTypeImpl atype = null;
+		HTMLAttrDeclImpl attr = null;
+		atype = new HTMLCMDataTypeImpl(CMDataType.URI);
+		attr = new HTMLAttrDeclImpl(HTML50Namespace.ATTR_NAME_POSTER, atype, CMAttributeDeclaration.OPTIONAL);
+		attributes.putNamedItem(HTML50Namespace.ATTR_NAME_POSTER, attr);
+		
+		// height , width
+		String[] names = {HTML40Namespace.ATTR_NAME_HEIGHT, HTML40Namespace.ATTR_NAME_WIDTH};
+		attributeCollection.getDeclarations(attributes, Arrays.asList(names).iterator());
+
+
+		
+	}
+}
+
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contenttype/HTMLHeadTokenizer.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contenttype/HTMLHeadTokenizer.java
index 6f03350..ea727f8 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contenttype/HTMLHeadTokenizer.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contenttype/HTMLHeadTokenizer.java
@@ -1,7 +1,7 @@
-/* The following code was generated by JFlex 1.2.2 on 6/29/09 9:58 AM */
+/* The following code was generated by JFlex 1.2.2 on 8/17/10 3:37 PM */
 
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,8 +24,8 @@
 /**
  * This class is a scanner generated by 
  * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
- * on 6/29/09 9:58 AM from the specification file
- * <tt>file:/D:/dev/workspaces/wtp3M/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.jFlex</tt>
+ * on 8/17/10 3:37 PM from the specification file
+ * <tt>file:/D:/dev/workspaces/helios/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.jFlex</tt>
  */
 public class HTMLHeadTokenizer {
 
@@ -57,14 +57,14 @@
    */
   final private static String yycmap_packed = 
     "\1\11\10\0\1\6\1\7\2\0\1\10\22\0\1\6\1\0\1\40"+
-    "\2\0\1\44\1\0\1\43\5\0\1\34\1\0\1\42\13\0\1\45"+
+    "\2\0\1\46\1\0\1\45\5\0\1\34\1\0\1\44\13\0\1\47"+
     "\1\13\1\12\1\31\1\14\1\0\1\22\1\0\1\24\1\26\1\20"+
     "\1\0\1\30\1\32\1\27\2\0\1\17\1\16\1\23\1\25\1\33"+
-    "\1\35\2\0\1\21\1\36\1\37\1\0\1\15\1\41\7\0\1\22"+
-    "\1\0\1\24\1\26\1\20\1\0\1\30\1\32\1\27\2\0\1\17"+
-    "\1\16\1\23\1\25\1\33\1\35\2\0\1\21\1\36\1\37\1\0"+
-    "\1\15\1\41\101\0\1\4\3\0\1\5\17\0\1\3\16\0\1\1"+
-    "\20\0\1\3\16\0\1\1\1\2\170\0\1\2\ufe87\0";
+    "\1\35\1\42\1\43\1\21\1\36\1\37\1\0\1\15\1\41\7\0"+
+    "\1\22\1\0\1\24\1\26\1\20\1\0\1\30\1\32\1\27\2\0"+
+    "\1\17\1\16\1\23\1\25\1\33\1\35\1\42\1\43\1\21\1\36"+
+    "\1\37\1\0\1\15\1\41\101\0\1\4\3\0\1\5\17\0\1\3"+
+    "\16\0\1\1\20\0\1\3\16\0\1\1\1\2\170\0\1\2\ufe87\0";
 
   /** 
    * Translates characters to character classes
@@ -142,6 +142,7 @@
 
 
 	private boolean hasMore = true;
+	private boolean hasCharsetAttr = false;
 	private final static int MAX_TO_SCAN = 8000;
 	StringBuffer string = new StringBuffer();
 	// state stack for easier state handling
@@ -215,6 +216,7 @@
   		fStateStack.clear();
   		
   		hasMore = true;
+  		hasCharsetAttr = false;
   		
 		// its a little wasteful to "throw away" first char array generated
 		// by class init (via auto generated code), but we really do want
@@ -255,6 +257,9 @@
 		fStateStack.push(yystate());
 
 	}
+	public final boolean hasCharsetAttr() {
+		return hasCharsetAttr;
+	}
 
 	private void popState() {
 		yybegin(fStateStack.pop());
@@ -296,7 +301,7 @@
     char [] map = new char[0x10000];
     int i = 0;  /* index in packed string  */
     int j = 0;  /* index in unpacked array */
-    while (i < 176) {
+    while (i < 180) {
       int  count = packed.charAt(i++);
       char value = packed.charAt(i++);
       do map[j++] = value; while (--count > 0);
@@ -528,21 +533,22 @@
             case 3:
               switch (yy_input) {
                 case 9: yy_isFinal = true; yy_state = 21; break yy_forNext;
-                case 25: yy_isFinal = true; yy_state = 22; break yy_forNext;
-                case 26: yy_isFinal = true; yy_state = 23; break yy_forNext;
-                case 34: yy_isFinal = true; yy_state = 24; break yy_forNext;
+                case 20: yy_isFinal = true; yy_state = 22; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 23; break yy_forNext;
+                case 26: yy_isFinal = true; yy_state = 24; break yy_forNext;
+                case 36: yy_isFinal = true; yy_state = 25; break yy_forNext;
                 default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 9; break yy_forNext;
               }
 
             case 4:
               switch (yy_input) {
                 case 6: 
-                case 8: yy_isFinal = true; yy_state = 26; break yy_forNext;
-                case 7: yy_isFinal = true; yy_state = 27; break yy_forNext;
-                case 9: yy_isFinal = true; yy_state = 28; break yy_forNext;
-                case 32: yy_isFinal = true; yy_state = 29; break yy_forNext;
-                case 35: yy_isFinal = true; yy_state = 30; break yy_forNext;
-                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+                case 8: yy_isFinal = true; yy_state = 27; break yy_forNext;
+                case 7: yy_isFinal = true; yy_state = 28; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 29; break yy_forNext;
+                case 32: yy_isFinal = true; yy_state = 30; break yy_forNext;
+                case 37: yy_isFinal = true; yy_state = 31; break yy_forNext;
+                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 26; break yy_forNext;
               }
 
             case 5:
@@ -550,12 +556,12 @@
                 case 7: 
                 case 8: 
                 case 11: 
-                case 25: yy_isFinal = true; yy_state = 32; break yy_forNext;
-                case 9: yy_isFinal = true; yy_state = 33; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 33; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 34; break yy_forNext;
                 case 12: 
-                case 34: yy_isFinal = true; yy_state = 34; break yy_forNext;
-                case 32: yy_isFinal = true; yy_state = 35; break yy_forNext;
-                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 31; break yy_forNext;
+                case 36: yy_isFinal = true; yy_state = 35; break yy_forNext;
+                case 32: yy_isFinal = true; yy_state = 36; break yy_forNext;
+                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 32; break yy_forNext;
               }
 
             case 6:
@@ -563,28 +569,28 @@
                 case 7: 
                 case 8: 
                 case 11: 
-                case 25: yy_isFinal = true; yy_state = 32; break yy_forNext;
-                case 34: yy_isFinal = true; yy_state = 34; break yy_forNext;
-                case 35: yy_isFinal = true; yy_state = 35; break yy_forNext;
-                case 9: yy_isFinal = true; yy_state = 36; break yy_forNext;
-                case 36: yy_isFinal = true; yy_state = 37; break yy_forNext;
-                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 31; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 33; break yy_forNext;
+                case 36: yy_isFinal = true; yy_state = 35; break yy_forNext;
+                case 37: yy_isFinal = true; yy_state = 36; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 37; break yy_forNext;
+                case 38: yy_isFinal = true; yy_state = 38; break yy_forNext;
+                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 32; break yy_forNext;
               }
 
             case 7:
               switch (yy_input) {
                 case 11: 
-                case 25: yy_isFinal = true; yy_state = 32; break yy_forNext;
-                case 34: yy_isFinal = true; yy_state = 34; break yy_forNext;
-                case 12: yy_isFinal = true; yy_state = 37; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 33; break yy_forNext;
+                case 36: yy_isFinal = true; yy_state = 35; break yy_forNext;
+                case 12: yy_isFinal = true; yy_state = 38; break yy_forNext;
                 case 6: 
                 case 7: 
-                case 8: yy_isFinal = true; yy_state = 38; break yy_forNext;
-                case 9: yy_isFinal = true; yy_state = 39; break yy_forNext;
+                case 8: yy_isFinal = true; yy_state = 39; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 40; break yy_forNext;
                 case 32: 
-                case 35: yy_isFinal = true; yy_state = 40; break yy_forNext;
-                case 37: yy_isFinal = true; yy_pushbackPos = yy_currentPos; yy_pushback = true; yy_state = 41; break yy_forNext;
-                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 31; break yy_forNext;
+                case 37: yy_isFinal = true; yy_state = 41; break yy_forNext;
+                case 39: yy_isFinal = true; yy_pushbackPos = yy_currentPos; yy_pushback = true; yy_state = 42; break yy_forNext;
+                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 32; break yy_forNext;
               }
 
             case 8:
@@ -592,38 +598,38 @@
                 case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 9; break yy_forNext;
                 case 6: 
                 case 7: 
-                case 8: yy_isFinal = true; yy_noLookAhead = true; yy_state = 31; break yy_forNext;
-                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 42; break yy_forNext;
+                case 8: yy_isFinal = true; yy_noLookAhead = true; yy_state = 32; break yy_forNext;
+                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 43; break yy_forNext;
               }
 
             case 10:
               switch (yy_input) {
-                case 2: yy_isFinal = true; yy_noLookAhead = true; yy_state = 43; break yy_forNext;
+                case 2: yy_isFinal = true; yy_noLookAhead = true; yy_state = 44; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 11:
               switch (yy_input) {
-                case 1: yy_isFinal = true; yy_noLookAhead = true; yy_state = 44; break yy_forNext;
+                case 1: yy_isFinal = true; yy_noLookAhead = true; yy_state = 45; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 12:
               switch (yy_input) {
-                case 4: yy_state = 45; break yy_forNext;
+                case 4: yy_state = 46; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 13:
               switch (yy_input) {
-                case 11: yy_state = 46; break yy_forNext;
+                case 11: yy_state = 47; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 14:
               switch (yy_input) {
-                case 9: yy_state = 47; break yy_forNext;
-                case 14: yy_state = 48; break yy_forNext;
+                case 9: yy_state = 48; break yy_forNext;
+                case 14: yy_state = 49; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -631,9 +637,9 @@
               switch (yy_input) {
                 case 6: 
                 case 7: 
-                case 8: yy_state = 49; break yy_forNext;
-                case 9: yy_state = 50; break yy_forNext;
-                case 11: yy_state = 51; break yy_forNext;
+                case 8: yy_state = 50; break yy_forNext;
+                case 9: yy_state = 51; break yy_forNext;
+                case 11: yy_state = 52; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -641,226 +647,224 @@
               switch (yy_input) {
                 case 6: 
                 case 7: 
-                case 8: yy_state = 49; break yy_forNext;
-                case 11: yy_state = 52; break yy_forNext;
+                case 8: yy_state = 50; break yy_forNext;
+                case 11: yy_state = 53; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 17:
               switch (yy_input) {
-                case 14: yy_state = 48; break yy_forNext;
-                case 9: yy_state = 53; break yy_forNext;
-                case 12: yy_state = 54; break yy_forNext;
+                case 14: yy_state = 49; break yy_forNext;
+                case 9: yy_state = 54; break yy_forNext;
+                case 12: yy_state = 55; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 18:
               switch (yy_input) {
-                case 12: yy_state = 55; break yy_forNext;
-                case 16: yy_state = 56; break yy_forNext;
+                case 12: yy_state = 56; break yy_forNext;
+                case 16: yy_state = 57; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 19:
               switch (yy_input) {
-                case 9: yy_state = 57; break yy_forNext;
-                case 25: yy_isFinal = true; yy_state = 58; break yy_forNext;
+                case 9: yy_state = 58; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 59; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 20:
               switch (yy_input) {
-                case 9: yy_state = 59; break yy_forNext;
-                case 19: yy_state = 60; break yy_forNext;
+                case 9: yy_state = 60; break yy_forNext;
+                case 19: yy_state = 61; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 21:
               switch (yy_input) {
-                case 25: yy_isFinal = true; yy_state = 22; break yy_forNext;
-                case 26: yy_state = 61; break yy_forNext;
-                case 34: yy_state = 62; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 23; break yy_forNext;
+                case 20: yy_state = 62; break yy_forNext;
+                case 26: yy_state = 63; break yy_forNext;
+                case 36: yy_state = 64; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 22:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 63; break yy_forNext;
+                case 9: yy_state = 65; break yy_forNext;
+                case 26: yy_state = 66; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 23:
               switch (yy_input) {
-                case 9: yy_state = 64; break yy_forNext;
-                case 17: yy_state = 65; break yy_forNext;
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 67; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 24:
               switch (yy_input) {
-                case 9: yy_state = 66; break yy_forNext;
-                case 25: yy_isFinal = true; yy_state = 67; break yy_forNext;
+                case 9: yy_state = 68; break yy_forNext;
+                case 17: yy_state = 69; break yy_forNext;
                 default: break yy_forAction;
               }
 
-            case 26:
+            case 25:
               switch (yy_input) {
-                case 6: 
-                case 8: yy_isFinal = true; yy_state = 26; break yy_forNext;
-                case 7: yy_state = 68; break yy_forNext;
-                case 9: yy_isFinal = true; yy_state = 69; break yy_forNext;
-                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+                case 9: yy_state = 70; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 71; break yy_forNext;
+                default: break yy_forAction;
               }
 
             case 27:
               switch (yy_input) {
                 case 6: 
-                case 8: yy_isFinal = true; yy_state = 26; break yy_forNext;
-                case 7: yy_state = 68; break yy_forNext;
-                case 9: yy_isFinal = true; yy_state = 69; break yy_forNext;
-                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+                case 8: yy_isFinal = true; yy_state = 27; break yy_forNext;
+                case 7: yy_state = 72; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 73; break yy_forNext;
+                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 26; break yy_forNext;
               }
 
             case 28:
               switch (yy_input) {
-                case 32: yy_isFinal = true; yy_state = 29; break yy_forNext;
-                case 35: yy_isFinal = true; yy_state = 30; break yy_forNext;
                 case 6: 
-                case 7: 
-                case 8: yy_state = 68; break yy_forNext;
-                default: break yy_forAction;
+                case 8: yy_isFinal = true; yy_state = 27; break yy_forNext;
+                case 7: yy_state = 72; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 73; break yy_forNext;
+                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 26; break yy_forNext;
               }
 
             case 29:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 70; break yy_forNext;
+                case 32: yy_isFinal = true; yy_state = 30; break yy_forNext;
+                case 37: yy_isFinal = true; yy_state = 31; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 72; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 30:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 71; break yy_forNext;
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 74; break yy_forNext;
                 default: break yy_forAction;
               }
 
-            case 32:
+            case 31:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 72; break yy_forNext;
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 75; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 33:
               switch (yy_input) {
-                case 7: 
-                case 8: 
-                case 11: 
-                case 25: yy_isFinal = true; yy_state = 32; break yy_forNext;
-                case 32: yy_isFinal = true; yy_state = 35; break yy_forNext;
-                case 12: 
-                case 34: yy_state = 73; break yy_forNext;
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 76; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 34:
               switch (yy_input) {
-                case 9: yy_state = 74; break yy_forNext;
-                case 25: yy_isFinal = true; yy_state = 75; break yy_forNext;
+                case 7: 
+                case 8: 
+                case 11: 
+                case 25: yy_isFinal = true; yy_state = 33; break yy_forNext;
+                case 32: yy_isFinal = true; yy_state = 36; break yy_forNext;
+                case 12: 
+                case 36: yy_state = 77; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 35:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 76; break yy_forNext;
+                case 9: yy_state = 78; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 79; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 36:
               switch (yy_input) {
-                case 7: 
-                case 8: 
-                case 11: 
-                case 25: yy_isFinal = true; yy_state = 32; break yy_forNext;
-                case 35: yy_isFinal = true; yy_state = 35; break yy_forNext;
-                case 34: yy_state = 73; break yy_forNext;
-                case 36: yy_state = 77; break yy_forNext;
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 80; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 37:
               switch (yy_input) {
-                case 25: yy_isFinal = true; yy_state = 32; break yy_forNext;
-                case 9: yy_state = 78; break yy_forNext;
+                case 7: 
+                case 8: 
+                case 11: 
+                case 25: yy_isFinal = true; yy_state = 33; break yy_forNext;
+                case 37: yy_isFinal = true; yy_state = 36; break yy_forNext;
+                case 36: yy_state = 77; break yy_forNext;
+                case 38: yy_state = 81; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 38:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 79; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 33; break yy_forNext;
+                case 9: yy_state = 82; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 39:
               switch (yy_input) {
-                case 11: 
-                case 25: yy_isFinal = true; yy_state = 32; break yy_forNext;
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_state = 38; break yy_forNext;
-                case 32: 
-                case 35: yy_isFinal = true; yy_state = 40; break yy_forNext;
-                case 34: yy_state = 73; break yy_forNext;
-                case 12: yy_state = 77; break yy_forNext;
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 83; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 40:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 80; break yy_forNext;
+                case 11: 
+                case 25: yy_isFinal = true; yy_state = 33; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 39; break yy_forNext;
+                case 32: 
+                case 37: yy_isFinal = true; yy_state = 41; break yy_forNext;
+                case 36: yy_state = 77; break yy_forNext;
+                case 12: yy_state = 81; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 41:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_pushback = true; yy_state = 81; break yy_forNext;
-                case 9: yy_state = 82; break yy_forNext;
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 84; break yy_forNext;
                 default: break yy_forAction;
               }
 
-            case 45:
+            case 42:
               switch (yy_input) {
-                case 5: yy_isFinal = true; yy_noLookAhead = true; yy_state = 83; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_pushback = true; yy_state = 85; break yy_forNext;
+                case 9: yy_state = 86; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 46:
               switch (yy_input) {
-                case 9: yy_state = 47; break yy_forNext;
-                case 14: yy_state = 48; break yy_forNext;
+                case 5: yy_isFinal = true; yy_noLookAhead = true; yy_state = 87; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 47:
               switch (yy_input) {
-                case 14: yy_state = 48; break yy_forNext;
+                case 9: yy_state = 48; break yy_forNext;
+                case 14: yy_state = 49; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 48:
               switch (yy_input) {
-                case 9: yy_state = 84; break yy_forNext;
-                case 16: yy_state = 85; break yy_forNext;
+                case 14: yy_state = 49; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 49:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 49; break yy_forNext;
-                case 9: yy_state = 50; break yy_forNext;
-                case 11: yy_state = 51; break yy_forNext;
+                case 9: yy_state = 88; break yy_forNext;
+                case 16: yy_state = 89; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -868,196 +872,205 @@
               switch (yy_input) {
                 case 6: 
                 case 7: 
-                case 8: yy_state = 49; break yy_forNext;
-                case 11: yy_state = 51; break yy_forNext;
-                case 9: yy_state = 86; break yy_forNext;
+                case 8: yy_state = 50; break yy_forNext;
+                case 9: yy_state = 51; break yy_forNext;
+                case 11: yy_state = 52; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 51:
               switch (yy_input) {
-                case 12: yy_state = 54; break yy_forNext;
-                case 9: yy_state = 87; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 50; break yy_forNext;
+                case 11: yy_state = 52; break yy_forNext;
+                case 9: yy_state = 90; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 52:
               switch (yy_input) {
-                case 14: yy_state = 48; break yy_forNext;
-                case 9: yy_state = 53; break yy_forNext;
-                case 12: yy_state = 54; break yy_forNext;
+                case 12: yy_state = 55; break yy_forNext;
+                case 9: yy_state = 91; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 53:
               switch (yy_input) {
-                case 14: yy_state = 48; break yy_forNext;
-                case 12: yy_state = 54; break yy_forNext;
+                case 14: yy_state = 49; break yy_forNext;
+                case 9: yy_state = 54; break yy_forNext;
+                case 12: yy_state = 55; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 54:
               switch (yy_input) {
-                case 9: yy_state = 88; break yy_forNext;
-                case 13: yy_state = 89; break yy_forNext;
+                case 14: yy_state = 49; break yy_forNext;
+                case 12: yy_state = 55; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 55:
               switch (yy_input) {
-                case 9: yy_state = 57; break yy_forNext;
-                case 25: yy_isFinal = true; yy_state = 58; break yy_forNext;
+                case 9: yy_state = 92; break yy_forNext;
+                case 13: yy_state = 93; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 56:
               switch (yy_input) {
-                case 9: yy_state = 59; break yy_forNext;
-                case 19: yy_state = 60; break yy_forNext;
+                case 9: yy_state = 58; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 59; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 57:
               switch (yy_input) {
-                case 25: yy_isFinal = true; yy_state = 58; break yy_forNext;
+                case 9: yy_state = 60; break yy_forNext;
+                case 19: yy_state = 61; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 58:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 90; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 59; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 59:
               switch (yy_input) {
-                case 19: yy_state = 60; break yy_forNext;
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 94; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 60:
               switch (yy_input) {
-                case 9: yy_state = 91; break yy_forNext;
-                case 20: yy_state = 92; break yy_forNext;
+                case 19: yy_state = 61; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 61:
               switch (yy_input) {
-                case 9: yy_state = 64; break yy_forNext;
-                case 17: yy_state = 65; break yy_forNext;
+                case 9: yy_state = 95; break yy_forNext;
+                case 20: yy_state = 96; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 62:
               switch (yy_input) {
-                case 9: yy_state = 66; break yy_forNext;
-                case 25: yy_isFinal = true; yy_state = 67; break yy_forNext;
+                case 9: yy_state = 65; break yy_forNext;
+                case 26: yy_state = 66; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 63:
+              switch (yy_input) {
+                case 9: yy_state = 68; break yy_forNext;
+                case 17: yy_state = 69; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 64:
               switch (yy_input) {
-                case 17: yy_state = 65; break yy_forNext;
+                case 9: yy_state = 70; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 71; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 65:
               switch (yy_input) {
-                case 9: yy_state = 93; break yy_forNext;
-                case 17: yy_state = 94; break yy_forNext;
+                case 26: yy_state = 66; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 66:
               switch (yy_input) {
-                case 25: yy_isFinal = true; yy_state = 67; break yy_forNext;
-                default: break yy_forAction;
-              }
-
-            case 67:
-              switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 95; break yy_forNext;
+                case 9: yy_state = 97; break yy_forNext;
+                case 18: yy_state = 98; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 68:
               switch (yy_input) {
-                case 6: 
-                case 8: yy_isFinal = true; yy_state = 26; break yy_forNext;
-                case 7: yy_state = 68; break yy_forNext;
-                case 9: yy_isFinal = true; yy_state = 69; break yy_forNext;
-                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+                case 17: yy_state = 69; break yy_forNext;
+                default: break yy_forAction;
               }
 
             case 69:
               switch (yy_input) {
+                case 9: yy_state = 99; break yy_forNext;
+                case 17: yy_state = 100; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 70:
+              switch (yy_input) {
+                case 25: yy_isFinal = true; yy_state = 71; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 71:
+              switch (yy_input) {
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 101; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 72:
+              switch (yy_input) {
                 case 6: 
-                case 8: yy_isFinal = true; yy_state = 26; break yy_forNext;
-                case 7: yy_state = 68; break yy_forNext;
-                case 9: yy_isFinal = true; yy_state = 96; break yy_forNext;
-                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+                case 8: yy_isFinal = true; yy_state = 27; break yy_forNext;
+                case 7: yy_state = 72; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 73; break yy_forNext;
+                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 26; break yy_forNext;
               }
 
             case 73:
               switch (yy_input) {
-                case 9: yy_state = 74; break yy_forNext;
-                case 25: yy_isFinal = true; yy_state = 75; break yy_forNext;
-                default: break yy_forAction;
-              }
-
-            case 74:
-              switch (yy_input) {
-                case 25: yy_isFinal = true; yy_state = 75; break yy_forNext;
-                default: break yy_forAction;
-              }
-
-            case 75:
-              switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 97; break yy_forNext;
-                default: break yy_forAction;
+                case 6: 
+                case 8: yy_isFinal = true; yy_state = 27; break yy_forNext;
+                case 7: yy_state = 72; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 102; break yy_forNext;
+                default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 26; break yy_forNext;
               }
 
             case 77:
               switch (yy_input) {
-                case 25: yy_isFinal = true; yy_state = 32; break yy_forNext;
                 case 9: yy_state = 78; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 79; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 78:
               switch (yy_input) {
-                case 25: yy_isFinal = true; yy_state = 32; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 79; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 79:
+              switch (yy_input) {
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 103; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 81:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_pushback = true; yy_state = 81; break yy_forNext;
-                case 9: yy_isFinal = true; yy_pushback = true; yy_state = 98; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 33; break yy_forNext;
+                case 9: yy_state = 82; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 82:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_pushback = true; yy_state = 81; break yy_forNext;
-                default: break yy_forAction;
-              }
-
-            case 84:
-              switch (yy_input) {
-                case 16: yy_state = 85; break yy_forNext;
+                case 25: yy_isFinal = true; yy_state = 33; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 85:
               switch (yy_input) {
-                case 9: yy_state = 99; break yy_forNext;
-                case 17: yy_state = 100; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_pushback = true; yy_state = 85; break yy_forNext;
+                case 9: yy_isFinal = true; yy_pushback = true; yy_state = 104; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -1065,70 +1078,74 @@
               switch (yy_input) {
                 case 6: 
                 case 7: 
-                case 8: yy_state = 49; break yy_forNext;
-                case 11: yy_state = 51; break yy_forNext;
-                default: break yy_forAction;
-              }
-
-            case 87:
-              switch (yy_input) {
-                case 12: yy_state = 54; break yy_forNext;
+                case 8: yy_isFinal = true; yy_pushback = true; yy_state = 85; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 88:
               switch (yy_input) {
-                case 13: yy_state = 89; break yy_forNext;
+                case 16: yy_state = 89; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 89:
               switch (yy_input) {
-                case 9: yy_state = 101; break yy_forNext;
-                case 14: yy_state = 102; break yy_forNext;
+                case 9: yy_state = 105; break yy_forNext;
+                case 17: yy_state = 106; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 90:
+              switch (yy_input) {
+                case 6: 
+                case 7: 
+                case 8: yy_state = 50; break yy_forNext;
+                case 11: yy_state = 52; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 91:
               switch (yy_input) {
-                case 20: yy_state = 92; break yy_forNext;
+                case 12: yy_state = 55; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 92:
               switch (yy_input) {
-                case 9: yy_state = 103; break yy_forNext;
-                case 21: yy_state = 104; break yy_forNext;
+                case 13: yy_state = 93; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 93:
               switch (yy_input) {
-                case 17: yy_state = 94; break yy_forNext;
+                case 9: yy_state = 107; break yy_forNext;
+                case 14: yy_state = 108; break yy_forNext;
                 default: break yy_forAction;
               }
 
-            case 94:
+            case 95:
               switch (yy_input) {
-                case 9: yy_state = 105; break yy_forNext;
-                case 27: yy_state = 106; break yy_forNext;
+                case 20: yy_state = 96; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 96:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 68; break yy_forNext;
+                case 9: yy_state = 109; break yy_forNext;
+                case 21: yy_state = 110; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 97:
+              switch (yy_input) {
+                case 18: yy_state = 98; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 98:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_pushback = true; yy_state = 81; break yy_forNext;
-                case 9: yy_state = 82; break yy_forNext;
+                case 9: yy_state = 111; break yy_forNext;
+                case 34: yy_state = 112; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -1140,310 +1157,278 @@
 
             case 100:
               switch (yy_input) {
-                case 9: yy_state = 107; break yy_forNext;
-                case 18: yy_isFinal = true; yy_state = 108; break yy_forNext;
-                default: break yy_forAction;
-              }
-
-            case 101:
-              switch (yy_input) {
-                case 14: yy_state = 102; break yy_forNext;
+                case 9: yy_state = 113; break yy_forNext;
+                case 27: yy_state = 114; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 102:
               switch (yy_input) {
-                case 9: yy_state = 109; break yy_forNext;
-                case 15: yy_state = 110; break yy_forNext;
-                default: break yy_forAction;
-              }
-
-            case 103:
-              switch (yy_input) {
-                case 21: yy_state = 104; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 72; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 104:
               switch (yy_input) {
-                case 9: yy_state = 111; break yy_forNext;
-                case 22: yy_state = 112; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_pushback = true; yy_state = 85; break yy_forNext;
+                case 9: yy_state = 86; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 105:
               switch (yy_input) {
-                case 27: yy_state = 106; break yy_forNext;
+                case 17: yy_state = 106; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 106:
               switch (yy_input) {
-                case 9: yy_state = 113; break yy_forNext;
-                case 28: yy_state = 114; break yy_forNext;
+                case 9: yy_state = 115; break yy_forNext;
+                case 18: yy_isFinal = true; yy_state = 116; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 107:
               switch (yy_input) {
-                case 18: yy_isFinal = true; yy_state = 108; break yy_forNext;
+                case 14: yy_state = 108; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 108:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 115; break yy_forNext;
+                case 9: yy_state = 117; break yy_forNext;
+                case 15: yy_state = 118; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 109:
               switch (yy_input) {
-                case 15: yy_state = 110; break yy_forNext;
+                case 21: yy_state = 110; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 110:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_state = 116; break yy_forNext;
-                case 9: yy_state = 117; break yy_forNext;
+                case 9: yy_state = 119; break yy_forNext;
+                case 22: yy_state = 120; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 111:
               switch (yy_input) {
-                case 22: yy_state = 112; break yy_forNext;
+                case 34: yy_state = 112; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 112:
               switch (yy_input) {
-                case 9: yy_state = 118; break yy_forNext;
-                case 23: yy_state = 119; break yy_forNext;
+                case 9: yy_state = 121; break yy_forNext;
+                case 35: yy_state = 122; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 113:
               switch (yy_input) {
-                case 28: yy_state = 114; break yy_forNext;
+                case 27: yy_state = 114; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 114:
               switch (yy_input) {
-                case 9: yy_state = 120; break yy_forNext;
-                case 16: yy_state = 121; break yy_forNext;
+                case 9: yy_state = 123; break yy_forNext;
+                case 28: yy_state = 124; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 115:
+              switch (yy_input) {
+                case 18: yy_isFinal = true; yy_state = 116; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 116:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_state = 116; break yy_forNext;
-                case 9: yy_isFinal = true; yy_state = 122; break yy_forNext;
+                case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 125; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 117:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_state = 116; break yy_forNext;
-                case 9: yy_state = 123; break yy_forNext;
+                case 15: yy_state = 118; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 118:
               switch (yy_input) {
-                case 23: yy_state = 119; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 126; break yy_forNext;
+                case 9: yy_state = 127; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 119:
               switch (yy_input) {
-                case 9: yy_state = 124; break yy_forNext;
-                case 19: yy_state = 125; break yy_forNext;
+                case 22: yy_state = 120; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 120:
               switch (yy_input) {
-                case 16: yy_state = 121; break yy_forNext;
+                case 9: yy_state = 128; break yy_forNext;
+                case 23: yy_state = 129; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 121:
               switch (yy_input) {
-                case 9: yy_state = 126; break yy_forNext;
-                case 29: yy_state = 127; break yy_forNext;
+                case 35: yy_state = 122; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 122:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_state = 116; break yy_forNext;
-                case 9: yy_state = 123; break yy_forNext;
+                case 9: yy_state = 130; break yy_forNext;
+                case 16: yy_state = 131; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 123:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_state = 116; break yy_forNext;
+                case 28: yy_state = 124; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 124:
               switch (yy_input) {
-                case 19: yy_state = 125; break yy_forNext;
-                default: break yy_forAction;
-              }
-
-            case 125:
-              switch (yy_input) {
-                case 9: yy_state = 128; break yy_forNext;
-                case 24: yy_state = 129; break yy_forNext;
+                case 9: yy_state = 132; break yy_forNext;
+                case 16: yy_state = 133; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 126:
               switch (yy_input) {
-                case 29: yy_state = 127; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 126; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 134; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 127:
               switch (yy_input) {
-                case 9: yy_state = 130; break yy_forNext;
-                case 30: yy_state = 131; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 126; break yy_forNext;
+                case 9: yy_state = 135; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 128:
               switch (yy_input) {
-                case 24: yy_state = 129; break yy_forNext;
+                case 23: yy_state = 129; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 129:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 129; break yy_forNext;
-                case 9: yy_state = 132; break yy_forNext;
-                case 10: yy_isFinal = true; yy_state = 133; break yy_forNext;
+                case 9: yy_state = 136; break yy_forNext;
+                case 19: yy_state = 137; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 130:
               switch (yy_input) {
-                case 30: yy_state = 131; break yy_forNext;
+                case 16: yy_state = 131; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 131:
               switch (yy_input) {
-                case 9: yy_state = 134; break yy_forNext;
-                case 23: yy_state = 135; break yy_forNext;
+                case 9: yy_state = 138; break yy_forNext;
+                case 17: yy_state = 139; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 132:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 129; break yy_forNext;
-                case 10: yy_isFinal = true; yy_state = 133; break yy_forNext;
-                case 9: yy_state = 136; break yy_forNext;
+                case 16: yy_state = 133; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 133:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_state = 137; break yy_forNext;
-                case 9: yy_state = 138; break yy_forNext;
+                case 9: yy_state = 140; break yy_forNext;
+                case 29: yy_state = 141; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 134:
               switch (yy_input) {
-                case 23: yy_state = 135; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 126; break yy_forNext;
+                case 9: yy_state = 135; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 135:
               switch (yy_input) {
-                case 9: yy_state = 139; break yy_forNext;
-                case 31: yy_state = 140; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 126; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 136:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 129; break yy_forNext;
+                case 19: yy_state = 137; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 137:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_state = 133; break yy_forNext;
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_state = 137; break yy_forNext;
+                case 9: yy_state = 142; break yy_forNext;
+                case 24: yy_state = 143; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 138:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_state = 137; break yy_forNext;
+                case 17: yy_state = 139; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 139:
               switch (yy_input) {
-                case 31: yy_state = 140; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 139; break yy_forNext;
+                case 9: yy_state = 144; break yy_forNext;
+                case 10: yy_isFinal = true; yy_state = 145; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 140:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 140; break yy_forNext;
-                case 9: yy_state = 141; break yy_forNext;
-                case 10: yy_state = 142; break yy_forNext;
+                case 29: yy_state = 141; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 141:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 140; break yy_forNext;
-                case 10: yy_state = 142; break yy_forNext;
-                case 9: yy_state = 143; break yy_forNext;
+                case 9: yy_state = 146; break yy_forNext;
+                case 30: yy_state = 147; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 142:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 144; break yy_forNext;
-                case 9: yy_state = 145; break yy_forNext;
-                case 20: yy_state = 146; break yy_forNext;
-                case 32: yy_state = 147; break yy_forNext;
+                case 24: yy_state = 143; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -1451,18 +1436,19 @@
               switch (yy_input) {
                 case 6: 
                 case 7: 
-                case 8: yy_state = 140; break yy_forNext;
+                case 8: yy_state = 143; break yy_forNext;
+                case 9: yy_state = 148; break yy_forNext;
+                case 10: yy_isFinal = true; yy_state = 149; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 144:
               switch (yy_input) {
-                case 9: yy_state = 142; break yy_forNext;
                 case 6: 
                 case 7: 
-                case 8: yy_state = 144; break yy_forNext;
-                case 20: yy_state = 146; break yy_forNext;
-                case 32: yy_state = 147; break yy_forNext;
+                case 8: yy_state = 139; break yy_forNext;
+                case 10: yy_isFinal = true; yy_state = 145; break yy_forNext;
+                case 9: yy_state = 150; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -1470,326 +1456,343 @@
               switch (yy_input) {
                 case 6: 
                 case 7: 
-                case 8: yy_state = 144; break yy_forNext;
-                case 20: yy_state = 146; break yy_forNext;
-                case 32: yy_state = 147; break yy_forNext;
-                case 9: yy_state = 148; break yy_forNext;
+                case 8: yy_isFinal = true; yy_state = 151; break yy_forNext;
+                case 9: yy_state = 152; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 146:
               switch (yy_input) {
-                case 9: yy_state = 149; break yy_forNext;
-                case 21: yy_state = 150; break yy_forNext;
+                case 30: yy_state = 147; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 147:
               switch (yy_input) {
-                case 20: yy_state = 146; break yy_forNext;
-                case 9: yy_state = 148; break yy_forNext;
+                case 9: yy_state = 153; break yy_forNext;
+                case 23: yy_state = 154; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 148:
               switch (yy_input) {
-                case 20: yy_state = 146; break yy_forNext;
-                case 9: yy_state = 151; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 143; break yy_forNext;
+                case 10: yy_isFinal = true; yy_state = 149; break yy_forNext;
+                case 9: yy_state = 155; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 149:
               switch (yy_input) {
-                case 21: yy_state = 150; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 156; break yy_forNext;
+                case 9: yy_state = 157; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 150:
               switch (yy_input) {
-                case 9: yy_state = 152; break yy_forNext;
-                case 19: yy_state = 153; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 139; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 151:
               switch (yy_input) {
-                case 20: yy_state = 146; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 145; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 151; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 152:
               switch (yy_input) {
-                case 19: yy_state = 153; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 151; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 153:
               switch (yy_input) {
-                case 9: yy_state = 154; break yy_forNext;
-                case 17: yy_state = 155; break yy_forNext;
+                case 23: yy_state = 154; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 154:
               switch (yy_input) {
-                case 17: yy_state = 155; break yy_forNext;
+                case 9: yy_state = 158; break yy_forNext;
+                case 31: yy_state = 159; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 155:
               switch (yy_input) {
-                case 9: yy_state = 156; break yy_forNext;
-                case 16: yy_state = 157; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 143; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 156:
               switch (yy_input) {
-                case 16: yy_state = 157; break yy_forNext;
+                case 9: yy_isFinal = true; yy_state = 149; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 156; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 157:
               switch (yy_input) {
-                case 9: yy_state = 158; break yy_forNext;
-                case 19: yy_state = 159; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 156; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 158:
               switch (yy_input) {
-                case 19: yy_state = 159; break yy_forNext;
+                case 31: yy_state = 159; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 159:
               switch (yy_input) {
+                case 6: 
+                case 7: 
+                case 8: yy_state = 159; break yy_forNext;
                 case 9: yy_state = 160; break yy_forNext;
-                case 17: yy_state = 161; break yy_forNext;
+                case 10: yy_state = 161; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 160:
               switch (yy_input) {
-                case 17: yy_state = 161; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 159; break yy_forNext;
+                case 10: yy_state = 161; break yy_forNext;
+                case 9: yy_state = 162; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 161:
               switch (yy_input) {
-                case 9: yy_state = 162; break yy_forNext;
-                case 28: yy_state = 163; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 163; break yy_forNext;
+                case 9: yy_state = 164; break yy_forNext;
+                case 20: yy_state = 165; break yy_forNext;
+                case 32: yy_state = 166; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 162:
               switch (yy_input) {
-                case 28: yy_state = 163; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 159; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 163:
               switch (yy_input) {
-                case 9: yy_state = 164; break yy_forNext;
-                case 17: yy_state = 165; break yy_forNext;
+                case 9: yy_state = 161; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 163; break yy_forNext;
+                case 20: yy_state = 165; break yy_forNext;
+                case 32: yy_state = 166; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 164:
               switch (yy_input) {
-                case 17: yy_state = 165; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 163; break yy_forNext;
+                case 20: yy_state = 165; break yy_forNext;
+                case 32: yy_state = 166; break yy_forNext;
+                case 9: yy_state = 167; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 165:
               switch (yy_input) {
-                case 9: yy_state = 166; break yy_forNext;
-                case 33: yy_state = 167; break yy_forNext;
+                case 9: yy_state = 168; break yy_forNext;
+                case 21: yy_state = 169; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 166:
               switch (yy_input) {
-                case 33: yy_state = 167; break yy_forNext;
+                case 20: yy_state = 165; break yy_forNext;
+                case 9: yy_state = 167; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 167:
               switch (yy_input) {
-                case 9: yy_state = 168; break yy_forNext;
-                case 27: yy_state = 169; break yy_forNext;
+                case 20: yy_state = 165; break yy_forNext;
+                case 9: yy_state = 170; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 168:
               switch (yy_input) {
-                case 27: yy_state = 169; break yy_forNext;
+                case 21: yy_state = 169; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 169:
               switch (yy_input) {
-                case 9: yy_state = 170; break yy_forNext;
-                case 16: yy_state = 171; break yy_forNext;
+                case 9: yy_state = 171; break yy_forNext;
+                case 19: yy_state = 172; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 170:
               switch (yy_input) {
-                case 16: yy_state = 171; break yy_forNext;
+                case 20: yy_state = 165; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 171:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 172; break yy_forNext;
-                case 9: yy_state = 173; break yy_forNext;
-                case 32: yy_state = 174; break yy_forNext;
+                case 19: yy_state = 172; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 172:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 172; break yy_forNext;
-                case 9: yy_state = 175; break yy_forNext;
-                case 20: yy_state = 176; break yy_forNext;
+                case 9: yy_state = 173; break yy_forNext;
+                case 17: yy_state = 174; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 173:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 172; break yy_forNext;
-                case 32: yy_state = 174; break yy_forNext;
-                case 9: yy_state = 177; break yy_forNext;
+                case 17: yy_state = 174; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 174:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 172; break yy_forNext;
-                case 9: yy_state = 177; break yy_forNext;
+                case 9: yy_state = 175; break yy_forNext;
+                case 16: yy_state = 176; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 175:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 172; break yy_forNext;
-                case 20: yy_state = 176; break yy_forNext;
-                case 9: yy_state = 178; break yy_forNext;
+                case 16: yy_state = 176; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 176:
               switch (yy_input) {
-                case 9: yy_state = 179; break yy_forNext;
-                case 21: yy_state = 180; break yy_forNext;
+                case 9: yy_state = 177; break yy_forNext;
+                case 19: yy_state = 178; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 177:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 172; break yy_forNext;
-                case 9: yy_state = 181; break yy_forNext;
+                case 19: yy_state = 178; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 178:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 172; break yy_forNext;
-                case 20: yy_state = 176; break yy_forNext;
+                case 9: yy_state = 179; break yy_forNext;
+                case 17: yy_state = 180; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 179:
               switch (yy_input) {
-                case 21: yy_state = 180; break yy_forNext;
+                case 17: yy_state = 180; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 180:
               switch (yy_input) {
-                case 9: yy_state = 182; break yy_forNext;
-                case 19: yy_state = 183; break yy_forNext;
+                case 9: yy_state = 181; break yy_forNext;
+                case 28: yy_state = 182; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 181:
               switch (yy_input) {
-                case 6: 
-                case 7: 
-                case 8: yy_state = 172; break yy_forNext;
+                case 28: yy_state = 182; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 182:
               switch (yy_input) {
-                case 19: yy_state = 183; break yy_forNext;
+                case 9: yy_state = 183; break yy_forNext;
+                case 17: yy_state = 184; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 183:
               switch (yy_input) {
-                case 9: yy_state = 184; break yy_forNext;
-                case 17: yy_state = 185; break yy_forNext;
+                case 17: yy_state = 184; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 184:
               switch (yy_input) {
-                case 17: yy_state = 185; break yy_forNext;
+                case 9: yy_state = 185; break yy_forNext;
+                case 33: yy_state = 186; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 185:
               switch (yy_input) {
-                case 9: yy_state = 186; break yy_forNext;
-                case 16: yy_state = 187; break yy_forNext;
+                case 33: yy_state = 186; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 186:
               switch (yy_input) {
-                case 16: yy_state = 187; break yy_forNext;
+                case 9: yy_state = 187; break yy_forNext;
+                case 27: yy_state = 188; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 187:
               switch (yy_input) {
-                case 9: yy_state = 188; break yy_forNext;
-                case 19: yy_state = 189; break yy_forNext;
+                case 27: yy_state = 188; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 188:
               switch (yy_input) {
-                case 19: yy_state = 189; break yy_forNext;
+                case 9: yy_state = 189; break yy_forNext;
+                case 16: yy_state = 190; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 189:
               switch (yy_input) {
-                case 9: yy_state = 190; break yy_forNext;
-                case 17: yy_state = 191; break yy_forNext;
+                case 16: yy_state = 190; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 190:
               switch (yy_input) {
-                case 17: yy_state = 191; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_state = 191; break yy_forNext;
+                case 9: yy_state = 192; break yy_forNext;
+                case 32: yy_state = 193; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -1798,8 +1801,8 @@
                 case 6: 
                 case 7: 
                 case 8: yy_state = 191; break yy_forNext;
-                case 9: yy_state = 192; break yy_forNext;
-                case 10: yy_isFinal = true; yy_state = 193; break yy_forNext;
+                case 9: yy_state = 194; break yy_forNext;
+                case 20: yy_state = 195; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -1808,8 +1811,8 @@
                 case 6: 
                 case 7: 
                 case 8: yy_state = 191; break yy_forNext;
-                case 10: yy_isFinal = true; yy_state = 193; break yy_forNext;
-                case 9: yy_state = 194; break yy_forNext;
+                case 32: yy_state = 193; break yy_forNext;
+                case 9: yy_state = 196; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -1817,7 +1820,7 @@
               switch (yy_input) {
                 case 6: 
                 case 7: 
-                case 8: yy_isFinal = true; yy_state = 195; break yy_forNext;
+                case 8: yy_state = 191; break yy_forNext;
                 case 9: yy_state = 196; break yy_forNext;
                 default: break yy_forAction;
               }
@@ -1827,15 +1830,15 @@
                 case 6: 
                 case 7: 
                 case 8: yy_state = 191; break yy_forNext;
+                case 20: yy_state = 195; break yy_forNext;
+                case 9: yy_state = 197; break yy_forNext;
                 default: break yy_forAction;
               }
 
             case 195:
               switch (yy_input) {
-                case 9: yy_isFinal = true; yy_state = 193; break yy_forNext;
-                case 6: 
-                case 7: 
-                case 8: yy_isFinal = true; yy_state = 195; break yy_forNext;
+                case 9: yy_state = 198; break yy_forNext;
+                case 21: yy_state = 199; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -1843,7 +1846,150 @@
               switch (yy_input) {
                 case 6: 
                 case 7: 
-                case 8: yy_isFinal = true; yy_state = 195; break yy_forNext;
+                case 8: yy_state = 191; break yy_forNext;
+                case 9: yy_state = 200; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 197:
+              switch (yy_input) {
+                case 6: 
+                case 7: 
+                case 8: yy_state = 191; break yy_forNext;
+                case 20: yy_state = 195; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 198:
+              switch (yy_input) {
+                case 21: yy_state = 199; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 199:
+              switch (yy_input) {
+                case 9: yy_state = 201; break yy_forNext;
+                case 19: yy_state = 202; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 200:
+              switch (yy_input) {
+                case 6: 
+                case 7: 
+                case 8: yy_state = 191; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 201:
+              switch (yy_input) {
+                case 19: yy_state = 202; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 202:
+              switch (yy_input) {
+                case 9: yy_state = 203; break yy_forNext;
+                case 17: yy_state = 204; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 203:
+              switch (yy_input) {
+                case 17: yy_state = 204; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 204:
+              switch (yy_input) {
+                case 9: yy_state = 205; break yy_forNext;
+                case 16: yy_state = 206; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 205:
+              switch (yy_input) {
+                case 16: yy_state = 206; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 206:
+              switch (yy_input) {
+                case 9: yy_state = 207; break yy_forNext;
+                case 19: yy_state = 208; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 207:
+              switch (yy_input) {
+                case 19: yy_state = 208; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 208:
+              switch (yy_input) {
+                case 9: yy_state = 209; break yy_forNext;
+                case 17: yy_state = 210; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 209:
+              switch (yy_input) {
+                case 17: yy_state = 210; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 210:
+              switch (yy_input) {
+                case 6: 
+                case 7: 
+                case 8: yy_state = 210; break yy_forNext;
+                case 9: yy_state = 211; break yy_forNext;
+                case 10: yy_isFinal = true; yy_state = 212; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 211:
+              switch (yy_input) {
+                case 6: 
+                case 7: 
+                case 8: yy_state = 210; break yy_forNext;
+                case 10: yy_isFinal = true; yy_state = 212; break yy_forNext;
+                case 9: yy_state = 213; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 212:
+              switch (yy_input) {
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 214; break yy_forNext;
+                case 9: yy_state = 215; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 213:
+              switch (yy_input) {
+                case 6: 
+                case 7: 
+                case 8: yy_state = 210; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 214:
+              switch (yy_input) {
+                case 9: yy_isFinal = true; yy_state = 212; break yy_forNext;
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 214; break yy_forNext;
+                default: break yy_forAction;
+              }
+
+            case 215:
+              switch (yy_input) {
+                case 6: 
+                case 7: 
+                case 8: yy_isFinal = true; yy_state = 214; break yy_forNext;
                 default: break yy_forAction;
               }
 
@@ -1867,37 +2013,37 @@
 
       switch (yy_action) {    
 
-        case 32: 
-        case 72: 
+        case 33: 
+        case 76: 
           {  yypushback(yylength());popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
-        case 198: break;
-        case 25: 
+        case 217: break;
         case 26: 
-        case 28: 
-        case 69: 
-        case 96: 
+        case 27: 
+        case 29: 
+        case 73: 
+        case 102: 
           {  yypushback(1); yybegin(UnDelimitedString); string.setLength(0); }
-        case 199: break;
-        case 22: 
-        case 63: 
-          {  yybegin(YYINITIAL);  if (foundContentTypeValue) hasMore = false; return HTMLHeadTokenizerConstants.MetaTagEnd; }
-        case 200: break;
-        case 40: 
-        case 80: 
-          {  yypushback(yylength());popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue; }
-        case 201: break;
+        case 218: break;
+        case 23: 
         case 67: 
-        case 95: 
+          {  yybegin(YYINITIAL);  if (foundContentTypeValue) hasMore = false; return HTMLHeadTokenizerConstants.MetaTagEnd; }
+        case 219: break;
+        case 41: 
+        case 84: 
+          {  yypushback(yylength());popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue; }
+        case 220: break;
+        case 71: 
+        case 101: 
           {  yybegin(YYINITIAL); if (foundContentTypeValue) hasMore = false; return HTMLHeadTokenizerConstants.MetaTagEnd; }
-        case 202: break;
-        case 75: 
-        case 97: 
+        case 221: break;
+        case 79: 
+        case 103: 
           {  yypushback(yylength()); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
-        case 203: break;
-        case 116: 
-        case 122: 
+        case 222: break;
+        case 126: 
+        case 134: 
           { if (yychar == 0 ) {yybegin(ST_XMLDecl); return XMLHeadTokenizerConstants.XMLDeclStart;} }
-        case 204: break;
+        case 223: break;
         case 9: 
         case 10: 
         case 11: 
@@ -1911,68 +2057,73 @@
         case 19: 
         case 20: 
         case 21: 
-        case 23: 
+        case 22: 
         case 24: 
-        case 27: 
-        case 33: 
-        case 36: 
-        case 39: 
-          { if(yychar > MAX_TO_SCAN) {hasMore=false; return EncodingParserConstants.MAX_CHARS_REACHED;} }
-        case 205: break;
-        case 108: 
-        case 115: 
-          { yybegin(ST_META_TAG); return HTMLHeadTokenizerConstants.MetaTagStart; }
-        case 206: break;
-        case 58: 
-        case 90: 
-          { yybegin(YYINITIAL);  return XMLHeadTokenizerConstants.XMLDeclEnd; }
-        case 207: break;
-        case 193: 
-        case 195: 
-          { pushCurrentState(); yybegin(QuotedAttributeValue); foundContentTypeValue=true; return HTMLHeadTokenizerConstants.MetaTagContentType; }
-        case 208: break;
-        case 133: 
-        case 137: 
-          { pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDelEncoding; }
-        case 209: break;
-        case 83: 
-          { hasMore = false; return EncodingParserConstants.UTF83ByteBOM; }
-        case 210: break;
-        case 43: 
-          { hasMore = false; return EncodingParserConstants.UTF16BE; }
-        case 211: break;
-        case 44: 
-          { hasMore = false; return EncodingParserConstants.UTF16LE; }
-        case 212: break;
-        case 35: 
-        case 76: 
-          {  popState(); valueText = string.toString(); return EncodingParserConstants.StringValue;  }
-        case 213: break;
-        case 31: 
+        case 25: 
+        case 28: 
         case 34: 
         case 37: 
-          {  string.append( yytext() );  }
-        case 214: break;
-        case 30: 
-        case 71: 
-          {  yybegin(SQ_STRING); string.setLength(0);  }
-        case 215: break;
-        case 29: 
-        case 70: 
-          {  yybegin(DQ_STRING); string.setLength(0);  }
-        case 216: break;
+        case 40: 
+          { if(yychar > MAX_TO_SCAN) {hasMore=false; return EncodingParserConstants.MAX_CHARS_REACHED;} }
+        case 224: break;
+        case 116: 
+        case 125: 
+          { yybegin(ST_META_TAG); return HTMLHeadTokenizerConstants.MetaTagStart; }
+        case 225: break;
+        case 59: 
+        case 94: 
+          { yybegin(YYINITIAL);  return XMLHeadTokenizerConstants.XMLDeclEnd; }
+        case 226: break;
+        case 212: 
+        case 214: 
+          { pushCurrentState(); yybegin(QuotedAttributeValue); foundContentTypeValue=true; return HTMLHeadTokenizerConstants.MetaTagContentType; }
+        case 227: break;
+        case 149: 
+        case 156: 
+          { pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDelEncoding; }
+        case 228: break;
+        case 145: 
+        case 151: 
+          { pushCurrentState(); yybegin(QuotedAttributeValue); foundContentTypeValue=true; hasCharsetAttr=true; return HTMLHeadTokenizerConstants.MetaTagContentType; }
+        case 229: break;
+        case 87: 
+          { hasMore = false; return EncodingParserConstants.UTF83ByteBOM; }
+        case 230: break;
+        case 44: 
+          { hasMore = false; return EncodingParserConstants.UTF16BE; }
+        case 231: break;
+        case 45: 
+          { hasMore = false; return EncodingParserConstants.UTF16LE; }
+        case 232: break;
+        case 36: 
+        case 80: 
+          {  popState(); valueText = string.toString(); return EncodingParserConstants.StringValue;  }
+        case 233: break;
+        case 32: 
+        case 35: 
         case 38: 
-        case 79: 
+          {  string.append( yytext() );  }
+        case 234: break;
+        case 31: 
+        case 75: 
+          {  yybegin(SQ_STRING); string.setLength(0);  }
+        case 235: break;
+        case 30: 
+        case 74: 
+          {  yybegin(DQ_STRING); string.setLength(0);  }
+        case 236: break;
+        case 39: 
+        case 83: 
           {  yypushback(yylength());popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue;  }
-        case 217: break;
-        case 41: 
-        case 81: 
-        case 98: 
-          {  pushCurrentState(); yybegin(UnDelimitedCharset); string.append( yytext() );  }
-        case 218: break;
+        case 237: break;
         case 42: 
+        case 85: 
+        case 104: 
+          {  pushCurrentState(); yybegin(UnDelimitedCharset); string.append( yytext() );  }
+        case 238: break;
+        case 43: 
           { yypushback(1); popState();  }
-        case 219: break;
+        case 239: break;
         default: 
           if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
             yy_atEOF = true;
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contenttype/HTMLResourceEncodingDetector.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contenttype/HTMLResourceEncodingDetector.java
index 0367e54..9754fa8 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contenttype/HTMLResourceEncodingDetector.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/contenttype/HTMLResourceEncodingDetector.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -146,7 +146,15 @@
 		}
 		while (tokenizer.hasMoreTokens());
 		if (contentTypeValue != null) {
-			parseContentTypeValue(contentTypeValue);
+			if (tokenizer.hasCharsetAttr()) {
+				contentTypeValue = contentTypeValue.trim();
+				if (contentTypeValue.length() > 0) {
+					createEncodingMemento(contentTypeValue, EncodingMemento.FOUND_ENCODING_IN_CONTENT);
+				}
+			}
+			else {
+				parseContentTypeValue(contentTypeValue);
+			}
 		}
 	}
 
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeAdapter.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeAdapter.java
index 1f806e5..5ae259e 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeAdapter.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -72,9 +72,11 @@
 
 		// find DOCTYPE delcaration and Public ID
 		String publicId = null;
+		String systemId = null;
 		DocumentType newDocumentType = findDocumentType(document);
 		if (newDocumentType != null) {
 			publicId = newDocumentType.getPublicId();
+			systemId = newDocumentType.getSystemId();
 		}
 		else {
 			// lookup default set by contentsettings
@@ -86,6 +88,9 @@
 		if (publicId != null) {
 			newEntry = HTMLDocumentTypeRegistry.getInstance().getEntry(publicId);
 		}
+		else if (systemId == null){
+				newEntry = HTMLDocumentTypeRegistry.getInstance().getDefaultEntry(HTMLDocumentTypeRegistry.DEFAULT_HTML5);
+		}
 
 		boolean newXMLType = (newEntry != null ? newEntry.isXMLType() : false);
 		boolean newWMLType = (newEntry != null ? newEntry.isWMLType() : false);
@@ -137,7 +142,7 @@
 				if (impl != null) {
 					String name = newEntry.getName();
 					publicId = newEntry.getPublicId();
-					String systemId = newEntry.getSystemId();
+					systemId = newEntry.getSystemId();
 					newDocumentType = impl.createDocumentType(name, publicId, systemId);
 				}
 			}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeRegistry.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeRegistry.java
index a14be96..8f3ca14 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeRegistry.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/document/HTMLDocumentTypeRegistry.java
@@ -39,11 +39,15 @@
 	private HTMLDocumentTypeEntry defaultXHTMLEntry = null;
 	private HTMLDocumentTypeEntry defaultWMLEntry = null;
 	private HTMLDocumentTypeEntry defaultCHTMLEntry = null;
+	private HTMLDocumentTypeEntry defaultHTML5Entry = null;
+	private HTMLDocumentTypeEntry defaultXHTML5Entry = null;
 
 	final static int DEFAULT_HTML = 0;
 	final static int DEFAULT_XHTML = 1;
 	final static int DEFAULT_WML = 2;
 	final static int DEFAULT_CHTML = 3;
+	final static int DEFAULT_HTML5 = 4;
+	final static int DEFAULT_XHTML5 = 5;
 
 	public static final String CHTML_PUBLIC_ID = "-//W3C//DTD Compact HTML 1.0 Draft//EN";//$NON-NLS-1$
 
@@ -75,6 +79,18 @@
 		this.defaultCHTMLEntry = new HTMLDocumentTypeEntry(name, publicId, null, null, false, false, displayName, false, false, false, true);
 		this.entries.put(publicId, this.defaultCHTMLEntry);
 
+		//HTML5
+		name = "HTML5";//$NON-NLS-1$
+		publicId = "";
+		displayName = "HTML5"; //$NON-NLS-1$
+		this.defaultHTML5Entry = new HTMLDocumentTypeEntry(name, publicId, null, null, false, false, displayName, false, false, false, true);
+		this.entries.put(publicId, this.defaultHTML5Entry);
+		
+		displayName = "XHTML5"; //$NON-NLS-1$
+		this.defaultXHTML5Entry = new HTMLDocumentTypeEntry(name, publicId, null, null, true, false, displayName, true, false, false, true);
+		this.entries.put("xmlns", this.defaultXHTML5Entry);
+		
+
 		HTMLDocumentTypeRegistryReader reader = new HTMLDocumentTypeRegistryReader();
 		if (reader != null)
 			reader.readRegistry(this);
@@ -102,6 +118,12 @@
 	public HTMLDocumentTypeEntry getDefaultEntry(int type) {
 		HTMLDocumentTypeEntry entry = null;
 		switch (type) {
+			case DEFAULT_HTML5 :
+				entry = this.defaultHTML5Entry;
+				break;
+			case DEFAULT_XHTML5 :
+				entry = this.defaultXHTML5Entry;
+				break;
 			case DEFAULT_XHTML :
 				entry = this.defaultXHTMLEntry;
 				break;
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelquery/HTMLModelQueryCMProvider.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelquery/HTMLModelQueryCMProvider.java
index 40e6d3d..80c1ce5 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelquery/HTMLModelQueryCMProvider.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/modelquery/HTMLModelQueryCMProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,7 @@
 public class HTMLModelQueryCMProvider implements ModelQueryCMProvider {
 
 
+	private static CMDocument staticHTML5 = HTMLCMDocumentFactory.getCMDocument(CMDocType.HTML5_DOC_TYPE);
 	private static CMDocument staticHTML = HTMLCMDocumentFactory.getCMDocument(CMDocType.HTML_DOC_TYPE);
 	private static CMDocument staticCHTML = HTMLCMDocumentFactory.getCMDocument(CMDocType.CHTML_DOC_TYPE);
 	private static HTMLDocumentTypeRegistry doctypeRegistry = HTMLDocumentTypeRegistry.getInstance();
@@ -60,8 +61,10 @@
 			return null;
 
 		String pid = getPublicId(owner);
-		if (pid == null)
-			return staticHTML;
+		// no PID, always return the currently-supported HTML version
+		if (pid == null || "".equals(pid)){
+			return staticHTML5;
+		}
 
 		HTMLDocumentTypeEntry entry = doctypeRegistry.getEntry(pid);
 		if (entry == null)
@@ -112,6 +115,10 @@
 		if (doc == null)
 			return null;
 		DocumentType doctype = doc.getDoctype();
+		//doctype.
 		return (doctype != null) ? doctype.getPublicId() : doc.getDocumentTypeId();
 	}
+	
+	
+	
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/preferences/HTMLCorePreferenceInitializer.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/preferences/HTMLCorePreferenceInitializer.java
index 03fd749..e7b5e5b 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/preferences/HTMLCorePreferenceInitializer.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/preferences/HTMLCorePreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -80,6 +80,8 @@
 		node.putInt(HTMLCorePreferenceNames.ATTRIBUTE_VALUE_MISMATCH, ValidationMessage.ERROR);
 		node.putInt(HTMLCorePreferenceNames.ATTRIBUTE_VALUE_UNCLOSED, ValidationMessage.WARNING);
 		node.putInt(HTMLCorePreferenceNames.ATTRIBUTE_VALUE_RESOURCE_NOT_FOUND, ValidationMessage.IGNORE);
+		node.putInt(HTMLCorePreferenceNames.ATTRIBUTE_OBSOLETE_NAME, ValidationMessage.WARNING);
+		
 		
 		// Elements
 		node.putInt(HTMLCorePreferenceNames.ELEM_UNKNOWN_NAME, ValidationMessage.WARNING);
@@ -96,6 +98,8 @@
 		node.putInt(HTMLCorePreferenceNames.ELEM_UNCLOSED_START_TAG, ValidationMessage.ERROR);
 		node.putInt(HTMLCorePreferenceNames.ELEM_UNCLOSED_END_TAG, ValidationMessage.ERROR);
 		node.putInt(HTMLCorePreferenceNames.ELEM_INVALID_EMPTY_TAG, ValidationMessage.WARNING);
+		node.putInt(HTMLCorePreferenceNames.ELEM_OBSOLETE_NAME, ValidationMessage.WARNING);
+		
 		
 		// DOCTYPE
 		node.putInt(HTMLCorePreferenceNames.DOC_DUPLICATE, ValidationMessage.ERROR);
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/preferences/HTMLCorePreferenceNames.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/preferences/HTMLCorePreferenceNames.java
index 3e22bc8..5c501e3 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/preferences/HTMLCorePreferenceNames.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/preferences/HTMLCorePreferenceNames.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -241,6 +241,8 @@
 	public static final String ATTRIBUTE_VALUE_MISMATCH = "attrValueMismatch";//$NON-NLS-1$
 	public static final String ATTRIBUTE_VALUE_UNCLOSED = "attrValueUnclosed";//$NON-NLS-1$
 	public static final String ATTRIBUTE_VALUE_RESOURCE_NOT_FOUND = "resourceNotFound";//$NON-NLS-1$
+	public static final String ATTRIBUTE_OBSOLETE_NAME = "attrObsoleteName";//$NON-NLS-1$
+	
 	
 	public static final String ELEM_UNKNOWN_NAME = "elemUnknownName";//$NON-NLS-1$
 	public static final String ELEM_INVALID_NAME = "elemInvalidName";//$NON-NLS-1$
@@ -256,6 +258,7 @@
 	public static final String ELEM_UNCLOSED_START_TAG = "elemUnclosedStartTag";//$NON-NLS-1$
 	public static final String ELEM_UNCLOSED_END_TAG = "elemUnclosedEndTag";//$NON-NLS-1$
 	public static final String ELEM_INVALID_EMPTY_TAG = "elemInvalidEmptyTag";//$NON-NLS-1$
+	public static final String ELEM_OBSOLETE_NAME = "elemObsoleteName";//$NON-NLS-1$
 	
 	public static final String DOC_DUPLICATE = "docDuplicateTag";//$NON-NLS-1$
 	public static final String DOC_INVALID_CONTENT = "docInvalidContent";//$NON-NLS-1$
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/provisional/HTML50Namespace.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/provisional/HTML50Namespace.java
new file mode 100644
index 0000000..fc8d5be
--- /dev/null
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/provisional/HTML50Namespace.java
@@ -0,0 +1,179 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.html.core.internal.provisional;
+
+public interface HTML50Namespace extends HTML40Namespace {
+
+	public static interface ElementName extends HTML40Namespace.ElementName {
+		String ARTICLE = "article"; //$NON-NLS-1$
+		String ASIDE = "aside"; //$NON-NLS-1$
+		String AUDIO = "audio";
+		String CANVAS = "canvas";
+		String COMMAND = "command";
+		String DATALIST = "datalist";
+		String DETAILS = "details";
+		String FIGURE = "figure"; //$NON-NLS-1$
+		String FIGCAPTION = "figcaption"; //$NON-NLS-1$
+		String FOOTER = "footer"; //$NON-NLS-1$
+		String HEADER = "header";
+		String HGROUP = "hgroup";
+		String KEYGEN = "keygen";
+		String MARK = "mark";
+		String MATH = "math";
+		String METER = "meter";
+		String NAV = "nav";
+		String OUTPUT = "output";
+		String PROGRESS = "progress";
+		String RP = "rp";
+		String RT = "rt";
+		String RUBY = "ruby";
+		String SECTION = "section"; //$NON-NLS-1$
+		String SOURCE = "source";
+		String SUMMARY = "summary";
+		String SVG = "svg";
+		String TIME = "time";
+		String VIDEO = "video";
+	}
+
+	String HTML50_URI = "http://www.w3.org/TR/html50/";
+	String HTML50_TAG_PREFIX = "";
+
+	// global attribute names
+	String ATTR_NAME_CONTENT_EDITABLE = "contenteditable"; // %coreattrs; //$NON-NLS-1$
+	String ATTR_NAME_CONTEXT_MENU = "contextmenu"; // %coreattrs; //$NON-NLS-1$
+	String ATTR_NAME_DRAGGABLE = "draggable"; // %coreattrs; //$NON-NLS-1$
+	String ATTR_NAME_ROLE = "role"; // %coreattrs; //$NON_NLS-1$
+	String ATTR_NAME_SPELLCHECK = "spellcheck"; // %coreattrs; //$NON-NLS-1$
+	String ATTR_NAME_ONABORT = "onabort"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONCAN_PLAY = "oncanply"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONCAN_PLAY_THROUGH = "oncanplaythrough"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONCONTEXT_MENU = "oncontextmenu"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONDRAG = "ondrag"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONDRAG_END = "ondragend"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONDRAG_OVER = "ondragover"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONDRAG_ENTER = "ondragenter"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONDRAG_LEAVE = "ondragleave"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONDRAG_START = "ondragstart"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONDROP = "ondrop"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONDURATION_CHANGE = "ondurationchange"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONEMPTIED = "onemptied"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONENDED = "onended"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONERROR = "onerror"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONFORM_CHANGE = "onformchange"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONFORM_INPUT = "onform_input"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONINPUT = "oninput"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONINVALID = "oninvalid"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONLOADED_DATA = "onloadeddata"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONLOADED_METADATA = "onloadedmetadeta"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONLOAD_START = "onloadstart"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONMOUSE_WHEEL = "onmousewheel"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONPAUSE = "onpause"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONPLAY = "onplay"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONPLAYING = "onplaying"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONPROGRESS = "onprogress"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONRATE_CHANGE = "onratechange"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONREADY_STATE_CHANGE = "onreadystatechange"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONSCROLL = "onscroll"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONSEEKED = "onseeked"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONSEEKING = "onseeking"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONSHOW = "onshow"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONSTALLED = "onstalled"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONSUSPEND = "onsuspend"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONTIME_UPDATE = "ontimeupdate"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONVOLUME_UPDATE = "onvolumeupdate"; // %event; //$NON-NLS-1$
+	String ATTR_NAME_ONWAITING = "onwaiting"; // %event; //$NON-NLS-1$
+
+	String ATTR_NAME_PING = "ping";
+	String ATTR_NAME_AUTOFOCUS = "autofocus";
+	String ATTR_NAME_CHALLENGE = "challenge";
+	String ATTR_NAME_FORM = "form";
+	String ATTR_NAME_KEYTYPE = "keytype";
+	String ATTR_NAME_REQUIRED = "required";
+	String ATTR_NAME_AUTOCOMPLETE = "autocomplete"; // input
+	String ATTR_NAME_MIN = "min"; // input
+	String ATTR_NAME_MAX = "max"; // input
+	String ATTR_NAME_PATTERN = "pattern"; // input
+	String ATTR_NAME_STEP = "step"; // input
+	String ATTR_NAME_NOVALIDATE = "novalidate"; // form
+	String ATTR_NAME_FORMACTION = "formaction"; // input|button
+	String ATTR_NAME_FORMENCTYPE = "formenctype"; // input|button
+	String ATTR_NAME_FORMMETHOD = "formmethod"; // input|button
+	String ATTR_NAME_FORMNOVALIDATE = "formnovalidate"; // input|button
+	String ATTR_NAME_FORMTARGET = "formtarget"; // input|button
+	String ATTR_NAME_SCOPED = "scoped"; // style
+	String ATTR_NAME_ASYNC = "async"; // script
+	String ATTR_NAME_MANIFEST = "manifest"; // html
+	String ATTR_NAME_SIZES = "sizes"; // link
+	String ATTR_NAME_REVERSED = "reversed"; // ol
+	String ATTR_NAME_SANDBOX = "sandbox"; // iframe
+	String ATTR_NAME_SEAMLESS = "seamless"; // iframe
+	String ATTR_NAME_SRCDOC = "srcdoc"; // iframe
+	String ATTR_NAME_PRELOAD = "preload"; // %mediaElement; //$NON-NLS-1$
+	String ATTR_NAME_AUTOPLAY = "autoplay"; // %mediaElement; //$NON-NLS-1$
+	String ATTR_NAME_LOOP = "loop"; // %mediaElement; //$NON-NLS-1$
+	String ATTR_NAME_CONTROLS = "controls"; // %mediaElement; //$NON-NLS-1$
+	String ATTR_NAME_POSTER = "poster"; // %video; //$NON-NLS-1$
+	String ATTR_NAME_OPEN = "open"; // details //$NON-NLS-1$
+	String ATTR_NAME_PUBDATE = "pubdate"; //time //$NON-NLS-1$
+	String ATTR_NAME_LOW = "low"; //meter //$NON-NLS-1$
+	String ATTR_NAME_HIGH = "high"; //meter //$NON-NLS-1$
+	String ATTR_NAME_OPTIMUM = "optimum"; //meter //$NON-NLS-1$
+	String ATTR_NAME_ICON = "icon"; //command //$NON-NLS-1$
+	String ATTR_NAME_RADIOGROUP = "radiogroup"; //command //$NON-NLS-1$
+	String ATTR_NAME_LIST = "list"; //input //$NON-NLS-1$
+	String ATTR_NAME_PLACEHOLDER = "placeholder"; //input //$NON-NLS-1$
+	String ATTR_NAME_WRAP = "wrap"; //textarea //$NON-NLS-1$
+	String ATTR_NAME_XMLNS = "xmlns"; //html //$NON-NLS-1$
+	
+	// Global attributes properties
+
+	// for contenteditable (EMPTY|TRUE|FALSE|INHERIT)
+	String ATTR_VALUE_EMPTY = ""; // contenteditable //$NON-NLS-1$
+	String ATTR_VALUE_INHERIT = "inherit"; // contenteditable //$NON-NLS-1$
+	
+	// for MediaElement (Audio/Video) 
+	String ATTR_VALUE_METADATA = "metadata"; // mediaelement //$NON-NLS-1$
+	
+	// for Command
+	String ATTR_VALUE_COMMAND = "command"; //command //$NON-NLS-1$
+	
+	//Input type
+	String ATTR_VALUE_SEARCH = "search"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_TEL = "tel"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_URL = "url"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_EMAIL = "email"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_DATE = "date"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_DATETIME = "datetime"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_MONTH = "month"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_WEEK = "week"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_TIME = "time"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_DATETIME_LOCAL = "datetime-local"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_RANGE = "range"; //input type //$NON-NLS-1$
+	String ATTR_VALUE_COLOR = "color"; //input type //$NON-NLS-1$
+	
+	String ATTR_VALUE_ON = "on"; //input autocomplete //$NON-NLS-1$
+	String ATTR_VALUE_OFF = "off"; //input autocomplete //$NON-NLS-1$
+	
+	String ATTR_VALUE_PUT = "PUT"; //input formmethod //$NON-NLS-1$
+	String ATTR_VALUE_DELETE = "DELETE"; //input formmethod //$NON-NLS-1$
+	
+	String ATTR_VALUE_FORM_DATA = "multipart/form-data"; //input formencType //$NON-NLS-1$
+	String ATTR_VALUE_PLAIN = "text/plain"; //input formencType //$NON-NLS-1$
+	
+	String ATTR_VALUE_SOFT = "soft"; //textarea wrap //$NON-NLS-1$
+	String ATTR_VALUE_HARD = "hard"; //textarea wrap //$NON-NLS-1$
+	
+	
+	String ATTR_VALUE_CONTEXT = "context"; //menu type //$NON-NLS-1$
+	String ATTR_VALUE_TOOLBAR = "toolbar"; //menu type //$NON-NLS-1$
+	String ATTR_VALUE_LIST = "list"; //menu type //$NON-NLS-1$
+		
+}
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/provisional/HTMLCMProperties.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/provisional/HTMLCMProperties.java
index 1d7a753..8098721 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/provisional/HTMLCMProperties.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/provisional/HTMLCMProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -78,6 +78,11 @@
 	 * "isScriptable" returns java.lang.Boolean object.
 	 */
 	public static final String IS_SCRIPTABLE = "isScriptable"; //$NON-NLS-1$
+	/**
+	 * "isObsolete" returns java.lang.Boolean object.
+	 */
+	public static final String IS_OBSOLETE = "isObsolete";//$NON-NLS-1$
+	
 
 	public static interface Values {
 		/*
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/CMUtil.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/CMUtil.java
index 1809abd..9633916 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/CMUtil.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/CMUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -197,4 +197,16 @@
 		}
 		return false;
 	}
+	
+	/**
+	 * The method to distinguish HTML and XHTML from other mark up.
+	 * This method returns true if the target is,
+	 * (1) not JSP,
+	 * (2) not SSI.
+	 */
+	public static boolean isObsolete(CMNode decl) {
+		return decl.supports(HTMLCMProperties.IS_OBSOLETE) && ((Boolean)(decl.getProperty(HTMLCMProperties.IS_OBSOLETE))).booleanValue();
+	}
+	
+	
 }
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/ErrorState.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/ErrorState.java
index 03183ea..f64d50e 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/ErrorState.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/ErrorState.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,9 @@
 	static final int UNDEFINED_NAME_ERROR = 11;
 	static final int UNDEFINED_VALUE_ERROR = 12;
 	static final int MISMATCHED_VALUE_ERROR = 13;
+	static final int OBSOLETE_ATTR_NAME_ERROR = 14;
+	static final int OBSOLETE_TAG_NAME_ERROR = 15;
+	
 	// format error
 	static final int FORMAT_ERROR_LEVEL = 100;
 	static final int INVALID_NAME_ERROR = 101;
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLAttributeValidator.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLAttributeValidator.java
index f99c231..0551d74 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLAttributeValidator.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLAttributeValidator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,8 @@
 	private static final char SINGLE_QUOTE = '\'';
 	private static final char DOUBLE_QUOTE = '\"';
 
+	private static final String ATTR_NAME_DATA = "data-";
+
 	// D210422
 	/**
 	 * HTMLAttributeValidator constructor comment.
@@ -122,6 +124,10 @@
 					continue; // skip futher validation and begin next loop.
 			}
 
+			String attrName = a.getName().toLowerCase(Locale.US);
+			if (attrName.startsWith(ATTR_NAME_DATA) && attrName.length() > ATTR_NAME_DATA.length())
+				continue;
+
 			CMAttributeDeclaration adec = (CMAttributeDeclaration) declarations.getNamedItem(a.getName());
 			
 			/* Check the modelquery if nothing is declared by the element declaration */
@@ -129,7 +135,7 @@
 				if (modelQueryNodes == null)
 					modelQueryNodes = ModelQueryUtil.getModelQuery(target.getOwnerDocument()).getAvailableContent((Element) node, edec, ModelQuery.INCLUDE_ATTRIBUTES);
 				
-				String attrName = a.getName().toLowerCase(Locale.US);
+				
 				for (int k = 0; k < modelQueryNodes.size(); k++) {
 					CMNode cmnode = (CMNode) modelQueryNodes.get(k);
 					if (cmnode.getNodeType() == CMNode.ATTRIBUTE_DECLARATION && cmnode.getNodeName().toLowerCase(Locale.US).equals(attrName)) {
@@ -151,6 +157,9 @@
 			} else {
 				// The attr declaration was found.
 				// At 1st, the name should be checked.
+				if (CMUtil.isObsolete(adec)){
+					state = ErrorState.OBSOLETE_ATTR_NAME_ERROR;
+				}
 				if (CMUtil.isHTML(edec) && (!CMUtil.isXHTML(edec))) {
 					// If the target element is pure HTML (not XHTML), some
 					// attributes
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLElementContentValidator.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLElementContentValidator.java
index cf5a512..a060daa 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLElementContentValidator.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/HTMLElementContentValidator.java
@@ -128,7 +128,11 @@
 				// type of the parent content model. -- 10/12/2001
 				if (ced == null || CMUtil.isSSI(ced) || (!CMUtil.isHTML(ced)))
 					return;
-
+				if (CMUtil.isObsolete(ced)){
+					error = ErrorState.OBSOLETE_TAG_NAME_ERROR;
+					break;
+				}
+				
 				switch (contentType) {
 					case CMElementDeclaration.ANY :
 						// Keep going.
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/MessageFactory.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/MessageFactory.java
index 06771b7..d7ed235 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/MessageFactory.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/MessageFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -94,6 +94,7 @@
 		mapToKey(HTMLCorePreferenceNames.ATTRIBUTE_VALUE_MISMATCH, attrTable, MISMATCHED_VALUE_ERROR, MSG_MISMATCHED_ATTR_VALUE_ERROR);
 		mapToKey(HTMLCorePreferenceNames.ATTRIBUTE_VALUE_UNCLOSED, attrTable, UNCLOSED_ATTR_VALUE, MSG_UNCLOSED_ATTR_VALUE_ERROR);
 		mapToKey(HTMLCorePreferenceNames.ATTRIBUTE_VALUE_RESOURCE_NOT_FOUND, attrTable, RESOURCE_NOT_FOUND, MSG_RESOURCE_NOT_FOUND);
+		mapToKey(HTMLCorePreferenceNames.ATTRIBUTE_OBSOLETE_NAME, attrTable, OBSOLETE_ATTR_NAME_ERROR, MSG_OBSOLETE_ATTR_ERROR);
 
 		// element error map
 		ErrorTable elemTable = errTables[NodeType.ELEMENT];// short hand
@@ -112,6 +113,8 @@
 		mapToKey(HTMLCorePreferenceNames.ELEM_UNCLOSED_START_TAG, elemTable, UNCLOSED_TAG_ERROR, MSG_UNCLOSED_START_TAG_ERROR);
 		mapToKey(HTMLCorePreferenceNames.ELEM_UNCLOSED_END_TAG, elemTable, UNCLOSED_END_TAG_ERROR, MSG_UNCLOSED_END_TAG_ERROR);
 		mapToKey(HTMLCorePreferenceNames.ELEM_INVALID_EMPTY_TAG, elemTable, INVALID_EMPTY_ELEMENT_TAG, MSG_INVALID_EMPTY_ELEMENT_TAG);
+		mapToKey(HTMLCorePreferenceNames.ELEM_OBSOLETE_NAME, elemTable, OBSOLETE_TAG_NAME_ERROR, MSG_OBSOLETE_TAG_ERROR);
+
 
 		// document type error map
 		ErrorTable docTable = errTables[NodeType.DOCUMENT_TYPE];// short hand
@@ -237,6 +240,8 @@
 	private static final String MSG_INVALID_EMPTY_ELEMENT_TAG = HTMLCoreMessages._ERROR_Tag___0___should_be_an_empty_element_tag_1;
 	private static final String MSG_UNCLOSED_ATTR_VALUE_ERROR = HTMLCoreMessages._ERROR_Attribute_value___0___not_closed__1;
 	private static final String MSG_RESOURCE_NOT_FOUND = HTMLCoreMessages._ERROR_Resource_not_found_0;
+	private static final String MSG_OBSOLETE_ATTR_ERROR = HTMLCoreMessages.Obsolete_attribute_name___ERROR_;
+	private static final String MSG_OBSOLETE_TAG_ERROR = HTMLCoreMessages.Obsolete_tag___ERROR_;
 	
 	private ErrorTable[] errTables = new ErrorTable[NodeType.MAX_TYPE];
 
diff --git a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/SyntaxValidator.java b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/SyntaxValidator.java
index 097d8a1..4dd8979 100644
--- a/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/SyntaxValidator.java
+++ b/bundles/org.eclipse.wst.html.core/src/org/eclipse/wst/html/core/internal/validate/SyntaxValidator.java
@@ -16,6 +16,7 @@
 import org.eclipse.wst.html.core.internal.contentmodel.HTMLPropertyDeclaration;
 import org.eclipse.wst.html.core.internal.document.HTMLDocumentTypeEntry;
 import org.eclipse.wst.html.core.internal.document.HTMLDocumentTypeRegistry;
+import org.eclipse.wst.html.core.internal.provisional.HTML50Namespace;
 import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
 import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
@@ -28,8 +29,10 @@
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
 import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
 class SyntaxValidator extends PrimeValidator implements ErrorState {
@@ -80,6 +83,7 @@
 		public boolean hasStartTag() {return startTag != null;}
 		public boolean hasEndTag() {return endTag != null;}
 		public boolean isXHTML = false;
+		public boolean isXHTML5 = false;
 	}
 
 	public void validate(IndexedRegion indexedNode) {
@@ -116,10 +120,40 @@
 			return;
 		String typeid = ((IDOMDocument) doc).getDocumentTypeId();
 		if (typeid != null) {
-			HTMLDocumentTypeEntry entry = HTMLDocumentTypeRegistry.getInstance().getEntry(typeid);
-			info.isXHTML = (entry != null && entry.isXMLType());
+			if (typeid.trim().length()!= 0){
+				HTMLDocumentTypeEntry entry = HTMLDocumentTypeRegistry.getInstance().getEntry(typeid);
+				info.isXHTML = (entry != null && entry.isXMLType());
+			}
+			else {
+				info.isXHTML = getXMLTarget(doc);
+				info.isXHTML5 = info.isXHTML;
+			}
 		}
 	}
+	
+	private boolean getXMLTarget(Document doc) {
+		if (doc == null)
+			return false;
+		Node child = doc.getFirstChild();
+		while (child != null) {
+			if (child.getNodeType() == Node.ELEMENT_NODE) {
+				if (child.getNodeName().equalsIgnoreCase("html")){
+					if (child.getAttributes()!= null){
+						NamedNodeMap attrs = child.getAttributes();
+						for (int i = 0; i < attrs.getLength(); i++) {
+							Attr a = (Attr) attrs.item(i);
+							if (a.getName().equalsIgnoreCase(HTML50Namespace.ATTR_NAME_XMLNS))
+									return true;
+						}
+					}
+					return false;
+				}
+				
+			}
+			child = child.getNextSibling();
+		}
+		return false;
+	}
 
 	class TagErrorInfoImpl extends AbstractErrorInfo {
 		private String hint = null;
@@ -287,24 +321,41 @@
 		if (declared == null)
 			return;
 
-		// start tag
-		if (info.hasStartTag()) {
-			startTagName = getTagName(info.startTag);
-			if (!declared.equals(startTagName)) {
-				TagErrorInfoImpl error = new TagErrorInfoImpl(MISMATCHED_ERROR, info.startTag, startTagName);
-				this.reporter.report(error);
+		if (info.isXHTML5){
+			if (info.hasStartTag()) {
+				startTagName = getTagName(info.startTag);
+				if (info.hasEndTag()) {
+					endTagName = getTagName(info.endTag);
+					if (!endTagName.equals(startTagName)){
+						TagErrorInfoImpl error = new TagErrorInfoImpl(MISMATCHED_ERROR, info.endTag, endTagName);
+						this.reporter.report(error);
+					}
+				}
 			}
+			
 		}
-		// end tag
-		if (info.hasEndTag()) {
-			endTagName = getTagName(info.endTag);
-			if (!info.hasStartTag() || (!endTagName.equals(startTagName))) {
-				if (!declared.equals(endTagName)) {
-					TagErrorInfoImpl error = new TagErrorInfoImpl(MISMATCHED_ERROR, info.endTag, endTagName);
+		else
+		{
+			// start tag
+			if (info.hasStartTag()) {
+				startTagName = getTagName(info.startTag);
+				if (!declared.equals(startTagName)) {
+					TagErrorInfoImpl error = new TagErrorInfoImpl(MISMATCHED_ERROR, info.startTag, startTagName);
 					this.reporter.report(error);
 				}
 			}
+			// end tag
+			if (info.hasEndTag()) {
+				endTagName = getTagName(info.endTag);
+				if (!info.hasStartTag() || (!endTagName.equals(startTagName))) {
+					if (!declared.equals(endTagName)) {
+						TagErrorInfoImpl error = new TagErrorInfoImpl(MISMATCHED_ERROR, info.endTag, endTagName);
+						this.reporter.report(error);
+					}
+				}
+			}
 		}
+		
 	}
 
 	private void validateChildren(Node target) {
diff --git a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/contentassist/HTMLTagsCompletionProposalComputer.java b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/contentassist/HTMLTagsCompletionProposalComputer.java
index e724296..fa7d007 100644
--- a/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/contentassist/HTMLTagsCompletionProposalComputer.java
+++ b/bundles/org.eclipse.wst.html.ui/src/org/eclipse/wst/html/ui/internal/contentassist/HTMLTagsCompletionProposalComputer.java
@@ -155,6 +155,13 @@
 			Boolean isXHTML = ((Boolean)node.getProperty(HTMLCMProperties.IS_XHTML));
 			isValid = isXHTML != null && isXHTML.booleanValue();
 		}
+
+		// Do not propose obsolete tags, regardless
+		if (isValid && node.supports(HTMLCMProperties.IS_OBSOLETE)) {
+			Boolean isObsolete = ((Boolean) node.getProperty(HTMLCMProperties.IS_OBSOLETE));
+			isValid = !(isObsolete != null && isObsolete.booleanValue());
+		}
+
 		return isValid;
 	}
 	
diff --git a/bundles/org.eclipse.wst.html.ui/templates/htmldefault-templates.properties b/bundles/org.eclipse.wst.html.ui/templates/htmldefault-templates.properties
index b9b792e..cfa1c62 100644
--- a/bundles/org.eclipse.wst.html.ui/templates/htmldefault-templates.properties
+++ b/bundles/org.eclipse.wst.html.ui/templates/htmldefault-templates.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004, 2006 IBM Corporation and others.
+# Copyright (c) 2004, 2010 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -48,4 +48,7 @@
 Templates.style.desc=style     (commented)
 Templates.style.content=<style>\n<!--\n${cursor}\n-->\n</style>
 Templates.imgmap.name=img
-Templates.imgmap.desc=img     (map)
\ No newline at end of file
+Templates.imgmap.desc=img     (map)
+Templates.html5.name=New HTML File (5)
+Templates.html5.desc=html 5
+Templates.html5.content=<!DOCTYPE html>\n<html>\n<head>\n<meta charset="${encoding}">\n<title>Insert title here</title>\n</head>\n<body>\n${cursor}\n</body>\n</html>
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.html.ui/templates/htmldefault-templates.xml b/bundles/org.eclipse.wst.html.ui/templates/htmldefault-templates.xml
index b11ffb8..c600c08 100644
--- a/bundles/org.eclipse.wst.html.ui/templates/htmldefault-templates.xml
+++ b/bundles/org.eclipse.wst.html.ui/templates/htmldefault-templates.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,4 +43,6 @@
 
 <template name="%Templates.style.name" description="%Templates.style.desc" id="org.eclipse.wst.html.ui.templates.style" context="html_tag" enabled="true">%Templates.style.content</template>
 
+<template name="%Templates.html5.name" description="%Templates.html5.desc" id="org.eclipse.wst.html.ui.templates.html5" context="html_new" enabled="true">%Templates.html5.content</template>
+
 </templates>
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.jFlex b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.jFlex
index fce07bc..8a11a4e 100644
--- a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.jFlex
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.jFlex
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Copyright (c) 2004, 2009 IBM Corporation and others.

+ * Copyright (c) 2004, 2010 IBM Corporation and others.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

@@ -24,6 +24,7 @@
 

 

 	private boolean hasMore = true;

+	private boolean hasCharsetAttr = false;

 	private final static int MAX_TO_SCAN = 8000;

 	StringBuffer string = new StringBuffer();

 	// state stack for easier state handling

@@ -97,6 +98,7 @@
   		fStateStack.clear();

   		

   		hasMore = true;

+  		hasCharsetAttr = false;

   		

 		// its a little wasteful to "throw away" first char array generated

 		// by class init (via auto generated code), but we really do want

@@ -137,6 +139,9 @@
 		fStateStack.push(yystate());

 

 	}

+	public final boolean hasCharsetAttr() {

+		return hasCharsetAttr;

+	}

 

 	private void popState() {

 		yybegin(fStateStack.pop());

@@ -219,6 +224,7 @@
 

 //	"http-equiv" {S}* \= {S}* \"? "Content-Type" \"? {S}+ "content" {BeginAttribeValue}  {pushCurrentState(); yybegin(QuotedAttributeValue); foundContentTypeValue=true; return HTMLHeadTokenizerConstants.MetaTagContentType;}

 	{Z}h{Z}t{Z}t{Z}p{Z}-{Z}e{Z}q{Z}u{Z}i{Z}v{Z} {S_UTF}* \= {S_UTF}* {Z}\"?{Z} ({Z}C{Z}o{Z}n{Z}t{Z}e{Z}n{Z}t{Z}-{Z}T{Z}y{Z}p{Z}e{Z}) \"?{Z} ({S_UTF})+ ({Z}c{Z}o{Z}n{Z}t{Z}e{Z}n{Z}t{Z}) {BeginAttributeValueUTF}  {pushCurrentState(); yybegin(QuotedAttributeValue); foundContentTypeValue=true; return HTMLHeadTokenizerConstants.MetaTagContentType;}

+	{Z}c{Z}h{Z}a{Z}r{Z}s{Z}e{Z}t{Z} {BeginAttributeValueUTF} {pushCurrentState(); yybegin(QuotedAttributeValue); foundContentTypeValue=true; hasCharsetAttr=true; return HTMLHeadTokenizerConstants.MetaTagContentType;}

 	{Z}>{Z}    { yybegin(YYINITIAL);  if (foundContentTypeValue) hasMore = false; return HTMLHeadTokenizerConstants.MetaTagEnd;}

 	{Z}\/{Z}>{Z}    { yybegin(YYINITIAL); if (foundContentTypeValue) hasMore = false; return HTMLHeadTokenizerConstants.MetaTagEnd;}

 }

diff --git a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/provisional/contentmodel/CMDocType.java b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/provisional/contentmodel/CMDocType.java
index 2497bf6..679cefd 100644
--- a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/provisional/contentmodel/CMDocType.java
+++ b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/provisional/contentmodel/CMDocType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2001, 2009 IBM Corporation and others.
+ * Copyright (c) 2001, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,10 @@
 	 */
 	public final static String HTML_DOC_TYPE = "HTML";//$NON-NLS-1$
 	/**
+	 * HTML5 files
+	 */
+	public final static String HTML5_DOC_TYPE = "HTML5";//$NON-NLS-1$
+	/**
 	 * JSP 1.1 files (currently includes 1.2 elements for backward behavioral compatibility)
 	 */
 	public final static String JSP11_DOC_TYPE = "JSP11";//$NON-NLS-1$