This commit was manufactured by cvs2svn to create tag 'v20080219'.
diff --git a/assembly/plugins/org.eclipse.jsf.branding/.classpath b/assembly/plugins/org.eclipse.jsf.branding/.classpath
deleted file mode 100644
index 7cec603..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/.classpath
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/assembly/plugins/org.eclipse.jsf.branding/.cvsignore b/assembly/plugins/org.eclipse.jsf.branding/.cvsignore
deleted file mode 100644
index 7033a79..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-bin
-@dot*
-temp.folder
-build.xml
diff --git a/assembly/plugins/org.eclipse.jsf.branding/META-INF/MANIFEST.MF b/assembly/plugins/org.eclipse.jsf.branding/META-INF/MANIFEST.MF
deleted file mode 100644
index 412b7ac..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,7 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %plugin.Name
-Bundle-SymbolicName: org.eclipse.jsf
-Bundle-Version: 1.0.0.qualifier
-Bundle-Localization: plugin
-Bundle-Vendor: %plugin.Provider
diff --git a/assembly/plugins/org.eclipse.jsf.branding/about.html b/assembly/plugins/org.eclipse.jsf.branding/about.html
deleted file mode 100644
index 7c80c6c..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/about.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
- 
-<p>June 06, 2007</p>	
-<h3>License</h3>
-
-<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
-Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
-
-<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
-apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
-indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/assembly/plugins/org.eclipse.jsf.branding/about.ini b/assembly/plugins/org.eclipse.jsf.branding/about.ini
deleted file mode 100644
index a21a3ec..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/about.ini
+++ /dev/null
@@ -1,29 +0,0 @@
-# about.ini
-# contains information about a feature
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# "%key" are externalized strings defined in about.properties
-# This file does not need to be translated.
-
-# Property "aboutText" contains blurb for "About" dialog (translated)
-aboutText=%blurb
-
-# Property "windowImage" contains path to window icon (16x16)
-# needed for primary features only
-
-# Property "featureImage" contains path to feature image (32x32)
-featureImage=eclipse32.gif
-
-# Property "aboutImage" contains path to product image (500x330 or 115x164)
-# needed for primary features only
-
-# Property "appName" contains name of the application (translated)
-# needed for primary features only
-
-# Property "welcomePage" contains path to welcome page (special XML-based format)
-# optional
-
-# Property "welcomePerspective" contains the id of the perspective in which the
-# welcome page is to be opened.
-# optional
-
-
diff --git a/assembly/plugins/org.eclipse.jsf.branding/about.mappings b/assembly/plugins/org.eclipse.jsf.branding/about.mappings
deleted file mode 100644
index bddaab4..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/about.mappings
+++ /dev/null
@@ -1,6 +0,0 @@
-# about.mappings
-# contains fill-ins for about.properties
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file does not need to be translated.
-
-0=@build@
\ No newline at end of file
diff --git a/assembly/plugins/org.eclipse.jsf.branding/about.properties b/assembly/plugins/org.eclipse.jsf.branding/about.properties
deleted file mode 100644
index c62b076..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/about.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-###############################################################################
-# Copyright (c) 2005 Oracle Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     Oracle Corporation - initial API and implementation
-###############################################################################
-
-# about.properties
-# contains externalized strings for about.ini
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# fill-ins are supplied by about.mappings
-# This file should be translated.
-
-blurb=JavaServer Faces Tools\n\
-\n\
-Version: {featureVersion}\n\
-Build id: {0}\n\
-\n\
-(c) Copyright Eclipse contributors and others 2005.  All rights reserved.\n\
-Visit http://www.eclipse.org/webtools
diff --git a/assembly/plugins/org.eclipse.jsf.branding/build.properties b/assembly/plugins/org.eclipse.jsf.branding/build.properties
deleted file mode 100644
index ab20e78..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2006 Oracle Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     Oracle Corporation - initial API and implementation
-###############################################################################
-bin.includes = META-INF/,\
-               eclipse32.png,\
-               eclipse32.gif,\
-               about.properties,\
-               about.mappings,\
-               about.ini,\
-               about.html,\
-               plugin.properties,\
-               component.xml
-
diff --git a/assembly/plugins/org.eclipse.jsf.branding/component.xml b/assembly/plugins/org.eclipse.jsf.branding/component.xml
deleted file mode 100644
index d470a56..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/component.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<component  xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.jsf">
-<description url=""></description>
-<component-depends unrestricted="true"></component-depends>
-<plugin id="org.eclipse.jst.jsf.common" fragment="false"/>
-<plugin id="org.eclipse.jst.jsf.common.ui" fragment="false"/>
-<plugin id="org.eclipse.jst.jsf.core" fragment="false"/>
-<plugin id="org.eclipse.jst.jsf.ui" fragment="false"/>
-<plugin id="org.eclipse.jst.jsf.standard.tagsupport" fragment="false"/>
-<plugin id="org.eclipse.jst.jsf.facesconfig" fragment="false"/>
-<plugin id="org.eclipse.jst.jsf.facesconfig.ui" fragment="false"/>
-<plugin id="org.eclipse.jst.pagedesigner" fragment="false"/>
-<plugin id="org.eclipse.jst.pagedesigner.jsf.ui" fragment="false"/>
-<plugin id="org.eclipse.jst.pagedesigner.jsp.core" fragment="false"/>
-<plugin id="org.eclipse.jst.jsf.doc.dev" fragment="false"/>
-</component>
-
-
-
-
-
-
-
diff --git a/assembly/plugins/org.eclipse.jsf.branding/eclipse32.gif b/assembly/plugins/org.eclipse.jsf.branding/eclipse32.gif
deleted file mode 100644
index e6ad7cc..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/eclipse32.gif
+++ /dev/null
Binary files differ
diff --git a/assembly/plugins/org.eclipse.jsf.branding/eclipse32.png b/assembly/plugins/org.eclipse.jsf.branding/eclipse32.png
deleted file mode 100644
index 568fac1..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/eclipse32.png
+++ /dev/null
Binary files differ
diff --git a/assembly/plugins/org.eclipse.jsf.branding/plugin.properties b/assembly/plugins/org.eclipse.jsf.branding/plugin.properties
deleted file mode 100644
index 2b7a864..0000000
--- a/assembly/plugins/org.eclipse.jsf.branding/plugin.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-###############################################################################
-# Copyright (c) 2006 Oracle Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-# IBM Corporation - initial API and implementation
-###############################################################################
-
-plugin.Name=JavaServer Faces Tools
-plugin.Provider=Eclipse.org
\ No newline at end of file
diff --git a/jsf/features/org.eclipse.jst.webpageeditor.feature/.cvsignore b/jsf/features/org.eclipse.jst.webpageeditor.feature/.cvsignore
deleted file mode 100644
index c14487c..0000000
--- a/jsf/features/org.eclipse.jst.webpageeditor.feature/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-build.xml
diff --git a/jsf/features/org.eclipse.jst.webpageeditor.feature/.project b/jsf/features/org.eclipse.jst.webpageeditor.feature/.project
deleted file mode 100644
index e089155..0000000
--- a/jsf/features/org.eclipse.jst.webpageeditor.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.webpageeditor.feature</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/jsf/features/org.eclipse.jst.webpageeditor.feature/build.properties b/jsf/features/org.eclipse.jst.webpageeditor.feature/build.properties
deleted file mode 100644
index cb50260..0000000
--- a/jsf/features/org.eclipse.jst.webpageeditor.feature/build.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-bin.includes = feature.xml,\
-               license.html,\
-               feature.properties,\
-               epl-v10.html,\
-               eclipse_update_120.jpg
diff --git a/jsf/features/org.eclipse.jst.webpageeditor.feature/eclipse_update_120.jpg b/jsf/features/org.eclipse.jst.webpageeditor.feature/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/jsf/features/org.eclipse.jst.webpageeditor.feature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/jsf/features/org.eclipse.jst.webpageeditor.feature/epl-v10.html b/jsf/features/org.eclipse.jst.webpageeditor.feature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/jsf/features/org.eclipse.jst.webpageeditor.feature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
-@font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
-@page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor (&quot;Commercial
-Contributor&quot;) hereby agrees to defend and indemnify every other
-Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
-costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/jsf/features/org.eclipse.jst.webpageeditor.feature/feature.properties b/jsf/features/org.eclipse.jst.webpageeditor.feature/feature.properties
deleted file mode 100644
index 09211a4..0000000
--- a/jsf/features/org.eclipse.jst.webpageeditor.feature/feature.properties
+++ /dev/null
@@ -1,144 +0,0 @@
-###############################################################################
-# Copyright (c) 2005, 2007 Oracle Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#    Gerry Kessler - initial API and implementation
-###############################################################################
-# feature.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=WTP Web Page Editor
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Web Tools Platform (WTP) Project update site
-
-# "description" property - description of the feature
-description=Web Tools Platform (WTP) Web Page Editor
-
-# "copyright" property - text of the "Feature Update Copyright"
-feature.copyright=\
-Copyright (c) 2007 Oracle Corporation.\
-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\
-\n\
-Contributors:\n\
-    Oracle Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-June 7, 2007\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
-is provided to you under the terms and conditions of the Eclipse Public\n\
-License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
-Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse.org CVS\n\
-repository ("Repository") in CVS modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-   - Content may be structured and packaged into modules to facilitate delivering,\n\
-     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-     plug-in fragments ("Fragments"), and features ("Features").\n\
-   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
-     in a directory named "plugins".\n\
-   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-Features may also include other Features ("Included Features"). Files named\n\
-"feature.xml" may contain a list of the names and version numbers of\n\
-Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-   - The top-level (root) directory\n\
-   - Plug-in and Fragment directories\n\
-   - Inside Plug-ins and Fragments packaged as JARs\n\
-   - Sub-directories of the directory named "src" of certain Plug-ins\n\
-   - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Eclipse Update Manager, you must agree to a license ("Feature Update\n\
-License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties". Such Abouts,\n\
-Feature Licenses and Feature Update Licenses contain the terms and\n\
-conditions (or references to such terms and conditions) that govern your\n\
-use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
-    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use,\n\
-and re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/jsf/features/org.eclipse.jst.webpageeditor.feature/feature.xml b/jsf/features/org.eclipse.jst.webpageeditor.feature/feature.xml
deleted file mode 100644
index 6df9c58..0000000
--- a/jsf/features/org.eclipse.jst.webpageeditor.feature/feature.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.jst.webpageeditor.feature"
-      label="%featureName"
-      version="1.0.0.qualifier"
-      provider-name="%providerName"
-      image="eclipse_update_120.jpg">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="license.html">
-      %license
-   </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates"/>
-      <discovery label="Web Tools Platform (WTP) Updates" url="http://download.eclipse.org/webtools/updates"/>
-   </url>
-   
-   <requires>
-      <import plugin="org.eclipse.core.runtime" version="3.2.0" match="compatible"/>
-      <import plugin="org.eclipse.debug.ui" version="3.2.0" match="compatible"/>
-      <import plugin="org.eclipse.emf.ecore" version="2.2.0"/>
-      <import plugin="org.eclipse.gef" version="3.2.0" match="compatible"/>
-      <import plugin="org.eclipse.jface.text" version="3.2.0" match="compatible"/>
-      <import plugin="org.eclipse.ui.workbench.texteditor" version="3.2.0" match="compatible"/>
-      <import plugin="org.eclipse.wst.common.ui" version="1.1.0" match="equivalent"/>
-      <import plugin="org.eclipse.wst.common.uriresolver" version="1.1.0" match="equivalent"/>
-      <import plugin="org.eclipse.wst.sse.ui" version="1.0.101" match="equivalent"/>
-      <import plugin="org.eclipse.jst.j2ee" version="1.1.0" match="equivalent"/>
-      <import plugin="org.eclipse.jst.jsp.core" version="1.1.0"/>
-      <import plugin="org.eclipse.jst.jsp.ui" version="1.1.0"/>
-      <import plugin="org.eclipse.jst.j2ee.web" version="1.1.0" match="equivalent"/>
-      <import plugin="org.eclipse.jst.pagedesigner.jsp.core" version="1.0.0" match="equivalent"/>
-      <import plugin="org.eclipse.wst.common.ui.properties" version="1.0.101"/>
-      <import plugin="org.eclipse.jst.jsf.common.ui" version="1.0.0" match="equivalent"/>
-      <import plugin="org.eclipse.ui.ide" version="3.2.0" match="compatible"/>
-      <import plugin="org.eclipse.jdt.ui" version="3.2.0" match="compatible"/>
-      <import plugin="org.eclipse.jst.jsf.common" version="1.0.0" match="equivalent"/>
-      <import plugin="org.eclipse.jst.jsf.core" version="1.0.0" match="equivalent"/>
-      <import plugin="org.eclipse.jdt.core" version="3.2.0" match="compatible"/>
-      <import plugin="org.eclipse.wst.html.ui" version="1.0.100" match="equivalent"/>
-      <import plugin="org.eclipse.wst.css.core" version="1.1.0" match="equivalent"/>
-      <import plugin="org.eclipse.wst.html.core" version="1.1.0" match="equivalent"/>
-      <import plugin="org.eclipse.wst.xml.ui" version="1.0.100" match="equivalent"/>
-      <import plugin="org.eclipse.wst.xml.core" version="1.1.0" match="equivalent"/>
-      <import plugin="org.eclipse.wst.sse.core" version="1.1.0" match="equivalent"/>
-      <import plugin="org.eclipse.jst.jsf.facesconfig" version="1.0.0" match="equivalent"/>
-      <import plugin="org.eclipse.jst.pagedesigner" version="1.0.0" match="equivalent"/>
-      <import plugin="org.eclipse.wst.common.modulecore" version="1.1.0" match="equivalent"/>
-      <import plugin="org.eclipse.core.resources" version="3.2.0" match="compatible"/>
-   </requires>
-
-   <plugin
-         id="org.eclipse.jst.pagedesigner"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.jst.pagedesigner.jsf.ui"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.jst.pagedesigner.jsp.core"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-</feature>
diff --git a/jsf/features/org.eclipse.jst.webpageeditor.feature/license.html b/jsf/features/org.eclipse.jst.webpageeditor.feature/license.html
deleted file mode 100644
index a450af9..0000000
--- a/jsf/features/org.eclipse.jst.webpageeditor.feature/license.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
-<!-- saved from url=(0044)http://www.eclipse.org/legal/epl/notice.html -->
-<HTML><HEAD><TITLE>Eclipse.org Software User Agreement</TITLE>
-<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
-<BODY lang=EN-US vLink=purple link=blue>
-<H2>Eclipse Foundation Software User Agreement</H2>
-
-<H3>Usage Of Content</H3>
-<P>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION 
-AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF 
-THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE 
-TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED 
-BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED 
-BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE 
-AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE 
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY 
-APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU 
-MAY NOT USE THE CONTENT.</P>
-<H3>Applicable Licenses</H3>
-<P>Unless otherwise indicated, all Content made available by the Eclipse 
-Foundation is provided to you under the terms and conditions of the Eclipse 
-Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this 
-Content and is also available at <A 
-href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</A>. 
-For purposes of the EPL, "Program" will mean the Content.</P>
-<P>Content includes, but is not limited to, source code, object code, 
-documentation and other files maintained in the Eclipse.org CVS repository 
-("Repository") in CVS modules ("Modules") and made available as downloadable 
-archives ("Downloads").</P>
-<P>Content may be apportioned into plug-ins ("Plug-ins"), plug-in fragments 
-("Fragments"), and features ("Features"). A Feature is a bundle of one or more 
-Plug-ins and/or Fragments and associated material. Files named "feature.xml" may 
-contain a list of the names and version numbers of the Plug-ins and/or Fragments 
-associated with a Feature. Plug-ins and Fragments are located in directories 
-named "plugins" and Features are located in directories named "features".</P>
-<P>Features may also include other Features ("Included Features"). Files named 
-"feature.xml" may contain a list of the names and version numbers of Included 
-Features.</P>
-<P>The terms and conditions governing Plug-ins and Fragments should be contained 
-in files named "about.html" ("Abouts"). The terms and conditions governing 
-Features and Included Features should be contained in files named "license.html" 
-("Feature Licenses"). Abouts and Feature Licenses may be located in any 
-directory of a Download or Module including, but not limited to the following 
-locations:</P>
-<UL>
-  <LI>The top-level (root) directory 
-  <LI>Plug-in and Fragment directories 
-  <LI>Subdirectories of the directory named "src" of certain Plug-ins 
-  <LI>Feature directories </LI></UL>
-<P>Note: if a Feature made available by the Eclipse Foundation is installed 
-using the Eclipse Update Manager, you must agree to a license ("Feature Update 
-License") during the installation process. If the Feature contains Included 
-Features, the Feature Update License should either provide you with the terms 
-and conditions governing the Included Features or inform you where you can 
-locate them. Feature Update Licenses may be found in the "license" property of 
-files named "feature.properties". Such Abouts, Feature Licenses and Feature 
-Update Licenses contain the terms and conditions (or references to such terms 
-and conditions) that govern your use of the associated Content in that 
-directory.</P>
-<P>THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL 
-OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE 
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</P>
-<UL>
-  <LI>Common Public License Version 1.0 (available at <A 
-  href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</A>) 
-
-  <LI>Apache Software License 1.1 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</A>) 
-
-  <LI>Apache Software License 2.0 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</A>) 
-
-  <LI>IBM Public License 1.0 (available at <A 
-  href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</A>) 
-
-  <LI>Metro Link Public License 1.00 (available at <A 
-  href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</A>) 
-
-  <LI>Mozilla Public License Version 1.1 (available at <A 
-  href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</A>)
-  
-    <li>Common Development and Distribution License (CDDL) Version 1.0 (available at <A 
-  href="http://www.sun.com/cddl/cddl.html">http://www.sun.com/cddl/cddl.html)</A>
-  </LI> 
-  </LI></UL>
-<P>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR 
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License is 
-provided, please contact the Eclipse Foundation to determine what terms and 
-conditions govern that particular Content.</P>
-<H3>Cryptography</H3>
-<P>Content may contain encryption software. The country in which you are 
-currently may have restrictions on the import, possession, and use, and/or 
-re-export to another country, of encryption software. BEFORE using any 
-encryption software, please check the country's laws, regulations and policies 
-concerning the import, possession, or use, and re-export of encryption software, 
-to see if this is permitted.</P></BODY></HTML>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.classpath b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.classpath
new file mode 100644
index 0000000..ce73933
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.cvsignore b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.cvsignore
new file mode 100644
index 0000000..4f853e0
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.cvsignore
@@ -0,0 +1 @@
+@dot
diff --git a/assembly/plugins/org.eclipse.jsf.branding/.project b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.project
similarity index 92%
rename from assembly/plugins/org.eclipse.jsf.branding/.project
rename to jsf/plugins/org.eclipse.jst.jsf.common.runtime/.project
index bd50004..4fe172b 100644
--- a/assembly/plugins/org.eclipse.jsf.branding/.project
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>org.eclipse.jsf.branding</name>
+	<name>org.eclipse.jst.jsf.common.runtime</name>
 	<comment></comment>
 	<projects>
 	</projects>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.settings/org.eclipse.jdt.core.prefs b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..4f79f7b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,79 @@
+#Wed Jan 09 14:34:02 PST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=error
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
+org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=protected
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingJavadocComments=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=protected
+org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=protected
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=ignore
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=error
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=error
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..416d6eb
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/META-INF/MANIFEST.MF
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: CommonComponentPlugin Plug-in
+Bundle-SymbolicName: org.eclipse.jst.jsf.common.runtime
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.jst.jsf.common.runtime.internal.JSFCommonRuntimePlugin
+Require-Bundle: org.eclipse.core.runtime
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Export-Package: org.eclipse.jst.jsf.common.runtime.internal.debug,
+ org.eclipse.jst.jsf.common.runtime.internal.model,
+ org.eclipse.jst.jsf.common.runtime.internal.model.bean,
+ org.eclipse.jst.jsf.common.runtime.internal.model.behavioural,
+ org.eclipse.jst.jsf.common.runtime.internal.model.component,
+ org.eclipse.jst.jsf.common.runtime.internal.model.datatypes,
+ org.eclipse.jst.jsf.common.runtime.internal.model.decorator,
+ org.eclipse.jst.jsf.common.runtime.internal.model.event,
+ org.eclipse.jst.jsf.common.runtime.internal.model.types,
+ org.eclipse.jst.jsf.common.runtime.internal.view.model.common
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/build.properties b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/WebContent/WEB-INF/faces-config.xml b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/WebContent/WEB-INF/faces-config.xml
new file mode 100644
index 0000000..15eef3b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/WebContent/WEB-INF/faces-config.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE faces-config PUBLIC
+    "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
+    "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
+
+<faces-config>
+	<lifecycle>
+		<phase-listener>
+		instrument.PhaseListener1</phase-listener>
+	</lifecycle>
+</faces-config>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/jar/jsfrt.jar b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/jar/jsfrt.jar
new file mode 100644
index 0000000..5093673
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/jar/jsfrt.jar
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/src/instrument/MyMonitorMessageFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/src/instrument/MyMonitorMessageFactory.java
new file mode 100644
index 0000000..f03216b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/src/instrument/MyMonitorMessageFactory.java
@@ -0,0 +1,122 @@
+package instrument;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.util.Iterator;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+import javax.faces.component.UIOutput;
+
+import org.eclipse.jst.jsf.common.runtime.internal.debug.JSFMonitorMessage;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentFactory;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.FacetInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.UIInputInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.UIOutputInfo;
+
+public class MyMonitorMessageFactory 
+{
+    public static JSFMonitorMessage  createJSFMonitorMessage(InputStream inStream) throws IOException, ClassCastException, ClassNotFoundException
+    {
+        ObjectInputStream objectStream = new ObjectInputStream(inStream);
+        Object nextObject = objectStream.readObject();
+        return (JSFMonitorMessage) nextObject;
+    }
+   
+    static ComponentInfo buildComponentTree(UIComponent component, boolean isFacet)
+    {
+        final ComponentInfo componentInfo = getComponentData(component, isFacet);
+        
+        for (Iterator it = component.getChildren().iterator(); it.hasNext();)
+        {
+            UIComponent child = (UIComponent) it.next();
+            componentInfo.getChildren().add(buildComponentTree(child, false));
+        }
+
+        for (Iterator it = component.getFacets().values().iterator(); it.hasNext();)
+        {
+            UIComponent facet = (UIComponent) it.next();
+            componentInfo.getChildren().add(buildComponentTree(facet, true));
+        }
+        
+        return componentInfo;
+    }
+    
+    private static ComponentInfo getComponentData(final UIComponent component, boolean isFacet)
+    {
+        if (isFacet)
+        {
+            return calculateFacetInfo(component);
+        }
+        else if (component instanceof UIInput)
+        {
+            return calculateUIInput((UIInput)component);
+        }
+        else if (component instanceof UIOutput)
+        {
+            return calculateUIOutput((UIOutput)component);
+        }
+        
+        // default; just make a component
+        return calculateComponentInfo(component);
+    }
+
+    private static ComponentInfo calculateComponentInfo(UIComponent component)
+    {
+        final String id = component.getId();
+        final String parentId = component.getParent() == null ? null : component.getParent().getId();
+        final String componentFamily = component.getFamily();
+        final String renderFamily = component.getRendererType();
+        final String componentType = null;
+        final String componentClass = component.getClass().getCanonicalName();
+        
+        return ComponentFactory.createComponentInfo
+            (id, parentId, componentFamily, renderFamily, componentType, componentClass);
+    }
+    
+    private static FacetInfo calculateFacetInfo(UIComponent component)
+    {
+        final String id = component.getId();
+        final String parentId = component.getParent() == null ? null : component.getParent().getId();
+        final String componentFamily = component.getFamily();
+        final String renderFamily = component.getRendererType();
+        final String componentType = null;
+        final String componentClass = component.getClass().getCanonicalName();
+
+        return ComponentFactory.createFacetInfo
+            (id, parentId, componentFamily, renderFamily, componentType, componentClass);
+    }
+    
+    private static UIInputInfo calculateUIInput(UIInput  uiInput)
+    {
+        final String id = uiInput.getId();
+        final String parentId = uiInput.getParent() == null ? null : uiInput.getParent().getId();
+        final String componentFamily = uiInput.getFamily();
+        final String renderFamily = uiInput.getRendererType();
+        final String componentType = null;
+        final String componentClass = uiInput.getClass().getCanonicalName();
+        final String isValid = Boolean.toString(uiInput.isValid());
+        final String isImmediate = Boolean.toString(uiInput.isImmediate());
+        final String isRequired = Boolean.toString(uiInput.isRequired());
+        final String isRendered = Boolean.toString(uiInput.isRendered());
+
+        return ComponentFactory.createUIInputInfo
+            (id, parentId, componentFamily, renderFamily, isValid, isImmediate, isRequired, isRendered, componentType, componentClass);
+    }
+
+    private static UIOutputInfo calculateUIOutput(UIOutput uiOutput)
+    {
+        final String id = uiOutput.getId();
+        final String parentId = uiOutput.getParent() == null ? null : uiOutput.getParent().getId();
+        final String componentFamily = uiOutput.getFamily();
+        final String renderFamily = uiOutput.getRendererType();
+        final String componentType = null;
+        final String componentClass = uiOutput.getClass().getCanonicalName();
+        final String isRendered = Boolean.toString(uiOutput.isRendered());
+
+        return ComponentFactory.createUIOutputInfo
+            (id, parentId, componentFamily, renderFamily, isRendered, componentType, componentClass);
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/src/instrument/PhaseListener1.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/src/instrument/PhaseListener1.java
new file mode 100644
index 0000000..f24e970
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/instrumentation/src/instrument/PhaseListener1.java
@@ -0,0 +1,332 @@
+package instrument;
+
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.Writer;
+import java.net.Socket;
+import java.net.UnknownHostException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Stack;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import javax.faces.FactoryFinder;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import org.eclipse.jst.jsf.common.runtime.internal.debug.ComponentTreeMessage;
+import org.eclipse.jst.jsf.common.runtime.internal.debug.JSFMonitorMessage;
+import org.eclipse.jst.jsf.common.runtime.internal.debug.MonitorMessageFactory;
+import org.eclipse.jst.jsf.common.runtime.internal.debug.RenderAttribute;
+import org.eclipse.jst.jsf.common.runtime.internal.debug.RenderNode;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+
+/**
+ * @author cbateman
+ *
+ */
+public class PhaseListener1 implements PhaseListener 
+{
+	SocketClient		_socketClient;
+	ResponseWriter		_savedRW;
+	LoggingResponseWriter  _injectRW;
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 6564874625827591775L;
+
+	public PhaseListener1()
+	{
+		System.out.println("Initialized PhaseListener: "+this);
+		_socketClient = new SocketClient(3702);
+		Thread thread = new Thread(_socketClient);
+		thread.start();
+		
+	}
+	
+	public void afterPhase(PhaseEvent event) {
+		if(PhaseId.RENDER_RESPONSE.equals(event.getPhaseId()))
+		{
+			System.out.printf("afterPhase: %s, for view id: %s\n",event.getPhaseId(),event.getFacesContext().getViewRoot().getViewId());
+			dumpComponentTree(event.getFacesContext());
+			
+			if (_savedRW != null)
+			{
+				event.getFacesContext().setResponseWriter(_savedRW);
+			}
+			
+			if (_injectRW != null)
+			{
+				dumpNode(_injectRW._rootComponentNode, "");
+			}
+		}
+	}
+
+	private void dumpNode(RenderNode node, String prefix)
+	{
+		System.out.printf("%s%s for component %s\n", prefix, node.getRenderedNodeName(), node.getComponentId());
+
+		for (final Iterator it = node.getChildren().iterator();it.hasNext();)
+		{
+			RenderNode child = (RenderNode) it.next();
+			dumpNode(child, prefix+"\t");
+		}
+	}
+
+	public void beforePhase(PhaseEvent event) {
+		if (PhaseId.RENDER_RESPONSE.equals(event.getPhaseId()))
+		{
+			FacesContext facesContext = event.getFacesContext();
+            RenderKitFactory renderFactory = 
+            	(RenderKitFactory)FactoryFinder.getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+            RenderKit renderKit = renderFactory.getRenderKit(facesContext,
+                                                             facesContext.getViewRoot().getRenderKitId());
+
+            _savedRW = facesContext.getResponseWriter();
+
+            try
+            {
+	            Writer writer = ((ServletResponse) facesContext.getExternalContext().getResponse()).getWriter();
+	            String charEncoding = ((ServletRequest)facesContext.getExternalContext().getRequest()).getCharacterEncoding();
+	            ResponseWriter responseWriter = renderKit.createResponseWriter
+	            	(writer,
+	                                           null /*Default: get the allowed content-types from the accept-header*/,
+	                                           charEncoding);
+	            _injectRW = new LoggingResponseWriter(responseWriter);
+	            facesContext.setResponseWriter(_injectRW);
+            }
+            catch (IOException ioe)
+            {
+            	ioe.printStackTrace();
+            }
+		}
+//		System.out.printf("beforePhase: %s, for view id: %s\n",event.getPhaseId(),event.getFacesContext().getViewRoot().getViewId());
+//		dumpComponentTree(event.getFacesContext());
+	}
+
+	public PhaseId getPhaseId() {
+		return PhaseId.ANY_PHASE;
+	}
+
+	private void dumpComponentTree(final FacesContext facesContext)
+	{
+		final UIViewRoot root = facesContext.getViewRoot();
+		
+		if (root != null)
+		{
+			final String viewId = root.getViewId();
+			final ComponentInfo rootComponent = MyMonitorMessageFactory.buildComponentTree(root,false);
+			ComponentTreeMessage message = 
+				MonitorMessageFactory.createTreeMessage(viewId, rootComponent, _injectRW._rootComponentNode);
+			_socketClient.put(message);
+		}
+	}
+	
+	
+	private static class SocketClient implements Runnable
+	{
+		private final int					_port;
+		
+		private LinkedBlockingQueue<JSFMonitorMessage>  _queue = 
+			new LinkedBlockingQueue<JSFMonitorMessage>();
+		
+		SocketClient(final int port)
+		{
+			_port = port;
+		}
+		
+		public void run()
+		{
+			JSFMonitorMessage buffer = null;
+			
+			try
+			{
+				while ((buffer = _queue.take()) != null)
+				{
+			        Socket socket = null;
+			        
+			        try
+			        {
+			        	socket = new Socket("127.0.0.1", _port);
+			        	ObjectOutputStream  stream = new ObjectOutputStream(socket.getOutputStream());
+			        	stream.writeObject(buffer);
+//						PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
+//						writer.println(buffer);
+//						writer.flush();
+			        } catch (UnknownHostException e) {
+						e.printStackTrace();
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+			        finally
+			        {
+			        	if (socket != null && !socket.isClosed())
+			        	{
+			        		try {
+								socket.close();
+							} catch (IOException e) {
+								e.printStackTrace();
+							}
+			        	}
+			        }
+				}
+			}
+			catch (InterruptedException e)
+			{
+				e.printStackTrace();
+			}
+		}
+		
+		public void put(JSFMonitorMessage  message)
+		{
+			_queue.add(message);
+		}
+	}
+	
+	private static class LoggingResponseWriter extends ResponseWriter
+	{
+		private final ResponseWriter		_wrapWriter;
+		private final Stack/*<RenderNode>*/	_parentStack;
+		private RenderNode					_curNode;
+		private RenderNode					_rootComponentNode;
+
+		// map component id to the root rendernode rendered for it
+		private Map							_componentToHtml;
+		
+		LoggingResponseWriter(ResponseWriter  wrapWriter)
+		{
+			_wrapWriter = wrapWriter;
+			_parentStack = new Stack();
+			
+			_componentToHtml = new HashMap/*<String,RenderNode>*/();
+		}
+		
+		public ResponseWriter cloneWithWriter(Writer writer) {
+			return _wrapWriter.cloneWithWriter(writer);
+		}
+
+		public void endDocument() throws IOException {
+			_wrapWriter.endDocument();
+		}
+
+		public void endElement(String element) throws IOException {
+			_curNode = (RenderNode) _parentStack.pop();
+			_wrapWriter.endElement(element);
+		}
+
+		public void flush() throws IOException {
+			_wrapWriter.flush();
+		}
+
+		public String getCharacterEncoding() {
+			return _wrapWriter.getCharacterEncoding();
+		}
+
+		public String getContentType() {
+			return _wrapWriter.getContentType();
+		}
+
+		public void startDocument() throws IOException {
+			_rootComponentNode = new RenderNode(null, null);
+			_wrapWriter.startDocument();
+		}
+
+		public void startElement(String elementName, UIComponent component)
+				throws IOException 
+		{
+			String componentId = null;
+			
+			if (component != null)
+			{
+				componentId = component.getId();
+			}
+			
+			RenderNode oldNode = _curNode;
+			// push the curNode.  Pushing null indicates the root of the document
+			_parentStack.push(oldNode);
+
+			_curNode = new RenderNode(componentId, elementName);
+			
+			// note that assumption here is that the first html element
+			// we see corresponding to a component is the root of its
+			// html tree.  This may not be true if a component renders
+			// more than one root element or if the output is generated
+			// any thing but pre-order (parent first) tranversal of the 
+			// component tree.  TODO: this algorithm needs refining
+			if (!_componentToHtml.containsKey(componentId))
+			{
+				_componentToHtml.put(componentId, _curNode);
+			}
+			
+			// if the current node isn't null, then append this new element
+			if (oldNode != null)
+			{
+				oldNode.getChildren().add(_curNode);
+			}
+			// otherwise, we are at the doc root, so append there instead
+			else
+			{
+				_rootComponentNode.getChildren().add(_curNode);
+			}
+
+			
+			// do the normal write
+			_wrapWriter.startElement(elementName, component);
+		}
+
+		public void writeAttribute(String name, Object value, String componentPropertyName)
+				throws IOException {
+			
+			System.out.printf("%s: [%s,%s]\n", name, value.toString(), componentPropertyName);
+			final RenderAttribute  attribute = 
+				new RenderAttribute(name, value.toString(), componentPropertyName);
+			
+			if (_curNode != null)
+			{
+				_curNode.getRenderedAttributes().add(attribute);
+			}
+			_wrapWriter.writeAttribute(name, value, componentPropertyName);
+		}
+
+		public void writeComment(Object obj) throws IOException {
+			_wrapWriter.writeComment(obj);
+		}
+
+		public void writeText(Object arg0, String arg1) throws IOException {
+			_wrapWriter.writeText(arg0, arg1);
+		}
+
+		public void writeText(char[] arg0, int arg1, int arg2)
+				throws IOException {
+			_wrapWriter.writeText(arg0, arg1, arg2);
+		}
+
+		public void writeURIAttribute(String arg0, Object arg1, String arg2)
+				throws IOException {
+			_wrapWriter.writeURIAttribute(arg0, arg1, arg2);
+		}
+
+		public void close() throws IOException {
+			_wrapWriter.close();
+		}
+
+		public void write(char[] cbuf, int off, int len) throws IOException {
+			_wrapWriter.write(cbuf, off, len);
+		}
+
+		public ResponseWriter getWrapWriter() {
+			return _wrapWriter;
+		}
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/JSFCommonRuntimePlugin.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/JSFCommonRuntimePlugin.java
new file mode 100644
index 0000000..d17c6f5
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/JSFCommonRuntimePlugin.java
@@ -0,0 +1,66 @@
+package org.eclipse.jst.jsf.common.runtime.internal;
+
+import org.eclipse.core.runtime.ILog;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class JSFCommonRuntimePlugin extends Plugin {
+
+    /**
+     *  The plug-in ID
+     */
+    public static final String PLUGIN_ID = "CommonComponentPlugin";
+
+    // The shared instance
+    private static JSFCommonRuntimePlugin plugin;
+
+    /**
+     * The constructor
+     */
+    public JSFCommonRuntimePlugin() {
+        // empty constructor
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+     */
+    public void start(final BundleContext context) throws Exception {
+        super.start(context);
+        plugin = this;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+     */
+    public void stop(final BundleContext context) throws Exception {
+        plugin = null;
+        super.stop(context);
+    }
+
+    /**
+     * Returns the shared instance
+     *
+     * @return the shared instance
+     */
+    public static JSFCommonRuntimePlugin getDefault() {
+        return plugin;
+    }
+
+    /**
+     * @param message
+     * @param t
+     */
+    public static void log(final String message, final Throwable t)
+    {
+        final ILog log = getDefault().getLog();
+        final IStatus status = new Status(IStatus.ERROR, PLUGIN_ID, message, t);
+        log.log(status);
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/ComponentTreeMessage.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/ComponentTreeMessage.java
new file mode 100644
index 0000000..7507739
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/ComponentTreeMessage.java
@@ -0,0 +1,236 @@
+package org.eclipse.jst.jsf.common.runtime.internal.debug;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+
+
+/**
+ * Represents a component tree in message for that can be serialized.
+ * 
+ * @author cbateman
+ *
+ */
+public class ComponentTreeMessage extends JSFMonitorMessage 
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -6282344329821994209L;
+    private String                              _viewId;
+    private ComponentInfo                       _treeRoot;
+    private RenderNode                          _renderRoot;
+   // private HashMap<String, ComponentInfo>      _idIndex;
+    
+    /**
+     * default constructor
+     */
+    public ComponentTreeMessage()
+    {
+        //_idIndex = new HashMap<String, ComponentInfo>();
+    }
+    
+    /**
+     * @return the view id
+     */
+    public final String getViewId() {
+        return _viewId;
+    }
+
+    /**
+     * @return the componentinfo at the root of the component tree
+     */
+    public final ComponentInfo getTreeRoot() {
+        return _treeRoot;
+    }
+
+    /**
+     * @return the rendered root node
+     */
+    public final RenderNode getRenderRoot() {
+        return _renderRoot;
+    }
+
+    final void setRenderRoot(RenderNode renderRoot) {
+        _renderRoot = renderRoot;
+    }
+
+    final void setTreeRoot(ComponentInfo treeRoot)
+    {
+        _treeRoot = treeRoot;
+    }
+    
+    final void setViewId(final String viewId)
+    {
+        _viewId = viewId;
+    }
+    
+//    @Override
+//    protected void deserialize(InputStream inStream) throws IOException, ClassNotFoundException
+//    {
+//        ObjectInputStream  objectInputStream = new ObjectInputStream(inStream);
+//        
+//        Object obj = objectInputStream.readObject();
+//        int bytesRead = super.deserialize(inStream);
+//        
+//        // first line must be startView
+//        final BufferedReader reader = 
+//            new BufferedReader(new InputStreamReader(inStream));
+//        
+//        String line = reader.readLine();
+//        
+//        if (line != null
+//                && line.startsWith(START_VIEW))
+//        {
+//            _viewId = line.substring(START_VIEW.length()).trim();
+//            bytesRead += line.length()+1;
+//        }
+//        
+//        // loop until EOF
+//        while ((line = reader.readLine())!=null)
+//        {
+//            bytesRead += line.length()+1;
+//            
+//            if (line.startsWith("component:"))
+//            {
+//                parseComponent(line.substring("component:".length()).trim());
+//            }
+//            else if (line.startsWith("facet:"))
+//            {
+//                parseFacet(line.substring("facet:".length()).trim());
+//            }
+//            else if (line.startsWith("uiInput:"))
+//            {
+//                parseUIInput(line.substring("uiInput:".length()).trim());
+//            }
+//            else if (line.startsWith("uiOutput:"))
+//            {
+//                parseUIOutput(line.substring("uiOutput:".length()).trim());
+//            }
+//            else if (line.startsWith("endView"))
+//            {
+//                //
+//            }
+//        }
+//        return bytesRead;
+//    }
+
+//    private ComponentInfo  parseComponent(final String line)
+//    {
+//        final String[]  fields = line.split(",");
+//        if (fields.length >= 4)
+//        {
+//            String parentId = "!".equals(fields[0]) ? null : fields[0];
+//            String id = "!".equals(fields[1]) ? null : fields[1];
+//            String componentFamily = fields[2];
+//            String renderFamily = fields[3];
+//            
+//            ComponentInfo componentInfo = 
+//                ComponentFactory.createComponentInfo
+//                    (id, parentId, componentFamily, renderFamily);
+//
+//            if (id == null)
+//            {
+//                _treeRoot = componentInfo;
+//                _idIndex.put(null, componentInfo);
+//            }
+//            else
+//            {
+//                _idIndex.put(id, componentInfo);
+//                
+//                ComponentInfo parent = 
+//                    (ComponentInfo)_idIndex.get(parentId);
+//                
+//                if (parent != null)
+//                {
+//                    parent.getChildren().add(componentInfo);
+//                }
+//                else
+//                {
+//                    _treeRoot.getChildren().add(componentInfo);
+//                }
+//            }
+//        }
+//        return null;
+//    }
+//    
+//    private FacetInfo parseFacet(final String line)
+//    {
+//        final String[]  fields = line.split(",");
+//
+//        if (fields.length >= 4)
+//        {
+//            String parentId = "!".equals(fields[0]) ? null : fields[0];
+//            String id = "!".equals(fields[1]) ? null : fields[1];
+//            String componentFamily = fields[2];
+//            String renderFamily = fields[3];
+//
+//            FacetInfo facetInfo = 
+//                ComponentFactory.createFacetInfo(id, parentId, componentFamily, renderFamily);
+//            ComponentInfo  parent = _idIndex.get(parentId);
+//            
+//            if (parent != null)
+//            {
+//                parent.getChildren().add(facetInfo);
+//            }
+//            
+//            return facetInfo;
+//        }
+//        return null;
+//    }
+//    
+//    private UIInputInfo parseUIInput(final String line)
+//    {
+//        final String[]  fields = line.split(",");
+//
+//        if (fields.length >= 7)
+//        {
+//            String parentId = "!".equals(fields[0]) ? null : fields[0];
+//            String id = "!".equals(fields[1]) ? null : fields[1];
+//            String componentFamily = fields[2];
+//            String renderFamily = fields[3];
+//            String isValid = fields[4];
+//            String isImmediate = fields[5];
+//            String isRequired = fields[6];
+//            String isRendered = fields[7];
+//            
+//            UIInputInfo uiInputInfo = 
+//                ComponentFactory.createUIInputInfo
+//                    (id, parentId, componentFamily, renderFamily, isValid, isImmediate, isRequired, isRendered);
+//            ComponentInfo  parent = _idIndex.get(parentId);
+//            
+//            if (parent != null)
+//            {
+//                parent.getChildren().add(uiInputInfo);
+//            }
+//            
+//            return uiInputInfo;
+//        }            
+//        return null;
+//    }
+//    
+//    private UIOutputInfo parseUIOutput(final String line)
+//    {
+//        final String[]  fields = line.split(",");
+//
+//        if (fields.length >= 4)
+//        {
+//            String parentId = "!".equals(fields[0]) ? null : fields[0];
+//            String id = "!".equals(fields[1]) ? null : fields[1];
+//            String componentFamily = fields[2];
+//            String renderFamily = fields[3];
+//            String isRendered = fields[4];
+//            
+//            UIOutputInfo uiOutputInfo = 
+//                ComponentFactory.createUIOutputInfo(id, parentId, componentFamily, renderFamily, isRendered);
+//            
+//            ComponentInfo  parent = _idIndex.get(parentId);
+//            
+//            if (parent != null)
+//            {
+//                parent.getChildren().add(uiOutputInfo);
+//            }
+//            
+//            return uiOutputInfo;
+//        }            
+//        return null;
+//    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/JSFMonitorMessage.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/JSFMonitorMessage.java
new file mode 100644
index 0000000..f4c89dd
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/JSFMonitorMessage.java
@@ -0,0 +1,16 @@
+package org.eclipse.jst.jsf.common.runtime.internal.debug;
+
+import java.io.Serializable;
+
+/**
+ * Super of all messages that are sent by the JSF debug monitor
+ * @author cbateman
+ *
+ */
+public abstract class JSFMonitorMessage implements Serializable
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -5417558019077000040L;
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/MonitorMessageFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/MonitorMessageFactory.java
new file mode 100644
index 0000000..eef2154
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/MonitorMessageFactory.java
@@ -0,0 +1,27 @@
+package org.eclipse.jst.jsf.common.runtime.internal.debug;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+
+/**
+ * Creates JSF remote monitor messages.
+ * 
+ * @author cbateman
+ *
+ */
+public class MonitorMessageFactory 
+{
+    /**
+     * @param viewId
+     * @param root
+     * @param renderRoot
+     * @return a new component tree message for the parameters
+     */
+    public static ComponentTreeMessage createTreeMessage(final String viewId, final ComponentInfo root, final RenderNode renderRoot)
+    {
+        ComponentTreeMessage message = new ComponentTreeMessage();
+        message.setViewId(viewId);
+        message.setTreeRoot(root);
+        message.setRenderRoot(renderRoot);
+        return message;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/RenderAttribute.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/RenderAttribute.java
new file mode 100644
index 0000000..1a763f6
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/RenderAttribute.java
@@ -0,0 +1,49 @@
+package org.eclipse.jst.jsf.common.runtime.internal.debug;
+
+/**
+ * Information about a rendered XML attribute
+ * 
+ * @author cbateman
+ *
+ */
+public class RenderAttribute extends JSFMonitorMessage {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -4601065346261130623L;
+
+    private final String  _name;        // the name of the attribute.  TODO: local vs. namespace?
+    private final String  _value;       // the rendered value of the  node
+    private final String  _propertyName;  // the property name on the corresponding component
+                                          // may be null
+    /**
+     * @param name
+     * @param value
+     * @param propertyName
+     */
+    public RenderAttribute(String name, String value, String propertyName) {
+        super();
+        _name = name;
+        _propertyName = propertyName;
+        _value = value;
+    }
+    /**
+     * @return the name of the attribute
+     */
+    public final String getName() {
+        return _name;
+    }
+    /**
+     * @return the attribute's value
+     */
+    public final String getValue() {
+        return _value;
+    }
+    /**
+     * @return the name of the corresponding component property if any.
+     */
+    public final String getPropertyName() {
+        return _propertyName;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/RenderNode.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/RenderNode.java
new file mode 100644
index 0000000..1096f9d
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/debug/RenderNode.java
@@ -0,0 +1,75 @@
+package org.eclipse.jst.jsf.common.runtime.internal.debug;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * A rendered XML node.
+ * 
+ * @author cbateman
+ *
+ */
+public class RenderNode extends JSFMonitorMessage 
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -2843929405836710015L;
+
+    private final String      _componentId;       // the id of the component id that caused the node to render
+    private final String      _renderedNodeName;  // the node
+    private final List/*<RenderedAttribute>*/        _renderedAttributes; // attributes
+    private final List        _children;          // the rendered children of renderedNode based
+                                                  // on the output document hiearchy
+    /**
+     * @param componentId
+     * @param renderedNodeName
+     */
+    public RenderNode(String componentId, String renderedNodeName) {
+        super();
+        _componentId = componentId;
+        _renderedNodeName = renderedNodeName;
+        
+        _children = new ArrayList();
+        _renderedAttributes = new ArrayList();
+    }
+    /**
+     * @return the corresponding component's id
+     */
+    public final String getComponentId() {
+        return _componentId;
+    }
+    /**
+     * @return the node's children
+     */
+    public final List getChildren() {
+        return _children;
+    }
+    /**
+     * @return the name of the rendered node (element)
+     */
+    public final String getRenderedNodeName() {
+        return _renderedNodeName;
+    }
+    /**
+     * @return the attributes of this node as rendered.
+     */
+    public final List getRenderedAttributes() {
+        return _renderedAttributes;
+    }
+    public String toString()
+    {
+        String toString = "Root node: "+_renderedNodeName+", attributes: [";
+        
+        for (Iterator it = _renderedAttributes.iterator(); it.hasNext();)
+        {
+            final RenderAttribute attribute = (RenderAttribute) it.next();
+            toString+=attribute.getName() + "=" + attribute.getValue();
+            
+            toString+=it.hasNext() ? ", " : "]";
+        }
+        
+        return toString;
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/ViewObject.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/ViewObject.java
new file mode 100644
index 0000000..a530676
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/ViewObject.java
@@ -0,0 +1,289 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.Decorator;
+
+/**
+ * The base type of all objects that participate in the lifecycle of a view.
+ * This may be used to hold either design time or runtime information.
+ * 
+ * @author cbateman
+ * 
+ */
+public abstract class ViewObject implements Serializable /* IAdaptable? */
+{
+    private Map/* <Class, List<Decorator>> */_decorators;
+    private Map/* <Class, Object> */_adapters;
+    
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 1592205691642453075L;
+
+    /**
+     * This call may be create a new data structure and should be considered of
+     * much higher cost than most calls.
+     * 
+     * @return all decorators of this object. List should be assumed by clients
+     *         to be unmodifiable and may throw mutation exceptions
+     */
+    public List getAllDecorators() {
+        final int size = getDecoratorMap().size();
+
+        if (size == 0) {
+            return Collections.EMPTY_LIST;
+        }
+
+        final List allDecorators = new ArrayList();
+        for (final Iterator entryIt = getDecoratorMap().entrySet().iterator(); entryIt
+                .hasNext();) {
+            final Map.Entry entry = (Map.Entry) entryIt.next();
+            final List decorators = (List) entry.getValue();
+            allDecorators.addAll(decorators);
+        }
+
+        return Collections.unmodifiableList(allDecorators);
+    }
+
+    /**
+     * @param decoratorType
+     * @return all decorators of this object associated with the class type. The
+     *         returned list should be assumed to be unmodifiable. Returns an
+     *         empty list if no decorators are associated with decoratorType
+     */
+    public List getDecorators(final Class decoratorType) {
+        final List decorators = (List) getDecoratorMap().get(decoratorType);
+
+        if (decorators == null) {
+            return Collections.EMPTY_LIST;
+        }
+        return Collections.unmodifiableList(decorators);
+    }
+
+    /**
+     * Add the decorator using decorator.getClass to associate the type. Must be
+     * equivalent to addDecorator(decorator, decorator.getClass());
+     * 
+     * @param decorator
+     *            the decorator to add. <b>Must NOT be null.</b>
+     * @throws IllegalArgumentException
+     *             if decorator is null.
+     */
+    public void addDecorator(final Decorator decorator) {
+        if (decorator == null) {
+            throw new IllegalArgumentException("Arguments must not be null");
+        }
+        final Class associationType = decorator.getClass();
+        addDecorator(decorator, associationType);
+    }
+
+    /**
+     * Add the decorator using the associatedType. Normally you should call
+     * {@link #addDecorator(Decorator)} however in some cases you may wish to
+     * associated a decorator with a class type other than its own. For example,
+     * sub-classes of ValidatorDecorator will want to associated with
+     * ValidatorDecorator.getClass() in most cases so that it is included in any
+     * common examination of component validators.
+     * 
+     * @param decorator
+     *            to add. <b>Must NOT be null.</b>
+     * @param associatedType
+     *            the key to store decorator <b>Must NOT be null</b>
+     * @throws IllegalArgumentException
+     *             if decorator or associatedType is null
+     */
+    public void addDecorator(final Decorator decorator,
+            final Class associatedType) {
+        if (decorator == null || associatedType == null) {
+            throw new IllegalArgumentException("Arguments must not be null");
+        }
+
+        List decoratorsByType = (List) getDecoratorMap().get(associatedType);
+
+        if (decoratorsByType == null) {
+            decoratorsByType = new ArrayList(2);
+            getDecoratorMap().put(associatedType, decoratorsByType);
+        }
+
+        decoratorsByType.add(decorator);
+    }
+
+    /**
+     * Removes decorator if it is associated to associatedType on this view
+     * object.
+     * 
+     * @param decorator
+     * @param associatedType
+     * @return true if the decorator was found and removed.
+     * @throws IllegalArgumentException
+     *             if decorator or associatedType is null
+     */
+    public boolean removeDecorator(final Decorator decorator,
+            final Class associatedType) {
+        if (decorator == null || associatedType == null) {
+            throw new IllegalArgumentException("Arguments must not be null");
+        }
+
+        final List decoratorsByType = (List) getDecoratorMap().get(
+                associatedType);
+
+        if (decoratorsByType != null) {
+            return decoratorsByType.remove(decorator);
+        }
+
+        return false;
+    }
+
+    /**
+     * <p>Get the adapter associated the class key.</p>  
+     * 
+     * <p>If addAdapter has been called with adapterType, then this
+     * adapter object should always be called.  In the default implementation,
+     * if there is no explicit adapter, "this" is returned if (this instanceof adapterType).
+     * 
+     * @param adapterType
+     * @return the interface adapter associated with the class key or null if
+     *         not found
+     */
+    public Object getAdapter(final Class adapterType) {
+        if (adapterType == null) {
+            return null;
+        }
+
+        Object adapter = getAdapterMap().get(adapterType);
+        
+        if (adapter == null)
+        {
+            if (adapterType.isInstance(this)) {
+                adapter = this;
+            }
+        }
+        
+        return adapter;
+    }
+
+    /**
+     * Adds the interface adapter object under adapterType key. There can be at
+     * most one adapter registered for each class key.
+     * 
+     * It is an error (throws exception) to try to add an adapter for adapterType
+     * which this is already instance.  This restriction is necessary because
+     * otherwise local getters/setters would need to be aware of the adapter
+     * mechanism and verify inheritance hierarchies on every calls.  This 
+     * mechanism is intended only for adding interfaces to view object impls
+     * that don't already have them.
+     * 
+     * @param adapterType
+     * @param adapter
+     * @throws IllegalArgumentException
+     *             if adapterType or adapter is null or if casting adapter to
+     *             adapterType would * cause a ClassCastException (i.e. if
+     *             !(adapter instanceof adapterType))
+     *             OR if this is already an instance of adapterType.
+     */
+    public void addAdapter(final Class adapterType, final Object adapter) {
+        if (adapterType == null || adapter == null) {
+            throw new IllegalArgumentException("Arguments must not be null");
+        }
+
+        if (!adapterType.isInstance(adapter)) {
+            throw new IllegalArgumentException("adapter: " + adapter
+                    + " must be cast compatible to class: " + adapterType);
+        }
+        else if (adapterType.isInstance(this))
+        {
+            throw new IllegalArgumentException("this: " + this
+                    + " must not already be an instance of class: " + adapterType);
+        }
+        getAdapterMap().put(adapterType, adapter);
+    }
+
+    /**
+     * Note that {@link #getAdapter(Class)} may still return non-null after
+     * this is called if (this instanceof adapterType).
+     * 
+     * @param adapterType
+     * @return the adapter for adapterType that was just removed or null if not
+     *         found
+     */
+    public Object removeAdapter(final Class adapterType) {
+        return getAdapterMap().remove(adapterType);
+    }
+
+    /**
+     * Note that this only returns those adapters added using
+     * {@link #addAdapter(Class, Object)}.  It does not return any
+     * implicit adapters resulting from (this instanceof type).
+     * 
+     * @return the map of all adapters.  Maps is immutable and may throw
+     * exceptions on attempts to mutate.
+     */
+    public Map getAllAdapters()
+    {
+        if (getAdapterMap().size() == 0)
+        {
+            return Collections.EMPTY_MAP;
+        }
+        return Collections.unmodifiableMap(getAdapterMap());
+    }
+    
+    /**
+     * <p>
+     * The contract for this method is that it must always return a usable Map
+     * and that map must be the same on every call. Lazy construction may be
+     * used (as it is by default). The default map size is 4 and load factor is
+     * 3 meaning that there should be decent tradeoff between wasted table size
+     * and overhead used to increase it should the number of decorators exceed
+     * 3. <b>Must never return null.</b>
+     * </p>
+     * 
+     * <p>
+     * Generally, the method should not need to be overridden, however it is
+     * provided to allow sub-classes to change the way the decorators map is
+     * constructed.
+     * </p>
+     * 
+     * @return the map containing lists of decorators keyed by class.
+     * 
+     */
+    protected Map getDecoratorMap() {
+        if (_decorators == null) {
+            _decorators = new HashMap(4);
+        }
+        return _decorators;
+    }
+
+    /**
+     * <p>
+     * The contract for this method is that it must always return a usable Map
+     * and that map must be the same on every call. Lazy construction may be
+     * used (as it is by default). The default map size is 4 and load factor is
+     * 3 meaning that there should be decent tradeoff between wasted table size
+     * and overhead used to increase it should the number of decorators exceed
+     * 3. <b>Must never return null.</b>
+     * </p>
+     * 
+     * <p>
+     * Generally, the method should not need to be overridden, however it is
+     * provided to allow sub-classes to change the way the decorators map is
+     * constructed.
+     * </p>
+     * 
+     * @return the map containing lists of adapters keyed by class.
+     * 
+     */
+    protected Map getAdapterMap() {
+        if (_adapters == null) {
+            _adapters = new HashMap(4);
+        }
+
+        return _adapters;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/bean/DataModelInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/bean/DataModelInfo.java
new file mode 100644
index 0000000..b07a1bd
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/bean/DataModelInfo.java
@@ -0,0 +1,72 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.bean;
+
+import java.io.Serializable;
+
+/**
+ * Design time analog of runtime DataModel bean
+ * 
+ * @author cbateman
+ *
+ */
+public class DataModelInfo implements Serializable 
+{
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = 6461056497382677871L;
+
+    private final boolean               _rowAvailable;
+    private final int                   _rowCount;
+    private final SerializableObject    _rowData;
+    private final int                   _rowIndex;
+    private final SerializableObject    _wrappedData;
+
+    /**
+     * @param rowAvailable
+     * @param rowCount
+     * @param rowData
+     * @param rowIndex
+     * @param wrappedData
+     */
+    public DataModelInfo(boolean rowAvailable, int rowCount, Object rowData,
+            int rowIndex, Object wrappedData) {
+        super();
+        _rowAvailable = rowAvailable;
+        _rowCount = rowCount;
+        _rowData = new SerializableObject(rowData);
+        _rowIndex = rowIndex;
+        _wrappedData = new SerializableObject(wrappedData);
+    }
+
+    /**
+     * @return true if the current row is available
+     */
+    public final boolean isRowAvailable() {
+        return _rowAvailable;
+    }
+    /**
+     * @return the row count of this model
+     */
+    public final int getRowCount() {
+        return _rowCount;
+    }
+    /**
+     * @return the row data
+     */
+    public final Object getRowData() {
+        return _rowData.getMaybeSerializable();
+    }
+    /**
+     * @return the row index
+     */
+    public final int getRowIndex() {
+        return _rowIndex;
+    }
+    /**
+     * @return the wrapped data.  may be null if wrapped object was not
+     * serializable.
+     */
+    public final Object getWrappedData() {
+        return _wrappedData.getMaybeSerializable();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/bean/SerializableObject.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/bean/SerializableObject.java
new file mode 100644
index 0000000..85c222e
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/bean/SerializableObject.java
@@ -0,0 +1,69 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.bean;
+
+import java.io.IOException;
+import java.io.NotSerializableException;
+import java.io.Serializable;
+
+/**
+ * A special object used in place of Object to ensure that when an interface
+ * requires a generic #{@link java.lang.Object}, it won't throw serialization
+ * exception when a containing object is serialized.
+ * 
+ * @author cbateman
+ * 
+ */
+public class SerializableObject implements Serializable
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 9133733048469500692L;
+    private Object      _maybeSerializable;
+    
+    /**
+     * @param maybeSerializable
+     */
+    public SerializableObject(Object maybeSerializable)
+    {
+        _maybeSerializable = maybeSerializable;
+    }
+    
+    
+//    /**
+//     * Provided to support serialization.  Should not be used by sub-classes
+//     * or clients except in this regard.
+//     */
+//    protected SerializableObject()
+//    {
+//        _maybeSerializable = null;
+//    }
+    
+    /**
+     * @return the actual value
+     */
+    public final Object getMaybeSerializable() {
+        return _maybeSerializable;
+    }
+
+
+    private void writeObject(java.io.ObjectOutputStream out)
+        throws IOException
+    {
+        try
+        {
+            out.writeObject(_maybeSerializable);
+        }
+        catch (NotSerializableException nse)
+        {
+            // do nothing, the object isn't guaranteed to be serializable,
+            // but we don't want this be an error
+            out.writeObject(null);
+        }
+    }
+    
+    private void readObject(java.io.ObjectInputStream in)
+        throws IOException, ClassNotFoundException
+    {
+        _maybeSerializable = in.readObject();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/ActionSourceInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/ActionSourceInfo.java
new file mode 100644
index 0000000..c0e0ea2
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/ActionSourceInfo.java
@@ -0,0 +1,68 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.behavioural;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ActionListenerDecorator;
+
+/**
+ * Implementation of the ActionSourceInfo.
+ * 
+ * @author cbateman
+ *
+ */
+public class ActionSourceInfo implements IActionSourceInfo 
+{
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = 6531166406473466685L;
+
+    private final String                                    _action;
+    private final String                                    _actionListener;
+    private final boolean                                   _immediate;
+    private List/*<ActionListenerDecorator>*/               _actionListeners;
+    
+    /**
+     * @param action
+     * @param actionListener
+     * @param immediate
+     */
+    public ActionSourceInfo(final String action, final String actionListener,
+            final boolean immediate) 
+    {
+        super();
+        _action = action;
+        _actionListener = actionListener;
+        _immediate = immediate;
+    }
+
+    public void addActionListener(final ActionListenerDecorator actionListener) {
+        if (_actionListeners == null)
+        {
+            _actionListeners = new ArrayList(2);
+        }
+        _actionListeners.add(actionListener);
+    }
+
+    public String getAction() {
+        return _action;
+    }
+
+    public String getActionListener() {
+        return _actionListener;
+    }
+
+    public List getActionListeners() {
+        if (_actionListeners == null)
+        {
+            return Collections.EMPTY_LIST;
+        }
+        return Collections.unmodifiableList(_actionListeners);
+    }
+
+    public boolean isImmediate() {
+        return _immediate;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/ActionSourceInfo2.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/ActionSourceInfo2.java
new file mode 100644
index 0000000..0815a07
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/ActionSourceInfo2.java
@@ -0,0 +1,33 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.behavioural;
+
+/**
+ * Implementation of the IActionSource2Info
+ * 
+ * @author cbateman
+ *
+ */
+public class ActionSourceInfo2 extends ActionSourceInfo implements
+        IActionSource2Info 
+{
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = 5811194815559772378L;
+    private final String        _actionExpression;
+    
+    /**
+     * @param action
+     * @param actionListener
+     * @param immediate
+     * @param actionExpression
+     */
+    public ActionSourceInfo2(final String action, final String actionListener,
+            final boolean immediate, final String actionExpression) {
+        super(action, actionListener, immediate);
+        _actionExpression = actionExpression;
+    }
+
+    public String getActionExpression() {
+        return _actionExpression;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/EditableValueHolderInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/EditableValueHolderInfo.java
new file mode 100644
index 0000000..d9b9689
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/EditableValueHolderInfo.java
@@ -0,0 +1,126 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.behavioural;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterDecorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorDecorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValueChangeListenerDecorator;
+
+/**
+ * Implementation of the IEditableValueHolderInfo
+ * 
+ * @author cbateman
+ *
+ */
+public class EditableValueHolderInfo extends ValueHolderInfo implements
+        IEditableValueHolderInfo 
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -2115990809157328451L;
+    
+    private final boolean       _localSetValue;
+    private final Object        _submittedValue;
+    private final String        _validator;
+    private final String        _valueChangeListener;
+    private final boolean       _isImmediate;
+    private final boolean       _isRequired;
+    private final boolean       _isValid;
+    private List                _validators;
+    private List                _valueChangeListeners;
+    
+    /**
+     * @param converterDecorator
+     * @param localValue
+     * @param value
+     * @param isImmediate
+     * @param isRequired
+     * @param isValid
+     * @param localSetValue
+     * @param submittedValue
+     * @param validator
+     * @param valueChangeListener
+     */
+    public EditableValueHolderInfo(final ConverterDecorator converterDecorator,
+            final Object localValue, final Object value, final boolean isImmediate,
+            final boolean isRequired, final boolean isValid, final boolean localSetValue,
+            final Object submittedValue, final String validator, final String valueChangeListener) 
+    {
+        super(converterDecorator, localValue, value);
+        _isImmediate = isImmediate;
+        _isRequired = isRequired;
+        _isValid = isValid;
+        _localSetValue = localSetValue;
+        _submittedValue = submittedValue;
+        _validator = validator;
+        _valueChangeListener = valueChangeListener;
+    }
+
+    public final boolean isLocalSetValue() {
+        return _localSetValue;
+    }
+
+    public final Object getSubmittedValue() {
+        return _submittedValue;
+    }
+
+    public final String getValidator() {
+        return _validator;
+    }
+
+    public final String getValueChangeListener() {
+        return _valueChangeListener;
+    }
+
+    public final boolean isImmediate() {
+        return _isImmediate;
+    }
+
+    public final boolean isRequired() {
+        return _isRequired;
+    }
+
+    public final boolean isValid() {
+        return _isValid;
+    }
+
+    public void addValidator(final ValidatorDecorator validator) 
+    {
+        if (_validators == null)
+        {
+            _validators = new ArrayList(2);
+        }
+        _validators.add(validator);
+    }
+
+    public void addValueChangeListener(
+            final ValueChangeListenerDecorator valueChangeListenerInfo) 
+    {
+        if (_valueChangeListeners == null)
+        {
+            _valueChangeListeners = new ArrayList(2);
+        }
+        _valueChangeListeners.add(valueChangeListenerInfo);
+    }
+
+    public List getValidators() {
+        if (_validators == null)
+        {
+            return Collections.EMPTY_LIST;
+        }
+        
+        return Collections.unmodifiableList(_validators);
+    }
+
+    public List getValueChangeListeners() {
+        if (_valueChangeListeners == null)
+        {
+            return Collections.EMPTY_LIST;
+        }
+        
+        return Collections.unmodifiableList(_valueChangeListeners);
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IActionSource2Info.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IActionSource2Info.java
new file mode 100644
index 0000000..6fef11b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IActionSource2Info.java
@@ -0,0 +1,20 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.behavioural;
+
+/**
+ * Design-time analog for the ActionSource2 interface.
+ * 
+ * @author cbateman
+ *
+ */
+public interface IActionSource2Info extends IActionSourceInfo 
+{
+    /**
+     * TODO: this method is similar to getAction on ActionSource from
+     * our perspective since the actual string rep of the EL is basically
+     * the same...
+     * 
+     * @return an EL method expression that represents a call to 
+     * an action method.
+     */
+    String getActionExpression();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IActionSourceInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IActionSourceInfo.java
new file mode 100644
index 0000000..4de338b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IActionSourceInfo.java
@@ -0,0 +1,56 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.behavioural;
+
+import java.io.Serializable;
+import java.util.List;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ActionListenerDecorator;
+
+/**
+ * A design time analog for the runtime ActionSource interface.
+ * 
+ * @author cbateman
+ *
+ */
+public interface IActionSourceInfo extends Serializable
+{
+    /**
+     * @return true if action listener associated with this action source
+     * should be executed immediately after the apply request values phase.
+     * Default is false.
+     */
+    boolean isImmediate();
+    
+    
+    /**
+     * Add the action listener to the list
+     * 
+     * @param actionListener
+     */
+    void addActionListener(ActionListenerDecorator  actionListener);
+    
+    /**
+     * @return all action listeners registered.  List should be considered
+     * immutable and may throw exceptions if modified.
+     */
+    List/*<ActionListenerDecorator>*/ getActionListeners();
+    
+    /**
+     * <b> NOTE: this method is deprecated in the runtime spec and exists for
+     * backward compatibility with JSF 1.1. You should avoid using it except in
+     * conjunction with JSF 1.1 tooling support. This method will be deprecated
+     * once the runtime spec removes the underlying API</b>
+
+     * @return a method binding expression describing an action handler
+     */
+    String  getAction();
+    
+    /**
+     * <b> NOTE: this method is deprecated in the runtime spec and exists for
+     * backward compatibility with JSF 1.1. You should avoid using it except in
+     * conjunction with JSF 1.1 tooling support. This method will be deprecated
+     * once the runtime spec removes the underlying API</b>
+     * 
+     * @return a method binding expression describing an action listener
+     */
+    String  getActionListener();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IEditableValueHolderInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IEditableValueHolderInfo.java
new file mode 100644
index 0000000..823e24c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IEditableValueHolderInfo.java
@@ -0,0 +1,94 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.behavioural;
+
+import java.util.List;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.ViewObject;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorDecorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValueChangeListenerDecorator;
+
+/**
+ * A design time analog for the JSF runtime EditableValueHolder interface.
+ * 
+ * @author cbateman
+ * 
+ */
+public interface IEditableValueHolderInfo extends IValueHolderInfo {
+    /**
+     * @return the flag indicating whether the value of the value holder should
+     *         be evaluated in the apply request values phase instead of the
+     *         process validations phase
+     */
+    boolean isImmediate();
+
+    /**
+     * @return true if the value has been set
+     */
+    boolean isLocalSetValue();
+
+    /**
+     * @return true if validation should consider this field required (must be
+     *         non-empty).
+     */
+    boolean isRequired();
+
+    /**
+     * @return the submitted, unconverted value of the component.
+     */
+    Object getSubmittedValue();
+
+    /**
+     * @return false if validation has determined that the value property of
+     *         this component is not valid.
+     */
+    boolean isValid();
+
+    /**
+     * <b> NOTE: this method is deprecated in the runtime spec and exists for
+     * backward compatibility with JSF 1.1. You should avoid using it except in
+     * conjunction with JSF 1.1 tooling support. This method will be deprecated
+     * once the runtime spec removes the underlying API</b>
+     * 
+     * @return a method binding expression that refers to a validator method
+     */
+    String getValidator();
+
+    /**
+     * <b> NOTE: this method is deprecated in the runtime spec and exists for
+     * backward compatibility with JSF 1.1. You should avoid using it except in
+     * conjunction with JSF 1.1 tooling support. This method will be deprecated
+     * once the runtime spec removes the underlying API</b>
+     * 
+     * @return a method binding expression that refers to a value change
+     *         listener
+     */
+    String getValueChangeListener();
+
+    /**
+     * Add validator to the list of validators for this component. Should be
+     * equivalent to
+     * {@link ViewObject#addDecorator(org.eclipse.jst.jsf.common.runtime.internal.model.decorator.Decorator, Class)}.
+     * 
+     * @param validator
+     */
+    void addValidator(ValidatorDecorator validator);
+
+    /**
+     * @return the list of validators for this component. Should be considered
+     *         unmodifiable (may throw exception).
+     */
+    List/* <ValidatorDecorator> */getValidators();
+
+    /**
+     * Add the value change listener to this component.
+     * 
+     * @param valueChangeListenerInfo
+     */
+    void addValueChangeListener(
+            ValueChangeListenerDecorator valueChangeListenerInfo);
+
+    /**
+     * @return the list of value change listeners. Should be considered
+     *         unmodifiable (may throw exception).
+     */
+    List/* <ValueChangeListenerDecorator> */getValueChangeListeners();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/INamingContainerInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/INamingContainerInfo.java
new file mode 100644
index 0000000..a9a07d1
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/INamingContainerInfo.java
@@ -0,0 +1,19 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.behavioural;
+
+/**
+ * Design time analog for the NamingContainer interface.
+ * 
+ * @author cbateman
+ * 
+ */
+public interface INamingContainerInfo
+{
+    // tagging interface
+
+    /**
+     * Used as an adapter impl
+     */
+    public final static INamingContainerInfo ADAPTER = new INamingContainerInfo()
+    {/* no impl */
+    };
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IValueHolderInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IValueHolderInfo.java
new file mode 100644
index 0000000..7340f7f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/IValueHolderInfo.java
@@ -0,0 +1,32 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.behavioural;
+
+import java.io.Serializable;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterDecorator;
+
+/**
+ * Represents design time information about the ValueHolder behavioural
+ * interface.
+ * 
+ * @author cbateman
+ *
+ */
+public interface IValueHolderInfo extends Serializable
+{
+    /**
+     * @return the value, may be null
+     */
+    Object getValue();
+    
+    /**
+     * @return the raw value without expression value evaluation.  Note that 
+     * {@link #getValue()} may return the same value in cases where this value
+     * holder is derived at design time without EL expression evaluation. May be null.
+     */
+    Object getLocalValue();
+    
+    /**
+     * @return the converter for this value holder or null if none.
+     */
+    ConverterDecorator getConverter();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/ValueHolderInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/ValueHolderInfo.java
new file mode 100644
index 0000000..2a1ee6c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/behavioural/ValueHolderInfo.java
@@ -0,0 +1,52 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.behavioural;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterDecorator;
+
+/**
+ * Implementation of the IValueHolderInfo.
+ * 
+ * @author cbateman
+ *
+ */
+public class ValueHolderInfo implements IValueHolderInfo 
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 5000699728360703727L;
+
+    /**
+     * the value (may include EL evaluation)
+     */
+    protected final Object                  _value;
+    /**
+     * the raw value  before EL evaluation.
+     */
+    protected final Object                  _localValue;
+    /**
+     * the converter or null if none.
+     */
+    protected final ConverterDecorator      _converterDecorator;
+    
+    /**
+     * @param converterDecorator
+     * @param localValue
+     * @param value
+     */
+    public ValueHolderInfo(final ConverterDecorator converterDecorator,
+            final Object localValue, final Object value) {
+        super();
+        _converterDecorator = converterDecorator;
+        _localValue = localValue;
+        _value = value;
+    }
+    public final Object getValue() {
+        return _value;
+    }
+    public final Object getLocalValue() {
+        return _localValue;
+    }
+    public final ConverterDecorator getConverter() {
+        return _converterDecorator;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/ComponentFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/ComponentFactory.java
new file mode 100644
index 0000000..caf4716
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/ComponentFactory.java
@@ -0,0 +1,389 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.component;
+
+import java.util.Map;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.bean.DataModelInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.IActionSource2Info;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.IActionSourceInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.IEditableValueHolderInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.INamingContainerInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.IValueHolderInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterDecorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.FacetDecorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorDecorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.event.IActionListenerInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.event.IValueChangeListenerInfo;
+
+/**
+ * Factory for creating component related objects.
+ * 
+ * @author cbateman
+ * 
+ */
+public class ComponentFactory
+{
+
+    /**
+     * The key for the standard ValueHolder adapter interface
+     */
+    public final static Class VALUE_HOLDER = IValueHolderInfo.class;
+    /**
+     * The key for the standard EditableValueHolder adapter interface
+     */
+    public final static Class EDITABLE_VALUE_HOLDER = IEditableValueHolderInfo.class;
+    /**
+     * The key for the standard ActionSource adapter interface
+     */
+    public final static Class ACTION_SOURCE = IActionSourceInfo.class;
+    /**
+     * The key for the standard ActionSource2 adapter interface
+     */
+    public final static Class ACTION_SOURCE2 = IActionSource2Info.class;
+    /**
+     * The key for the standard NamingContainer adapter interface
+     */
+    public final static Class NAMING_CONTAINER = INamingContainerInfo.class;
+
+    /**
+     * The key for the standard Converter decorator
+     */
+    public final static Class CONVERTER = ConverterDecorator.class;
+    /**
+     * The key for the standard Facet decorator
+     */
+    public final static Class FACET = FacetDecorator.class;
+    /**
+     * The key for the standard Validator decorator
+     */
+    public final static Class VALIDATOR = ValidatorDecorator.class;
+    /**
+     * The key for the standard ValueChangeListener decorator
+     */
+    public final static Class VALUE_CHANGE_LISTENER = IValueChangeListenerInfo.class;
+    /**
+     * The key for the standard ActionListener decorator
+     */
+    public final static Class ACTION_LISTENER = IActionListenerInfo.class;
+
+    /**
+     * Base class name for UIInput's
+     */
+    public final static String BASE_CLASS_UIINPUT = "javax.faces.component.UIInput";
+    /**
+     * Base class name for UIOutput's
+     */
+    public final static String BASE_CLASS_UIOUTPUT = "javax.faces.component.UIOutput";
+    /**
+     * Base class name for UICommand's
+     */
+    public final static String BASE_CLASS_UICOMMAND = "javax.faces.component.UICommand";
+    /**
+     * Base class name for UIData's
+     */
+    public final static String BASE_CLASS_UIDATA = "javax.faces.component.UIData";
+    /**
+     * Base class name for UIForm's
+     */
+    public final static String BASE_CLASS_UIFORM = "javax.faces.component.UIForm";
+
+    /**
+     * Interface name for ValueHolder's
+     */
+    public final static String INTERFACE_VALUEHOLDER = "javax.faces.component.ValueHolder";
+    /**
+     * Interface name for EditableValueHolder's
+     */
+    public final static String INTERFACE_EDITABLEVALUEHOLDER = "javax.faces.component.EditableValueHolder";
+    /**
+     * Interface name for ActionSource's
+     */
+    public final static String INTERFACE_ACTIONSOURCE = "javax.faces.component.ActionSource";
+    /**
+     * Interface name for ActionSource2's
+     */
+    public final static String INTERFACE_ACTIONSOURCE2 = "javax.faces.component.ActionSource2";
+    /**
+     * Interface name for NamingContainer's
+     */
+    public final static String INTERFACE_NAMINGCONTAINER = "javax.faces.component.NamingContainer";
+
+    /**
+     * @param id
+     * @param parent
+     * @param typeInfo
+     * @param isRendered
+     * @return a new component info
+     */
+    public static ComponentInfo createComponentInfo(final String id,
+            final ComponentInfo parent, final ComponentTypeInfo typeInfo,
+            final boolean isRendered)
+    {
+        return new ComponentInfo(id, parent, typeInfo, isRendered);
+    }
+
+    /**
+     * If the rendered attribute isn't set, defaults it.
+     * 
+     * @param attributes
+     */
+    public static void maybeDefaultRendered(final Map attributes)
+    {
+        if (!(attributes.get("rendered") instanceof Boolean))
+        {
+            attributes.put("rendered", Boolean.TRUE);
+        }
+    }
+
+    /**
+     * @param parent
+     * @param componentTypeInfo
+     * @param attributes
+     * @return a new component info
+     */
+    public static ComponentInfo createComponentInfo(final ComponentInfo parent,
+            final ComponentTypeInfo componentTypeInfo, final Map attributes)
+    {
+        maybeDefaultRendered(attributes);
+        return new ComponentInfo(parent, componentTypeInfo, attributes);
+    }
+
+    /**
+     * @param id
+     * @param parent
+     * @param typeInfo
+     * @param editableValueHolder
+     * @param isRendered
+     * @return a new UIInputInfo
+     */
+    public static UIInputInfo createUIInputInfo(final String id,
+            final ComponentInfo parent, final ComponentTypeInfo typeInfo,
+            final IEditableValueHolderInfo editableValueHolder,
+            final boolean isRendered)
+    {
+        return new UIInputInfo(id, parent, typeInfo, editableValueHolder,
+                isRendered);
+    }
+
+    /**
+     * @param parent
+     * @param typeInfo
+     * @param attributes
+     * @return a new UIInputInfo
+     */
+    public static UIInputInfo createUIInputInfo(final ComponentInfo parent,
+            final ComponentTypeInfo typeInfo, final Map attributes)
+    {
+        maybeDefaultRendered(attributes);
+        return new UIInputInfo(parent, typeInfo, attributes);
+    }
+
+    /**
+     * @param id
+     * @param parent
+     * @param typeInfo
+     * @param valueHolderInfo
+     * @param isRendered
+     * @return a new UIOutputInfo
+     */
+    public static UIOutputInfo createUIOutputInfo(final String id,
+            final ComponentInfo parent, final ComponentTypeInfo typeInfo,
+            final IValueHolderInfo valueHolderInfo, final boolean isRendered)
+    {
+        return new UIOutputInfo(id, parent, typeInfo, valueHolderInfo,
+                isRendered);
+    }
+
+    /**
+     * @param parent
+     * @param typeInfo
+     * @param attributes
+     * @return a new UIOutputInfo
+     */
+    public static UIOutputInfo createUIOutputInfo(final ComponentInfo parent,
+            final ComponentTypeInfo typeInfo, final Map attributes)
+    {
+        maybeDefaultRendered(attributes);
+        return new UIOutputInfo(parent, typeInfo, attributes);
+    }
+
+    /**
+     * @param id
+     * @param parent
+     * @param typeInfo
+     * @param actionSourceInfo
+     * @param isRendered
+     * @return a new UICommandInfo
+     */
+    public static UICommandInfo createUICommandInfo(final String id,
+            final ComponentInfo parent, final ComponentTypeInfo typeInfo,
+            final IActionSourceInfo actionSourceInfo, final boolean isRendered)
+    {
+        return new UICommandInfo(id, parent, typeInfo, isRendered,
+                actionSourceInfo);
+    }
+
+    /**
+     * @param parent
+     * @param typeInfo
+     * @param attributes
+     * @return a new UICommandInfo
+     */
+    public static UICommandInfo createUICommandInfo(final ComponentInfo parent,
+            final ComponentTypeInfo typeInfo, final Map attributes)
+    {
+        maybeDefaultRendered(attributes);
+        return new UICommandInfo(parent, typeInfo, attributes);
+    }
+
+    /**
+     * @param id
+     * @param parent
+     * @param typeInfo
+     * @param isRendered
+     * @param prependId
+     * @param submitted
+     * @return a new UIFormInfo
+     */
+    public static UIFormInfo createUIFormInfo(final String id,
+            final ComponentInfo parent, final ComponentTypeInfo typeInfo,
+            final boolean isRendered, final boolean prependId,
+            final boolean submitted)
+    {
+        return new UIFormInfo(id, parent, typeInfo, isRendered, prependId,
+                submitted);
+    }
+
+    /**
+     * @param parent
+     * @param typeInfo
+     * @param attributes
+     * @return a new UIFormInfo
+     */
+    public static UIFormInfo createUIFormInfo(final ComponentInfo parent,
+            final ComponentTypeInfo typeInfo, final Map attributes)
+    {
+        maybeDefaultRendered(attributes);
+        maybeDefaultPrependId(attributes);
+        maybeDefaultSubmitted(attributes);
+        return new UIFormInfo(parent, typeInfo, attributes);
+    }
+
+    private static void maybeDefaultSubmitted(Map attributes)
+    {
+        if (!(attributes.get("submitted") instanceof Boolean))
+        {
+            attributes.put("submitted", Boolean.FALSE);
+        }
+    }
+
+    private static void maybeDefaultPrependId(Map attributes)
+    {
+        if (!(attributes.get("prependId") instanceof Boolean))
+        {
+            attributes.put("prependId", Boolean.FALSE);
+        }
+    }
+
+    /**
+     * @param id
+     * @param parent
+     * @param typeInfo
+     * @param isRendered
+     * @param dataModel
+     * @param first
+     * @param footer
+     * @param header
+     * @param rowCount
+     * @param rowAvailable
+     * @param rowData
+     * @param rowIndex
+     * @param rows
+     * @param value
+     * @param var
+     * @return a new UIDataInfo
+     */
+    public static UIDataInfo createUIDataInfo(final String id,
+            final ComponentInfo parent, final ComponentTypeInfo typeInfo,
+            final boolean isRendered, final DataModelInfo dataModel,
+            final int first, final ComponentInfo footer,
+            final ComponentInfo header, final int rowCount,
+            final boolean rowAvailable, final Object rowData,
+            final int rowIndex, final int rows, final Object value,
+            final String var)
+    {
+        return new UIDataInfo(id, parent, typeInfo, isRendered, dataModel,
+                first, footer, header, rowCount, rowAvailable, rowData,
+                rowIndex, rows, value, var);
+    }
+
+    /**
+     * @param parent
+     * @param typeInfo
+     * @param attributes
+     * @return the UIDataInfo
+     */
+    public static UIDataInfo createUIDataInfo(final ComponentInfo parent,
+            final ComponentTypeInfo typeInfo, final Map attributes)
+    {
+        maybeDefaultRendered(attributes);
+        maybeDefaultFirst(attributes);
+        maybeDefaultRowCount(attributes);
+        maybeDefaultRowAvailable(attributes);
+        maybeDefaultRowIndex(attributes);
+        maybeDefaultRows(attributes);
+        maybeDefaultVar(attributes);
+        return new UIDataInfo(parent, typeInfo, attributes);
+    }
+
+
+    private static final Integer ZERO = new Integer(0);
+    private static final Integer MINUS_ONE = new Integer(-1);
+
+    private static void maybeDefaultFirst(Map attributes)
+    {
+        if (!(attributes.get("first") instanceof Integer))
+        {
+            attributes.put("first", ZERO);
+        }
+    }
+
+    private static void maybeDefaultRowCount(Map attributes)
+    {
+        if (!(attributes.get("rowCount") instanceof Integer))
+        {
+            attributes.put("rowCount", MINUS_ONE);
+        }
+    }
+
+    private static void maybeDefaultRowAvailable(Map attributes)
+    {
+        if (! (attributes.get("rowAvailable") instanceof Boolean))
+        {
+            attributes.put("rowAvailable", Boolean.FALSE);
+        }
+    }
+
+    private static void maybeDefaultRowIndex(Map attributes)
+    {
+        if (! (attributes.get("rowIndex") instanceof Integer))
+        {
+            attributes.put("rowIndex", MINUS_ONE);
+        }
+    }
+
+    private static void maybeDefaultRows(Map attributes)
+    {
+        if (! (attributes.get("rows") instanceof Integer))
+        {
+            attributes.put("rows", ZERO);
+        }
+    }
+
+    private static void maybeDefaultVar(Map attributes)
+    {
+        if (! (attributes.get("var") instanceof String))
+        {
+            attributes.put("var", "** default variable **");
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/ComponentInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/ComponentInfo.java
new file mode 100644
index 0000000..907167c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/ComponentInfo.java
@@ -0,0 +1,734 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.component;
+
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.io.Serializable;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.ViewObject;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.FacetDecorator;
+
+/**
+ * Models a basic UI component instance
+ * 
+ * TODO: should implement a visitor pattern to traverse component trees
+ * 
+ * @author cbateman
+ * 
+ */
+public class ComponentInfo extends ViewObject implements Serializable
+{
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = 2517204356825585699L;
+
+    private final static int DEFAULT_ARRAY_SIZE = 4;
+
+    /**
+     * the component id
+     */
+    protected final String _id;
+    /**
+     * the component's parent or null if none
+     */
+    protected final ComponentInfo _parent;
+    /**
+     * the type info for this component
+     */
+    protected final ComponentTypeInfo _componentTypeInfo;
+    /**
+     * the rendered flage
+     */
+    protected final boolean _isRendered;
+
+    private transient BeanPropertyManager _beanPropertyManager = new BeanPropertyManager(
+            this);
+
+    // initialized
+    // by
+    // getBeanProperties
+
+    /**
+     * @param id
+     * @param parent
+     * @param componentTypeInfo
+     * @param isRendered
+     */
+    protected ComponentInfo(final String id, final ComponentInfo parent,
+            final ComponentTypeInfo componentTypeInfo, final boolean isRendered)
+    {
+        _id = translateForNull(id);
+        _parent = parent;
+        _componentTypeInfo = componentTypeInfo;
+        _isRendered = isRendered;
+    }
+
+    /**
+     * Construct a new component info using the attributes keyed by name in
+     * attributes to set values. The names must match the corresponding bean
+     * property names. Primitives should be wrapped in their corresponding
+     * object types. Exceptions will be thrown if there is a type mismatch on an
+     * expected type. Number will be used for all numeric primitive wrappers an
+     * the corresponding "to" will be called.
+     * 
+     * @param parent
+     * @param componentTypeInfo
+     * @param attributes
+     * @throws ClassCastException
+     *             if an attribute's value doesn't match the expected type
+     * @throws NullPointerException
+     *             if an attribute value is null for a value whose type is
+     *             expected to be primitive
+     * @throws IllegalArgumentException
+     *             if attributes does not contain a required key.
+     */
+    protected ComponentInfo(final ComponentInfo parent,
+            final ComponentTypeInfo componentTypeInfo, final Map attributes)
+    {
+        this(getStringProperty("id", attributes, false), parent,
+                componentTypeInfo, getBooleanProperty("rendered", attributes));
+    }
+
+    /**
+     * @param key
+     * @param attributes
+     * @param mandatory
+     * @return the value in attributes at location key, forcing a
+     *         ClassCastException if it turns out not to be a String.
+     * @throws ClassCastException
+     *             if the attribute for key is not a String
+     * @throws IllegalArgumentException
+     *             if the attribute for key is null but mandatory is true.
+     */
+    protected static String getStringProperty(final String key,
+            final Map attributes, final boolean mandatory)
+    {
+        final Object value = attributes.get(key);
+
+        if (mandatory && value == null)
+        {
+            throw new IllegalArgumentException(key
+                    + " is a mandatory attribute");
+        }
+        return (String) value;
+    }
+
+    /**
+     * @param key
+     * @param attributes
+     * 
+     * @return the value in attributes at location, forcing a ClassCastExceptio
+     *         if it is no a Boolean.
+     * @throws IllegalArgumentException
+     *             if key is not found (all boolean attributes are mandatory
+     *             since there is no valid state for unset.
+     */
+    protected static boolean getBooleanProperty(final String key,
+            final Map attributes)
+    {
+        final Boolean value = (Boolean) attributes.get(key);
+
+        if (value == null)
+        {
+            throw new IllegalArgumentException(key + "is mandatory");
+        }
+
+        return value.booleanValue();
+    }
+
+    /**
+     * @param key
+     * @param attributes
+     * @return the integer property for key. Casts the value to Number and calls
+     *         Number.intValue().
+     */
+    protected static int getIntegerProperty(final String key,
+            final Map attributes)
+    {
+        final Number value = (Number) attributes.get(key);
+
+        if (value == null)
+        {
+            throw new IllegalArgumentException(key + " is mandatory");
+        }
+
+        return value.intValue();
+    }
+
+    /**
+     * @param key
+     * @param attributes
+     * @return the component info value from attributes
+     */
+    protected static ComponentInfo getComponentProperty(final String key,
+            final Map attributes)
+    {
+        return (ComponentInfo) attributes.get(key);
+    }
+
+    private String translateForNull(final String arg)
+    {
+
+        if (arg == null || "!".equals(arg.trim()))
+        {
+            return null;
+        }
+        return arg.trim();
+    }
+
+    private List/* <ComponentInfo> */_children;
+
+    /**
+     * @return the id
+     */
+    public final String getId()
+    {
+        return _id;
+    }
+
+    /**
+     * @return the component type info
+     */
+    public final ComponentTypeInfo getComponentTypeInfo()
+    {
+        return _componentTypeInfo;
+    }
+
+    /**
+     * @return the children. List is unmodifiable. List contains all children
+     *         including facets.
+     */
+    public final synchronized List/* <ComponentInfo> */getChildren()
+    {
+        if (_children == null)
+        {
+            return Collections.EMPTY_LIST;
+        }
+        return Collections.unmodifiableList(_children);
+    }
+
+    /**
+     * Get the sub-set of {@link #getChildren()} that are facets. This is a
+     * convenience method for {@link #getDecorators(Class)}
+     * 
+     * @return all component children that are facets
+     */
+    public final List getFacets()
+    {
+        return getDecorators(ComponentFactory.FACET);
+    }
+
+    /**
+     * @param childComponent
+     */
+    public final synchronized void addChild(final ComponentInfo childComponent)
+    {
+        if (_children == null)
+        {
+            _children = new ArrayList(DEFAULT_ARRAY_SIZE);
+        }
+        _children.add(childComponent);
+    }
+
+    /**
+     * @param name
+     * @param facetComponent
+     */
+    public final synchronized void addFacet(final String name,
+            final ComponentInfo facetComponent)
+    {
+        addChild(facetComponent);
+        addDecorator(new FacetDecorator(name, facetComponent));
+    }
+
+    /**
+     * @param component
+     * @return if component corresponds to a facet of this component, returns
+     *         the name of that facet. Returns null if not found.
+     */
+    public final String getFacetName(final ComponentInfo component)
+    {
+        if (component == null)
+        {
+            return null;
+        }
+
+        final List facets = getDecorators(ComponentFactory.FACET);
+
+        for (final Iterator it = facets.iterator(); it.hasNext();)
+        {
+            final FacetDecorator facet = (FacetDecorator) it.next();
+            if (component == facet.getDecorates())
+            {
+                return facet.getName();
+            }
+        }
+
+        // component is not a facet
+        return null;
+    }
+
+    /**
+     * @param name
+     * @return if this has a facet called name, then returns it's single root
+     *         component.
+     */
+    public final synchronized ComponentInfo getFacet(final String name)
+    {
+        if (name == null)
+        {
+            return null;
+        }
+
+        final List facets = getDecorators(ComponentFactory.FACET);
+
+        for (final Iterator it = facets.iterator(); it.hasNext();)
+        {
+            final FacetDecorator facet = (FacetDecorator) it.next();
+            if (name.equals(facet.getName()))
+            {
+                return facet.getDecorates();
+            }
+        }
+
+        // not found
+        return null;
+    }
+
+    public String toString()
+    {
+        final String parentId = _parent != null ? _parent.getId() : "null";
+        String toString = getMostSpecificComponentName() + ": id=" + _id
+                + ", parentId: " + parentId + ", family="
+                + _componentTypeInfo.getComponentFamily() + ", render="
+                + _componentTypeInfo.getRenderFamily() + ", rendered="
+                + _isRendered;
+
+        // use bean introspection to dump child properties
+        if (this.getClass() != ComponentInfo.class)
+        {
+            toString += dumpProperties();
+        }
+
+        return toString;
+    }
+
+    private String dumpProperties()
+    {
+        String properties = "";
+        try
+        {
+            final BeanInfo beanInfo = Introspector.getBeanInfo(this.getClass(),
+                    ComponentInfo.class);
+
+            final PropertyDescriptor[] descriptors = beanInfo
+                    .getPropertyDescriptors();
+            for (int i = 0; i < descriptors.length; i++)
+            {
+                final PropertyDescriptor desc = descriptors[i];
+                final String name = desc.getName();
+                final Object valueObj = desc.getValue(name);
+                final String value = valueObj != null ? valueObj.toString()
+                        : "null";
+                properties += ", " + name + "=" + value;
+            }
+        }
+        catch (final IntrospectionException e)
+        {
+            return "Error introspecting bean: " + e.getLocalizedMessage();
+        }
+
+        return properties;
+    }
+
+    /**
+     * @return used for toString. Clients should not use.
+     */
+    protected String getMostSpecificComponentName()
+    {
+        return "UIComponent";
+    }
+
+    /**
+     * @return the parent of this component or null.
+     */
+    public final ComponentInfo getParent()
+    {
+        return _parent;
+    }
+
+    /**
+     * @return the rendered flag
+     */
+    public final boolean isRendered()
+    {
+        return _isRendered;
+    }
+
+    public synchronized void addAdapter(final Class adapterType,
+            final Object adapter)
+    {
+        super.addAdapter(adapterType, adapter);
+
+        // force an update on the next call to getBeanProperties
+        _beanPropertyManager.reset();
+    }
+
+    public synchronized Object removeAdapter(final Class adapterType)
+    {
+        final Object removed = super.removeAdapter(adapterType);
+
+        _beanPropertyManager.reset();
+
+        return removed;
+    }
+
+    /**
+     * @return the set of all bean property names for this component. The set is
+     *         unmodifiable and will throw exceptions if modification is
+     *         attempted.
+     */
+    protected final Map/* <String, ComponentBeanProperty> */getBeanProperties()
+    {
+        return Collections.unmodifiableMap(_beanPropertyManager
+                .getBeanProperties());
+    }
+
+    /**
+     * This is similar to the runtime getAttributes().get(name) call. The reason
+     * we don't implement a Map of all attribute values is that the implicit
+     * property structure can change at any time due to add/removeAdapter. To
+     * get all attributes known for a component, instead use:
+     * 
+     * The synchronized block is advised to protect against concurrent
+     * modification exceptions on the keySet iterator.
+     * 
+     * @param name
+     * 
+     * @return the value of the attribute or null if none.
+     * 
+     */
+    public synchronized ComponentBeanProperty getAttribute(final String name)
+    {
+        return (ComponentBeanProperty) getBeanProperties().get(name);
+    }
+
+    /**
+     * @return the set of valid attribute names.  The Set is not modifiable.
+     */
+    public synchronized Set/*<String>*/  getAttributeNames()
+    {
+        return getBeanProperties().keySet();
+    }
+    /**
+     * Stores a bean property descriptor along information about which
+     * implementation class declares it and what key to pass to getAdapter() in
+     * order to get it.
+     * 
+     */
+    public final static class ComponentBeanProperty
+    {
+        private final PropertyDescriptor _propertyDescriptor;
+        private final Object _declaringImplementation;
+        private final Class _adapterKeyClass;
+
+        // only instantiable locally
+        private ComponentBeanProperty(Class adapterKeyClass,
+                Object declaringImplementationClass,
+                PropertyDescriptor propertyDescriptor)
+        {
+            super();
+            _adapterKeyClass = adapterKeyClass;
+            _declaringImplementation = declaringImplementationClass;
+            _propertyDescriptor = propertyDescriptor;
+        }
+
+        /**
+         * @return the value of property
+         */
+        public final Object getValue()
+        {
+            final Method method = _propertyDescriptor.getReadMethod();
+            if (method != null)
+            {
+                try
+                {
+                    method.setAccessible(true);
+                    return method.invoke(_declaringImplementation,
+                            new Object[0]);
+                }
+                catch (IllegalArgumentException e)
+                {
+                    e.printStackTrace();
+                }
+                catch (IllegalAccessException e)
+                {
+                    e.printStackTrace();
+                }
+                catch (InvocationTargetException e)
+                {
+                    e.printStackTrace();
+                }
+            }
+            // if any step fails, return null
+            return null;
+        }
+
+        /**
+         * @return the property descriptor
+         */
+        public final PropertyDescriptor getPropertyDescriptor()
+        {
+            return _propertyDescriptor;
+        }
+
+        /**
+         * @return the implemenation
+         */
+        public final Object getDeclaringImplementationClass()
+        {
+            return _declaringImplementation;
+        }
+
+        /**
+         * @return the adapter class for the interface that the declaring
+         *         implementation is providing the impl for
+         */
+        public final Class getAdapterKeyClass()
+        {
+            return _adapterKeyClass;
+        }
+    }
+
+    /**
+     * Manages bean property information for a component
+     * 
+     * @author cbateman
+     * 
+     */
+    protected final static class BeanPropertyManager
+    {
+        /**
+         * a map of the bean property names exposed by this component including
+         * all those added by addAdapter().
+         * 
+         * this is synthetic based the class definition and installed adapters
+         * so as long that info is available, no need to serialize.
+         */
+        protected transient Map/* <String, ComponentBeanProperty> */_beanProperties; // lazily
+        private final transient ComponentInfo _component;
+
+        /**
+         * @param component
+         */
+        protected BeanPropertyManager(final ComponentInfo component)
+        {
+            _component = component;
+        }
+
+        /**
+         * Will throw exception of the calling thread already holds the "this"
+         * monitor lock. This is to ensure that caller always acquires locks in
+         * appropriate order to prevent deadlock.
+         * 
+         * @return the internal set of bean properties. This Set may be modified
+         *         internally.
+         */
+        public Map getBeanProperties()
+        {
+            if (Thread.holdsLock(this))
+            {
+                throw new IllegalStateException(
+                        "Must not already own this lock");
+            }
+
+            // must always acquire component lock first to prevent deadlock
+            synchronized (_component)
+            {
+                synchronized (this)
+                {
+                    if (_beanProperties == null)
+                    {
+                        _beanProperties = calculateAllBeanPropNames(ViewObject.class);
+                    }
+
+                    return _beanProperties;
+                }
+            }
+        }
+
+        /**
+         * Will throw exception if the calling thread already holds the "this"
+         * monitor lock. This is to ensure that caller always acquires locks in
+         * appropriate order to prevent deadlock.
+         * 
+         * Clears the internal map and sets to null. This will force it to be
+         * completely new built on the next call to getBeanProperties
+         */
+        public void reset()
+        {
+            if (Thread.holdsLock(this))
+            {
+                throw new IllegalStateException(
+                        "Must not already own this lock");
+            }
+
+            // must always acquire component lock first to prevent deadlock
+            synchronized (_component)
+            {
+                synchronized (this)
+                {
+                    if (_beanProperties != null)
+                    {
+                        _beanProperties.clear();
+                        _beanProperties = null;
+                    }
+                }
+            }
+        }
+
+        /**
+         * @param stopClass
+         * @return a synchronized map of all bean property names on this class
+         *         up to stopClass, as well as all adapter property names (as
+         *         though this really implemented them).
+         */
+        private Map calculateAllBeanPropNames(final Class stopClass)
+        {
+            // use a set to prevents the duplicates
+            final Map allProperties = new HashMap();
+
+            {
+                final Class myClass = _component.getClass();
+                final List myProperties = getOrCreateBeanProperties(myClass,
+                        stopClass);
+
+                addToMap(myProperties, _component, myClass, allProperties);
+            }
+
+            {
+                for (final Iterator it = _component.getAdapterMap().entrySet()
+                        .iterator(); it.hasNext();)
+                {
+                    Map.Entry entry = (Entry) it.next();
+
+                    final Class adapterClass = (Class) entry.getKey();
+                    final Object declaringClass = entry.getValue();
+                    // get all props, excluding the ones on Object.
+                    final List props = getOrCreateBeanProperties(adapterClass,
+                            null);
+                    addToMap(props, declaringClass, adapterClass, allProperties);
+                }
+            }
+
+            return Collections.synchronizedMap(allProperties);
+        }
+
+        private static void addToMap(
+                final List/* <ComponentBeanProperty> */addThese,
+                final Object declaringObject, final Class declaringAdapter,
+                final Map toMe)
+        {
+            for (final Iterator it = addThese.iterator(); it.hasNext();)
+            {
+                final PropertyDescriptor desc = (PropertyDescriptor) it.next();
+
+                if (!toMe.containsKey(desc.getName()))
+                {
+                    toMe.put(desc.getName(), new ComponentBeanProperty(
+                            declaringAdapter, declaringObject, desc));
+                }
+                else
+                {
+                    // TODO: need logging
+                    System.err
+                            .println("Name collision in properties.  Trying to add ["
+                                    + desc.toString()
+                                    + " when already have "
+                                    + toMe.get(desc.getName()));
+                }
+            }
+        }
+
+        /**
+         * lazily loaded with the local properties (those not defined using
+         * adapters)
+         * 
+         * MUST INITIALIZE early so can synchronize on it
+         */
+        private transient static Map/* <Class, List<PropertyDescriptor> */PROPERTY_MAP = new HashMap();
+
+        /**
+         * @param startClass
+         * @param stopClass
+         * @return a unmodifiable list of properties starting from startClass.
+         *         stopClass is only used if an entry doesn't already exist in
+         *         PROPERTY_MAP for startClass. The method is synchronized on
+         *         the PROPERTY_MAP it updates.
+         */
+        protected static List/* <PropertyDescriptor */getOrCreateBeanProperties(
+                final Class startClass, final Class stopClass)
+        {
+            synchronized (PROPERTY_MAP)
+            {
+                List localBeanProps = (List) PROPERTY_MAP.get(startClass);
+
+                if (localBeanProps == null)
+                {
+                    localBeanProps = calculateBeanProperties(startClass,
+                            stopClass);
+                    PROPERTY_MAP.put(startClass, Collections
+                            .unmodifiableList(localBeanProps));
+                }
+
+                return localBeanProps;
+            }
+        }
+
+        /**
+         * @param startClass
+         * @param stopClass
+         * @return a List<String> containing all of the bean names between
+         *         startClass and stopClass. Start class must be a descendant
+         *         (sub-class, sub-sub-class etc.) of stopClass. The properties
+         *         on stopClass are excluded from analysis.
+         */
+        private static List/* <PropertyDescriptor> */calculateBeanProperties(
+                final Class startClass, final Class stopClass)
+        {
+            BeanInfo beanInfo;
+            List names = new ArrayList();
+
+            try
+            {
+                beanInfo = Introspector.getBeanInfo(startClass, stopClass);
+                final PropertyDescriptor[] descriptors = beanInfo
+                        .getPropertyDescriptors();
+
+                if (descriptors != null)
+                {
+                    names = Arrays.asList(descriptors);
+                }
+            }
+            catch (final IntrospectionException e)
+            {
+                e.printStackTrace();
+            }
+            return names;
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/ComponentTypeInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/ComponentTypeInfo.java
new file mode 100644
index 0000000..a50c421
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/ComponentTypeInfo.java
@@ -0,0 +1,96 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.component;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.types.ClassTypeInfo;
+
+/**
+ * Type information about a UIComponent
+ * 
+ * @author cbateman
+ * 
+ */
+public class ComponentTypeInfo extends ClassTypeInfo
+{
+    /**
+     * serializable uid
+     */
+    private static final long serialVersionUID = -311156682935177206L;
+    /**
+     * the ComponentType (see JSF spec for definition)
+     */
+    protected final String _componentType; // may be null, since may not be
+    // known at runtime
+    /**
+     * the component family (see JSF spec)
+     */
+    protected final String _componentFamily;
+    /**
+     * the render family (see JSF spec)
+     */
+    protected final String _renderFamily;
+    
+    /**
+     * @param componentType
+     * @param componentClass
+     * @param componentFamily
+     * @param renderFamily
+     */
+    public ComponentTypeInfo(final String componentType,
+            final String componentClass, final String componentFamily,
+            final String renderFamily)
+    {
+        super(componentClass, new String[0], new String[0]);
+        _componentType = componentType;
+        _componentFamily = componentFamily;
+        _renderFamily = renderFamily;
+    }
+
+    /**
+     * @param componentType
+     * @param superClasses
+     * @param interfaces
+     * @param componentClass
+     * @param componentFamily
+     * @param renderFamily
+     */
+    public ComponentTypeInfo(final String componentType,
+            final String componentClass, 
+            final String[] superClasses, final String[] interfaces,
+            final String componentFamily,
+            final String renderFamily)
+    {
+        super(componentClass, superClasses, interfaces);
+        _componentType = componentType;
+        _componentFamily = componentFamily;
+        _renderFamily = renderFamily;
+    }
+
+    /**
+     * @return the component type or null if unknown (may not be at runtime)
+     */
+    public final String getComponentType()
+    {
+        return _componentType;
+    }
+
+    /**
+     * @return the component family
+     */
+    public final String getComponentFamily()
+    {
+        return _componentFamily;
+    }
+
+    /**
+     * @return the render family
+     */
+    public final String getRenderFamily()
+    {
+        return _renderFamily;
+    }
+
+    public String toString()
+    {
+        return "Component Type Info: type = " + _componentType + " family=" + _componentFamily
+                + " renderer=" + _renderFamily + ", "+super.toString();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UICommandInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UICommandInfo.java
new file mode 100644
index 0000000..38fe0b6
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UICommandInfo.java
@@ -0,0 +1,107 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.component;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.IActionSource2Info;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.IActionSourceInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ActionListenerDecorator;
+
+/**
+ * An design time analog of the standard UICommand.
+ * @author cbateman
+ *
+ */
+public class UICommandInfo extends ComponentInfo implements IActionSource2Info {
+    private final String _actionExpression;
+    private final String _actionListener;
+    private final boolean _isImmediate;
+
+    /**
+     * serialization id
+     */
+    private static final long serialVersionUID = -9025172832535840949L;
+
+    /**
+     * @param id
+     * @param parent
+     * @param componentTypeInfo
+     * @param isRendered
+     * @param actionSourceInfo
+     */
+    protected UICommandInfo(final String id, final ComponentInfo parent,
+            final ComponentTypeInfo componentTypeInfo,
+            final boolean isRendered, final IActionSourceInfo actionSourceInfo) {
+        super(id, parent, componentTypeInfo, isRendered);
+
+        if (actionSourceInfo == null) {
+            _actionExpression = null;
+            _actionListener = null;
+            _isImmediate = false;
+        } else {
+            // TODO: having action and actionExpression will come back to
+            // to bite us.
+            _actionExpression = actionSourceInfo.getAction();
+            _actionListener = actionSourceInfo.getActionListener();
+            _isImmediate = actionSourceInfo.isImmediate();
+
+            for (final Iterator it = actionSourceInfo.getActionListeners()
+                    .iterator(); it.hasNext();) {
+                final ActionListenerDecorator actionListener = 
+                    (ActionListenerDecorator) it.next();
+                addActionListener(actionListener);
+            }
+        }
+    }
+
+    /**
+     * @param parent
+     * @param componentTypeInfo
+     * @param attributes
+     */
+    protected UICommandInfo(final ComponentInfo parent, final ComponentTypeInfo componentTypeInfo,
+            Map attributes)
+    {
+        this(getStringProperty("id", attributes, true),
+                parent, componentTypeInfo,
+                getBooleanProperty("rendered", attributes),
+                getActionSourceInfo("$actionSourceInfo", attributes)
+                );
+    }
+    
+    private static IActionSourceInfo getActionSourceInfo(String key,
+            Map attributes)
+    {
+        return (IActionSourceInfo) attributes.get(key);
+    }
+
+    public String getActionExpression() {
+        return _actionExpression;
+    }
+
+    public final void addActionListener(final ActionListenerDecorator actionListener) {
+        addDecorator(actionListener, ComponentFactory.ACTION_LISTENER);
+    }
+
+    public final String getAction() {
+        return _actionExpression;
+    }
+
+    public final String getActionListener() {
+        return _actionListener;
+    }
+
+    public final List getActionListeners() {
+        return getDecorators(ComponentFactory.ACTION_LISTENER);
+    }
+
+    public final boolean isImmediate() {
+        return _isImmediate;
+    }
+
+    protected String getMostSpecificComponentName()
+    {
+        return "UICommand";
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIDataInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIDataInfo.java
new file mode 100644
index 0000000..76be08c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIDataInfo.java
@@ -0,0 +1,209 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.component;
+
+import java.util.Map;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.bean.DataModelInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.bean.SerializableObject;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.INamingContainerInfo;
+
+/**
+ * Design time analog to UIData.
+ * 
+ * @author cbateman
+ * 
+ */
+public class UIDataInfo extends ComponentInfo implements INamingContainerInfo
+{
+    /**
+     * the standard name for the footer facet
+     */
+    public final static String FACET_NAME_FOOTER = "footer";
+    /**
+     * the standard name for the header facet.
+     */
+    public final static String FACET_NAME_HEADER = "header";
+    /**
+     * serialization id
+     */
+    private static final long serialVersionUID = 3473288390914978784L;
+
+    private final DataModelInfo _dataModel;
+    private final int _first;
+    private final int _rowCount;
+    private final boolean _rowAvailable;
+    private final SerializableObject _rowData;
+    private final int _rowIndex;
+    private final int _rows;
+    private final SerializableObject _value;
+    private final String _var;
+
+    /**
+     * @param id
+     * @param parent
+     * @param componentTypeInfo
+     * @param isRendered
+     * @param dataModel
+     * @param first
+     * @param footer
+     * @param header
+     * @param rowCount
+     * @param rowAvailable
+     * @param rowData
+     * @param rowIndex
+     * @param rows
+     * @param value
+     * @param var
+     */
+    public UIDataInfo(final String id, final ComponentInfo parent,
+            final ComponentTypeInfo componentTypeInfo,
+            final boolean isRendered, final DataModelInfo dataModel,
+            final int first, final ComponentInfo footer,
+            final ComponentInfo header, final int rowCount,
+            final boolean rowAvailable, final Object rowData,
+            final int rowIndex, final int rows, final Object value,
+            final String var)
+    {
+        super(id, parent, componentTypeInfo, isRendered);
+        _dataModel = dataModel;
+        _first = first;
+        _rowCount = rowCount;
+        _rowAvailable = rowAvailable;
+        _rowData = new SerializableObject(rowData);
+        _rowIndex = rowIndex;
+        _rows = rows;
+        _value = new SerializableObject(value);
+        _var = var;
+
+        if (footer != null)
+        {
+            addFacet(FACET_NAME_FOOTER, footer);
+        }
+
+        if (header != null)
+        {
+            addFacet(FACET_NAME_HEADER, header);
+        }
+    }
+
+    /**
+     * @param parent
+     * @param componentTypeInfo
+     * @param attributes
+     */
+    public UIDataInfo(final ComponentInfo parent,
+            final ComponentTypeInfo componentTypeInfo, Map attributes)
+    {
+        this(getStringProperty("id", attributes, true), parent,
+                componentTypeInfo, 
+                getBooleanProperty("rendered", attributes),
+                getDataModelInfo("$dataModel", attributes), 
+                getIntegerProperty("first", attributes), 
+                getComponentProperty("footer", attributes),
+                getComponentProperty("header", attributes), 
+                getIntegerProperty("rowCount", attributes), 
+                getBooleanProperty("rowAvailable", attributes), 
+                attributes.get("rowData"),
+                getIntegerProperty("rowIndex", attributes), 
+                getIntegerProperty("rows", attributes), 
+                attributes.get("value"),
+                getStringProperty("var", attributes, true));
+    }
+
+    private static DataModelInfo getDataModelInfo(String key, Map attributes)
+    {
+        return (DataModelInfo) attributes.get(key);
+    }
+
+    /**
+     * @return the data model
+     */
+    public final DataModelInfo getDataModel()
+    {
+        return _dataModel;
+    }
+
+    /**
+     * @return the first row
+     */
+    public final int getFirst()
+    {
+        return _first;
+    }
+
+    /**
+     * @return the row count
+     */
+    public final int getRowCount()
+    {
+        return _rowCount;
+    }
+
+    /**
+     * @return true if the row is available
+     */
+    public final boolean isRowAvailable()
+    {
+        return _rowAvailable;
+    }
+
+    /**
+     * @return the row data (may be null if not serialiable)
+     */
+    public final Object getRowData()
+    {
+        return _rowData.getMaybeSerializable();
+    }
+
+    /**
+     * @return the row index
+     */
+    public final int getRowIndex()
+    {
+        return _rowIndex;
+    }
+
+    /**
+     * @return the rows
+     */
+    public final int getRows()
+    {
+        return _rows;
+    }
+
+    /**
+     * @return the value of the model (may be null if not serialiable)
+     */
+    public final Object getValue()
+    {
+        return _value.getMaybeSerializable();
+    }
+
+    /**
+     * @return the name used to define the EL row variable
+     */
+    public final String getVar()
+    {
+        return _var;
+    }
+
+    /**
+     * @return the header facet or null.
+     */
+    public final ComponentInfo getHeader()
+    {
+        return getFacet(FACET_NAME_HEADER);
+    }
+
+    /**
+     * @return the footer facet or null.
+     */
+    public final ComponentInfo getFooter()
+    {
+        return getFacet(FACET_NAME_FOOTER);
+    }
+
+    protected String getMostSpecificComponentName()
+    {
+        return "UIData";
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIFormInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIFormInfo.java
new file mode 100644
index 0000000..5f0d7c4
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIFormInfo.java
@@ -0,0 +1,76 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.component;
+
+import java.util.Map;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.INamingContainerInfo;
+
+/**
+ * A design-time analog for the UIForm.
+ * 
+ * @author cbateman
+ */
+public class UIFormInfo extends ComponentInfo implements INamingContainerInfo 
+{
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = 6961034911873576644L;
+
+    private final boolean _prependId;
+    private final boolean _submitted;
+    
+    /**
+     * @param id
+     * @param parent
+     * @param componentTypeInfo
+     * @param isRendered
+     * @param prependId
+     * @param submitted
+     */
+    protected UIFormInfo(final String id, final ComponentInfo parent,
+            final ComponentTypeInfo componentTypeInfo, final boolean isRendered
+            , final boolean prependId, final boolean submitted) {
+        super(id, parent, componentTypeInfo, isRendered);
+        _prependId = prependId;
+        _submitted = submitted;
+    }
+    
+    /**
+     * @param parent
+     * @param componentTypeInfo
+     * @param attributes
+     */
+    protected UIFormInfo(final ComponentInfo parent, ComponentTypeInfo componentTypeInfo,
+            Map attributes)
+    {
+        this(getStringProperty("id", attributes, true),
+                parent,
+                componentTypeInfo,
+                getBooleanProperty("rendered", attributes),
+                getBooleanProperty("prependId", attributes),
+                getBooleanProperty("submitted", attributes));
+    }
+    
+    /**
+     * JSF 1.2 only
+     * 
+     * @return true if the form allows its id to be prepended to its 
+     * descendent's ids.
+     */
+    public final boolean isPrependId()
+    {
+        return _prependId;
+    }
+
+    /**
+     * @return true if the form is submitted.
+     */
+    public final boolean isSubmitted() {
+        return _submitted;
+    }
+
+    protected String getMostSpecificComponentName()
+    {
+        return "UIForm";
+    } 
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIInputInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIInputInfo.java
new file mode 100644
index 0000000..f46a12a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIInputInfo.java
@@ -0,0 +1,172 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.component;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.IEditableValueHolderInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorDecorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValueChangeListenerDecorator;
+
+/**
+ * A design-time analog of the standard UIInput.
+ * 
+ * @author cbateman
+ * 
+ */
+public class UIInputInfo extends UIOutputInfo implements
+        IEditableValueHolderInfo
+{
+    /**
+     * serializable uid
+     */
+    private static final long serialVersionUID = -6055473902554910848L;
+    private final boolean _isValid;
+    private final boolean _isImmediate;
+    private final boolean _isRequired;
+    private final Object _submittedValue;
+    private final String _validator;
+    private final String _valueChangeListener;
+    private final boolean _localSetValue;
+
+    /**
+     * @param id
+     * @param parent
+     * @param typeInfo
+     * @param editableValueHolderInfo
+     * @param isRendered
+     */
+    protected UIInputInfo(final String id, final ComponentInfo parent,
+            final ComponentTypeInfo typeInfo,
+            final IEditableValueHolderInfo editableValueHolderInfo,
+            final boolean isRendered)
+    {
+        super(id, parent, typeInfo, editableValueHolderInfo, isRendered);
+
+        if (editableValueHolderInfo == null)
+        {
+            _isValid = true;
+            _isImmediate = false;
+            _isRequired = false;
+            _localSetValue = false;
+            _submittedValue = null;
+            _validator = null;
+            _valueChangeListener = null;
+        }
+        else
+        {
+            _isValid = editableValueHolderInfo.isValid();
+            _isImmediate = editableValueHolderInfo.isImmediate();
+            _isRequired = editableValueHolderInfo.isRequired();
+            _localSetValue = editableValueHolderInfo.isLocalSetValue();
+            _submittedValue = editableValueHolderInfo.getSubmittedValue();
+            _validator = editableValueHolderInfo.getValidator();
+            _valueChangeListener = editableValueHolderInfo
+                    .getValueChangeListener();
+
+            for (final Iterator it = editableValueHolderInfo.getValidators()
+                    .iterator(); it.hasNext();)
+            {
+                final ValidatorDecorator validator = (ValidatorDecorator) it
+                        .next();
+                addValidator(validator);
+            }
+
+            for (final Iterator it = editableValueHolderInfo
+                    .getValueChangeListeners().iterator(); it.hasNext();)
+            {
+                final ValueChangeListenerDecorator valueChangeListener = (ValueChangeListenerDecorator) it
+                        .next();
+                addValueChangeListener(valueChangeListener);
+            }
+        }
+    }
+
+    /**
+     * @param parent
+     * @param typeInfo
+     * @param attributes
+     */
+    protected UIInputInfo(final ComponentInfo parent,
+            final ComponentTypeInfo typeInfo, Map attributes)
+    {
+        this(getStringProperty("id", attributes, true), parent, typeInfo,
+                getEditableValueHolderInfo("$editableValueHolderInfo",
+                        attributes), getBooleanProperty("rendered", attributes));
+    }
+
+    private static IEditableValueHolderInfo getEditableValueHolderInfo(
+            String key, Map attributes)
+    {
+        return (IEditableValueHolderInfo) attributes.get(key);
+    }
+
+    // public String toString() {
+    // final String toString = super.toString();
+    // return toString + ", isValid=" + _isValid + ", isImmediate="
+    // + _isImmediate + ", isRequired=" + _isRequired;
+    // }
+
+    // @Override
+    protected String getMostSpecificComponentName()
+    {
+        return "UIInput";
+    }
+
+    public final boolean isValid()
+    {
+        return _isValid;
+    }
+
+    public final boolean isImmediate()
+    {
+        return _isImmediate;
+    }
+
+    public final boolean isRequired()
+    {
+        return _isRequired;
+    }
+
+    public final Object getSubmittedValue()
+    {
+        return _submittedValue;
+    }
+
+    public final String getValidator()
+    {
+        return _validator;
+    }
+
+    public final String getValueChangeListener()
+    {
+        return _valueChangeListener;
+    }
+
+    public final boolean isLocalSetValue()
+    {
+        return _localSetValue;
+    }
+
+    public final void addValidator(final ValidatorDecorator validator)
+    {
+        addDecorator(validator, ComponentFactory.VALIDATOR);
+    }
+
+    public final void addValueChangeListener(
+            final ValueChangeListenerDecorator valueChangeListenerInfo)
+    {
+        addDecorator(valueChangeListenerInfo,
+                ComponentFactory.VALUE_CHANGE_LISTENER);
+    }
+
+    public final List getValidators()
+    {
+        return getDecorators(ComponentFactory.VALIDATOR);
+    }
+
+    public final List getValueChangeListeners()
+    {
+        return getDecorators(ComponentFactory.VALUE_CHANGE_LISTENER);
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIOutputInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIOutputInfo.java
new file mode 100644
index 0000000..509f6e1
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/component/UIOutputInfo.java
@@ -0,0 +1,107 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.component;
+
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.IValueHolderInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterDecorator;
+
+/**
+ * A design-time analog for the UIOutput
+ * 
+ * @author cbateman
+ *
+ */
+public class UIOutputInfo extends ComponentInfo implements IValueHolderInfo {
+    /**
+     * serializable uid
+     */
+    private static final long serialVersionUID = 9096297578991706150L;
+
+    /**
+     * the value
+     */
+    protected final Object _value;
+    /**
+     * the value before any EL evaluation
+     */
+    protected final Object _localValue;
+
+    /**
+     * @param id
+     * @param parent
+     * @param typeInfo
+     * @param valueHolderInfo
+     * @param isRendered
+     */
+    protected UIOutputInfo(final String id, final ComponentInfo parent,
+            final ComponentTypeInfo typeInfo,
+            final IValueHolderInfo valueHolderInfo, final boolean isRendered) {
+        super(id, parent, typeInfo, isRendered);
+
+        if (valueHolderInfo == null) {
+            _value = null;
+            _localValue = null;
+        } else {
+            _value = valueHolderInfo.getValue();
+            _localValue = valueHolderInfo.getLocalValue();
+
+            final ConverterDecorator converter = valueHolderInfo.getConverter();
+            if (converter != null) {
+                addDecorator(converter, ComponentFactory.CONVERTER);
+            }
+        }
+    }
+
+    /**
+     * @param parent
+     * @param typeInfo
+     * @param attributes
+     */
+    protected UIOutputInfo(final ComponentInfo parent, final ComponentTypeInfo typeInfo,
+            final Map attributes)
+    {
+        this(getStringProperty("id", attributes, true),
+                parent,
+                typeInfo,
+                getValueHolderInfo("$valueHolderInfo", attributes),
+                getBooleanProperty("rendered", attributes));
+    }
+    
+    /**
+     * @param key
+     * @param attributes
+     * @return the non-standard value holder info that encapsulates the
+     * ValueHolder properties.  This is never mandatory.
+     */
+    protected static IValueHolderInfo getValueHolderInfo(String key, Map attributes)
+    {
+        return (IValueHolderInfo) attributes.get(key);
+    }
+    
+    // @Override
+    protected String getMostSpecificComponentName() {
+        return "UIOutput";
+    }
+
+    public final ConverterDecorator getConverter() {
+        // should only be a single converter decorator...
+        // so on this interface we'll return the first one if present.
+        // to do things like error checking, use the getDecorator
+        final List converters = getDecorators(ComponentFactory.CONVERTER);
+
+        if (converters.size() > 0) {
+            return (ConverterDecorator) converters.get(0);
+        }
+
+        return null;
+    }
+
+    public final Object getLocalValue() {
+        return _localValue;
+    }
+
+    public final Object getValue() {
+        return _value;
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/datatypes/ELExpression.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/datatypes/ELExpression.java
new file mode 100644
index 0000000..c5c7361
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/datatypes/ELExpression.java
@@ -0,0 +1,15 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.datatypes;
+
+/**
+ * An abstraction for an EL expression.
+ * 
+ * @author cbateman
+ * 
+ */
+public abstract class ELExpression
+{
+    /**
+     * @return the original text of EL expression
+     */
+    public abstract String getText();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ActionListenerDecorator.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ActionListenerDecorator.java
new file mode 100644
index 0000000..f092147
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ActionListenerDecorator.java
@@ -0,0 +1,25 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.decorator;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+
+/**
+ * Design time ActionListener decorator
+ * 
+ * @author cbateman
+ *
+ */
+public class ActionListenerDecorator extends ComponentDecorator {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 3806862878381550874L;
+
+    /**
+     * @param decorates
+     */
+    public ActionListenerDecorator(ComponentInfo decorates) {
+        super(decorates);
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ComponentDecorator.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ComponentDecorator.java
new file mode 100644
index 0000000..e37bf12
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ComponentDecorator.java
@@ -0,0 +1,32 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.decorator;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+
+/**
+ * @author cbateman
+ *
+ */
+public abstract class ComponentDecorator extends Decorator 
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 4378142984217256364L;
+    
+    private final ComponentInfo     _decorates;
+    
+    /**
+     * @param decorates
+     */
+    public ComponentDecorator(final ComponentInfo decorates)
+    {
+        _decorates = decorates;
+    }
+
+    /**
+     * @return the component that this decorator decorates.
+     */
+    public final ComponentInfo getDecorates() {
+        return _decorates;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ConverterDecorator.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ConverterDecorator.java
new file mode 100644
index 0000000..25046ba
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ConverterDecorator.java
@@ -0,0 +1,38 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.decorator;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+
+/**
+ * A converter decorator.
+ * 
+ * @author cbateman
+ *
+ */
+public class ConverterDecorator extends ComponentDecorator {
+
+    private final ConverterTypeInfo     _typeInfo;
+    
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = 3838224353030247227L;
+    
+    
+    /**
+     * @param decorates
+     * @param typeInfo
+     */
+    public ConverterDecorator(final ComponentInfo decorates, final ConverterTypeInfo typeInfo)
+    {
+        super(decorates);
+        _typeInfo = typeInfo;
+    }
+
+    /**
+     * @return the converter's type info.
+     */
+    public final ConverterTypeInfo getTypeInfo()
+    {
+        return _typeInfo;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ConverterTypeInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ConverterTypeInfo.java
new file mode 100644
index 0000000..a613210
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ConverterTypeInfo.java
@@ -0,0 +1,98 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.decorator;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.types.ClassTypeInfo;
+
+/**
+ * Type information about a converter.
+ * 
+ * @author cbateman
+ * 
+ */
+public class ConverterTypeInfo extends ClassTypeInfo
+{
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = -7238952424045449907L;
+
+    private final String _converterId;
+
+    /**
+     * For unknown converters, use the UNKNOWN constant.
+     * 
+     * @param className
+     * @param converterId
+     * @throws java.lang.IllegalArgumentException
+     *             if both className and converterId are null.
+     * 
+     */
+    public ConverterTypeInfo(String className, String converterId)
+    {
+        super(className, new String[0], new String[0]);
+        if (className == null && converterId == null)
+        {
+            throw new IllegalArgumentException(
+                    "converterClass and converterId must not both be null.  For unknown validator use the UNKNOWN constant");
+        }
+
+        _converterId = converterId;
+    }
+
+    /**
+     * For unknown converters, use the UNKNOWN constant.
+     * 
+     * @param className
+     * @param superClasses 
+     * @param interfaces 
+     * @param converterId
+     * @throws java.lang.IllegalArgumentException
+     *             if both className and converterId are null.
+     * 
+     */
+    public ConverterTypeInfo(String className, String[] superClasses,
+            String[] interfaces, String converterId)
+    {
+        super(className, superClasses, interfaces);
+        if (className == null && converterId == null)
+        {
+            throw new IllegalArgumentException(
+                    "converterClass and converterId must not both be null.  For unknown validator use the UNKNOWN constant");
+        }
+
+        _converterId = converterId;
+    }
+
+    /**
+     * Use when the converter's information unknown such as occurs when using
+     * the f:converter tag.
+     */
+    public static final ConverterTypeInfo UNKNOWN = new ConverterTypeInfo(
+            (Object) null);
+
+    /**
+     * A private constructor used to create the UNRESOLVED constant. We use an
+     * Object arg here (which is discarded) rather than using the zero-arg
+     * constructor so as not mess up anything like Serializable that may depend
+     * on how zero-arg constructors are defined.
+     * 
+     * @param unresolved
+     */
+    private ConverterTypeInfo(Object unresolved)
+    {
+        super(null, new String[0], new String[0]);
+        _converterId = null;
+    }
+
+    /**
+     * @return the converter's id.
+     */
+    public final String getConverterId()
+    {
+        return _converterId;
+    }
+
+    public String toString()
+    {
+        return "Converter Type Info: type = " + _converterId + ", "+super.toString();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/Decorator.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/Decorator.java
new file mode 100644
index 0000000..043c660
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/Decorator.java
@@ -0,0 +1,21 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.decorator;
+
+import java.io.Serializable;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.ViewObject;
+
+/**
+ * The abstract super-class of all view object decorators.
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class Decorator extends ViewObject implements Serializable {
+
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = -3138829736243154022L;
+
+    
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/FacetDecorator.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/FacetDecorator.java
new file mode 100644
index 0000000..ba73e66
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/FacetDecorator.java
@@ -0,0 +1,35 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.decorator;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+
+/**
+ * Component decorator for facets.
+ * 
+ * @author cbateman
+ *
+ */
+public class FacetDecorator extends ComponentDecorator 
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 94806944978127012L;
+
+    private final String _name;
+
+    /**
+     * @param name
+     * @param component
+     */
+    public FacetDecorator(final String name, final ComponentInfo component) {
+        super(component);
+        _name = name;
+    }
+
+    /**
+     * @return the name of the facet.
+     */
+    public final String getName() {
+        return _name;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ValidatorDecorator.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ValidatorDecorator.java
new file mode 100644
index 0000000..cc4f692
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ValidatorDecorator.java
@@ -0,0 +1,35 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.decorator;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+
+/**
+ * Validator decorator.
+ * 
+ * @author cbateman
+ *
+ */
+public class ValidatorDecorator extends ComponentDecorator {
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -2898015711621314782L;
+
+    private final ValidatorTypeInfo     _typeInfo;
+
+    /**
+     * @param decorates
+     * @param typeInfo
+     */
+    public ValidatorDecorator(final ComponentInfo decorates, final ValidatorTypeInfo typeInfo) {
+        super(decorates);
+        _typeInfo = typeInfo;
+    }
+
+    /**
+     * @return the validator's type info
+     */
+    public final ValidatorTypeInfo getTypeInfo()
+    {
+        return _typeInfo;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ValidatorTypeInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ValidatorTypeInfo.java
new file mode 100644
index 0000000..3bfe90b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ValidatorTypeInfo.java
@@ -0,0 +1,93 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.decorator;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.types.ClassTypeInfo;
+
+/**
+ * Type information about validator decorator.
+ * @author cbateman
+ *
+ */
+public class ValidatorTypeInfo extends ClassTypeInfo
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = 7512992316792276160L;
+    private final String    _validatorId;
+
+    /**
+     * For unknown validators, use the UNKNOWN constant.
+     * 
+     * @param validatorClass
+     * @param validatorId
+     * @throws java.lang.IllegalArgumentException if both className and
+     * converterId are null.
+     * 
+     */
+    public ValidatorTypeInfo(String validatorClass, String validatorId)
+    {
+        super(validatorClass, new String[0], new String[0]);
+        
+        if (validatorClass == null && validatorId == null)
+        {
+            throw new IllegalArgumentException("validatorClass and validatorId must not both be null.  For unknown validator use the UNKNOWN constant");
+        }
+        _validatorId = validatorId;
+    }
+
+    /**
+     * For unknown validators, use the UNKNOWN constant.
+     * 
+     * @param validatorClass
+     * @param superClasses 
+     * @param interfaces 
+     * @param validatorId
+     * @throws java.lang.IllegalArgumentException if both className and
+     * converterId are null.
+     * 
+     */
+    public ValidatorTypeInfo(String validatorClass, String[] superClasses, String[] interfaces, String validatorId)
+    {
+        super(validatorClass, superClasses, interfaces);
+        
+        if (validatorClass == null && validatorId == null)
+        {
+            throw new IllegalArgumentException("validatorClass and validatorId must not both be null.  For unknown validator use the UNKNOWN constant");
+        }
+        _validatorId = validatorId;
+    }
+
+    /**
+     * Use when a validator's type info information is unknown.
+     */
+    public static final ValidatorTypeInfo  UNKNOWN = 
+        new ValidatorTypeInfo((Object)null);
+    
+    /**
+     * A private constructor used to create the UNRESOLVED constant.
+     * We use an Object arg here (which is discarded) rather than using
+     * the zero-arg constructor so as not mess up anything like Serializable
+     * that may depend on how zero-arg constructors are defined.
+     * 
+     * @param unresolved
+     */
+    private ValidatorTypeInfo(Object unresolved)
+    {
+        super(null, new String[0], new String[0]);
+        _validatorId = null;
+    }
+
+    /**
+     * @return the validator id (may be null if unknown).
+     */
+    public final String getValidatorId()
+    {
+        return _validatorId;
+    }
+    
+    public String toString()
+    {
+        return "Validator Type Info: type = " + _validatorId + ", "+super.toString();
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ValueChangeListenerDecorator.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ValueChangeListenerDecorator.java
new file mode 100644
index 0000000..af28605
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/decorator/ValueChangeListenerDecorator.java
@@ -0,0 +1,26 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.decorator;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.event.IValueChangeListenerInfo;
+
+/**
+ * ValueChangeListener component decorator.
+ * 
+ * @author cbateman
+ *
+ */
+public class ValueChangeListenerDecorator extends ComponentDecorator implements
+        IValueChangeListenerInfo 
+{
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = 9045831927898936727L;
+
+    /**
+     * @param decorates
+     */
+    public ValueChangeListenerDecorator(ComponentInfo decorates) {
+        super(decorates);
+    }    
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/event/IActionListenerInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/event/IActionListenerInfo.java
new file mode 100644
index 0000000..a1ae4bb
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/event/IActionListenerInfo.java
@@ -0,0 +1,11 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.event;
+
+/**
+ * A design time analog for the ActionListener
+ * @author cbateman
+ *
+ */
+public interface IActionListenerInfo extends IFacesListenerInfo 
+{
+    // TODO:
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/event/IFacesListenerInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/event/IFacesListenerInfo.java
new file mode 100644
index 0000000..d94f1bd
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/event/IFacesListenerInfo.java
@@ -0,0 +1,11 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.event;
+
+/**
+ * A design-time analog for the runtime Faces Listener.
+ * @author cbateman
+ *
+ */
+public interface IFacesListenerInfo 
+{
+    // no methods
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/event/IValueChangeListenerInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/event/IValueChangeListenerInfo.java
new file mode 100644
index 0000000..155a4f1
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/event/IValueChangeListenerInfo.java
@@ -0,0 +1,11 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.event;
+
+/**
+ * A design time analog for the runtime ValueChangeListener interface.
+ * 
+ * @author cbateman
+ *
+ */
+public interface IValueChangeListenerInfo extends IFacesListenerInfo {
+    // TODO:
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/ClassTypeInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/ClassTypeInfo.java
new file mode 100644
index 0000000..ba6ef3d
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/ClassTypeInfo.java
@@ -0,0 +1,131 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.types;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * A type info that has class information.
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class ClassTypeInfo extends TypeInfo implements IClassTypeInfo
+{
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = -5046230589012357680L;
+
+    /**
+     * the fully qualified class name of the implementation class for this
+     * type.
+     */
+    protected final String _className;
+
+    /**
+     * known super classes of the component class
+     */
+    protected final String[] _superClasses;
+    
+    /**
+     * known interfaces implemented by the component class
+     */
+    protected final String[] _interfaces;
+    
+    /**
+     * used internally by isInstanceOf
+     */
+    private Set            _superTypes; // may be lazily constructed
+    
+
+    /**
+     * @param className 
+     * @param superClasses
+     * @param interfaces
+     */
+    protected ClassTypeInfo(final String className, final String[] superClasses, final String[] interfaces)
+    {
+        _className = className;
+        _superClasses = superClasses != null ? superClasses : new String[0];
+        _interfaces = interfaces != null ? interfaces : new String[0];
+        
+        if (_superClasses.length + _interfaces.length == 0)
+        {
+            // there are no super-types known
+            _superTypes = Collections.EMPTY_SET;
+        }
+    }
+    
+    public final String[] getInterfaces()
+    {
+        if (_interfaces.length > 0)
+        {
+            final String[]  copy =  new String[_interfaces.length];
+            System.arraycopy(_interfaces, 0, copy, 0, _interfaces.length);
+            return copy;
+        }
+        // if array is empty, no need to allocate to new objects since
+        // it is effectively immutable anyway.
+        return _interfaces;
+    }
+
+    public final String[] getSuperClasses()
+    {
+        if (_superClasses.length > 0)
+        {
+            final String[]  copy =  new String[_superClasses.length];
+            System.arraycopy(_superClasses, 0, copy, 0, _superClasses.length);
+            return copy;
+        }
+        // if array is empty, no need to allocate to new objects since
+        // it is effectively immutable anyway.
+        return _superClasses;
+    }
+
+    public final boolean isInstanceOf(String checkType)
+    {
+        if (_superTypes == null)
+        {
+            _superTypes = new HashSet();
+            _superTypes.addAll(Arrays.asList(_superClasses));
+            _superTypes.addAll(Arrays.asList(_interfaces));
+        }
+        
+        return _superTypes.contains(checkType);
+    }
+
+    public final String getClassName()
+    {
+        return _className;
+    }
+
+    public String toString()
+    {
+        String supers = "[";
+        
+        for (int i = 0; i < _superClasses.length; i++)
+        {
+            supers += _superClasses[i];
+            
+            if (i < _superClasses.length-1)
+            {
+                supers += ",";
+            }
+        }
+        
+        for (int i = 0; i < _interfaces.length; i++)
+        {
+            supers += _interfaces[i];
+            
+            if (i < _interfaces.length-1)
+            {
+                supers += ",";
+            }
+        }
+        supers +="]";
+        
+        return "class= "+getClassName()+ ", supers="+ supers;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/IAttributeValueProxy.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/IAttributeValueProxy.java
new file mode 100644
index 0000000..35d6972
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/IAttributeValueProxy.java
@@ -0,0 +1,13 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.types;
+
+import java.io.Serializable;
+
+/**
+ * Wraps 
+ * @author cbateman
+ *
+ */
+public interface IAttributeValueProxy extends Serializable
+{
+//
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/IClassTypeInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/IClassTypeInfo.java
new file mode 100644
index 0000000..7959c6f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/IClassTypeInfo.java
@@ -0,0 +1,43 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.types;
+
+/**
+ * A type info that has an associate Java class.
+ * @author cbateman
+ *
+ */
+public interface IClassTypeInfo
+{
+    /**
+     * The fully qualified class name, i.e. java.lang.String
+     * 
+     * @return the fully qualified class name in dot notation
+     * 
+     */
+    String getClassName();
+    
+    /**
+     * Should never return null.  Return empty array if none.
+     * 
+     * @return the list of fully-qualified super class names.  List is as 
+     * calculated at IClassTypeInfo construction and no guarantee is made
+     * (although an implementer may do so) that it will be updated if the
+     * definition of className changes.
+     */
+    String[]  getSuperClasses();
+    
+    /**
+     * Should never return null.  Return empty array if none.
+     * 
+     * @return the list of fully-qualified interface names.  List is as 
+     * calculated at IClassTypeInfo construction and no guarantee is made
+     * (although an implementer may do so) that it will be updated if the
+     * definition of className changes.
+     */
+    String[]  getInterfaces();
+    
+    /**
+     * @param checkType
+     * @return true if checkType is in the set comprised of getSuperClasses()+getInterfaces()
+     */
+    boolean isInstanceOf(final String checkType);
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/TypeInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/TypeInfo.java
new file mode 100644
index 0000000..1d3ea33
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/model/types/TypeInfo.java
@@ -0,0 +1,17 @@
+package org.eclipse.jst.jsf.common.runtime.internal.model.types;
+
+import java.io.Serializable;
+
+/**
+ * Abstract super-class of all view object type information objects.
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class TypeInfo implements Serializable
+{
+    /**
+     * serializable id
+     */
+    private static final long serialVersionUID = -3653573923653759724L;
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IComponentTagElement.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IComponentTagElement.java
new file mode 100644
index 0000000..7eb5509
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IComponentTagElement.java
@@ -0,0 +1,17 @@
+package org.eclipse.jst.jsf.common.runtime.internal.view.model.common;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo;
+
+/**
+ * A JSF tag element that maps one-to-one to a JSF UIComponent
+ * 
+ * @author cbateman
+ *
+ */
+public interface IComponentTagElement extends IJSFTagElement 
+{
+    /**
+     * @return the comopnent's type info.
+     */
+    ComponentTypeInfo getComponent();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IConverterTagElement.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IConverterTagElement.java
new file mode 100644
index 0000000..a26a7bd
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IConverterTagElement.java
@@ -0,0 +1,19 @@
+package org.eclipse.jst.jsf.common.runtime.internal.view.model.common;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterTypeInfo;
+
+/**
+ * A tag element that causes the construction registration of a converter on
+ * a parent object.
+ * 
+ * @author cbateman
+ *
+ */
+public interface IConverterTagElement extends IJSFTagElement
+{
+    /**
+     * @return the type info for the converter represented by this
+     * element
+     */
+    ConverterTypeInfo getConverter();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IHandlerTagElement.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IHandlerTagElement.java
new file mode 100644
index 0000000..4b21316
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IHandlerTagElement.java
@@ -0,0 +1,70 @@
+package org.eclipse.jst.jsf.common.runtime.internal.view.model.common;
+
+import java.io.Serializable;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.types.TypeInfo;
+
+/**
+ * Generic tag handler that has effect when processed by the JSF ViewHandler.
+ * 
+ * @author cbateman
+ *
+ */
+public interface IHandlerTagElement extends IJSFTagElement
+{
+    /**
+     * Enumerates known types of built-in tag handlers.
+     * 
+     * @author cbateman
+     *
+     */
+    static class TagHandlerType extends TypeInfo implements Serializable
+    {
+        /**
+         * serializable id
+         */
+        private static final long serialVersionUID = 5062853948108253861L;
+        
+        private final static int HANDLER_TYPE_FACET = 0;
+        private final static int HANDLER_TYPE_ACTIONLISTENER = 1;
+        private final static int HANDLER_TYPE_VALUECHANGELISTENER = 2;
+        private final static int HANDLER_TYPE_ATTRIBUTE = 3;
+
+        private final static String[]  strValues =
+            {"facet", "actionLister", "valueChangeListener"};
+
+        private final int _intValue;
+        
+        public TagHandlerType(int intValue)
+        {
+            _intValue = intValue;
+        }
+
+        public String toString()
+        {
+            return strValues[_intValue];
+        }
+
+        protected final int intValue()
+        {
+            return _intValue;
+        }
+       
+        public final static TagHandlerType FACET = 
+            new TagHandlerType(HANDLER_TYPE_FACET);
+        public final static TagHandlerType ACTIONLISTENER = 
+            new TagHandlerType(HANDLER_TYPE_ACTIONLISTENER);
+        public final static TagHandlerType VALUECHANGELISTENER = 
+            new TagHandlerType(HANDLER_TYPE_VALUECHANGELISTENER);
+        public final static TagHandlerType ATTRIBUTE = 
+            new TagHandlerType(HANDLER_TYPE_ATTRIBUTE);
+        
+    }
+    
+    /**
+     * @return the tag handler type as defined by standard known types of 
+     * tags that do not (necessarily) translate into standard objects at 
+     * runtime but may modify the view in some way.
+     */
+    TagHandlerType getTagHandlerType();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IJSFTagElement.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IJSFTagElement.java
new file mode 100644
index 0000000..5263b91
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IJSFTagElement.java
@@ -0,0 +1,66 @@
+package org.eclipse.jst.jsf.common.runtime.internal.view.model.common;
+
+import java.io.Serializable;
+
+/**
+ * An abstraction of a tag element that maps to a JSF artifact (i.e. component, validator)
+ *
+ * @author cbateman
+ *
+ */
+public interface IJSFTagElement extends ITagElement
+{
+    /**
+     * An enumeration of different kinds of tags.
+     * 
+     * @author cbateman
+     *
+     */
+    static class TagType implements Serializable
+    {
+        /**
+         * serializable id
+         */
+        private static final long serialVersionUID = -2845327764902349963L;
+        private final static int TYPE_COMPONENT = 0;
+        private final static int TYPE_CONVERTER = 1;
+        private final static int TYPE_VALIDATOR = 2;
+        private final static int TYPE_HANDLER = 3;
+        //private final static int TYPE_UNKNOWN = 4;
+
+        private final static String[]  strValues =
+            {"component", "converter", "validator", "handler"};
+
+        private final int _intValue;
+        
+        public TagType(int intValue)
+        {
+            _intValue = intValue;
+        }
+
+        public String toString()
+        {
+            return strValues[_intValue];
+        }
+
+        protected final int intValue()
+        {
+            return _intValue;
+        }
+       
+        public final static TagType COMPONENT = 
+            new TagType(TYPE_COMPONENT);
+        public final static TagType CONVERTER = 
+            new TagType(TYPE_CONVERTER);
+        public final static TagType VALIDATOR = 
+            new TagType(TYPE_VALIDATOR);
+        public final static TagType HANDLER = 
+            new TagType(TYPE_HANDLER);
+    }
+    
+    /**
+     * @return the type of tag as distinguished by how it may affect the
+     * view at runtime.
+     */
+    TagType getType();
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/ITagElement.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/ITagElement.java
new file mode 100644
index 0000000..cdcae48
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/ITagElement.java
@@ -0,0 +1,26 @@
+package org.eclipse.jst.jsf.common.runtime.internal.view.model.common;
+
+/**
+ * Super-interface of all JSF tag elements.
+ * 
+ * @author cbateman
+ *
+ */
+public interface ITagElement {
+
+    /**
+     * @return the name of the tag
+     */
+    public abstract String getName();
+
+    /**
+     * @return the namespace uri for this tag
+     */
+    public abstract String getUri();
+    
+    /**
+     * @return the fully qualified class name in dot separated format
+     * (i.e. javax.faces.webapp.ConverterTag)
+     */
+    public abstract String getTagHandlerClassName();
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IValidatorTagElement.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IValidatorTagElement.java
new file mode 100644
index 0000000..370ab46
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/IValidatorTagElement.java
@@ -0,0 +1,17 @@
+package org.eclipse.jst.jsf.common.runtime.internal.view.model.common;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorTypeInfo;
+
+/**
+ * Represents a tag element for a JSF validator.
+ * 
+ * @author cbateman
+ *
+ */
+public interface IValidatorTagElement extends IJSFTagElement
+{
+    /**
+     * @return the type info about the validator.
+     */
+    ValidatorTypeInfo getValidator();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/Namespace.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/Namespace.java
new file mode 100644
index 0000000..b6be0ad
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/Namespace.java
@@ -0,0 +1,64 @@
+package org.eclipse.jst.jsf.common.runtime.internal.view.model.common;
+
+import java.util.Collection;
+
+/**
+ * Abstracts an xml namespace used to define a set of view tags
+ * 
+ */
+public abstract class Namespace
+{
+    /**
+     * @return the namespace uri. MUST NOT BE NULL
+     */
+    public abstract String getNSUri();
+
+    /**
+     * This call may be long running.  Call isInitialized to determine if all 
+     * information is already cached, or if calling this method is likely
+     * to take a long time.
+     * 
+     * @return the view elements in this namespace. May be empty but MUST NOT BE
+     *         NULL.
+     */
+    public abstract Collection getViewElements();
+    
+    /**
+     * This method should be light weight if possible.  Unlike calling
+     * getViewElements().isEmpty, this call should not require that all
+     * view element children of this namespace be analyzed and constructed in
+     * order to succeed.
+     * 
+     * @return true if this name space has view element children
+     */
+    public abstract boolean hasViewElements();
+
+    /**
+     * If calculating all view elements is expensive, a Namespace implementation
+     * may defer calculation until a specific element is requested.  A caller of
+     * getViewElements (such as a UI that shows all tags), may wish to know if
+     * the entire namespace has been initialized before calling it, since it may
+     * be long running.
+     * 
+     * @return true if the namespace's elements have been fully initialized.  If this
+     * method returns false, care should be taken in calling getViewElements() and
+     * getViewElement() since they may be very long running.
+     */
+    public abstract boolean isInitialized();
+    
+    /**
+     * @param name
+     * @return the tag element called 'name' or null if none.
+     */
+    public abstract ITagElement getViewElement(final String name);
+
+    /**
+     * @return a user readable display name for this namespace or null if none.
+     */
+    public abstract String getDisplayName();
+
+    public String toString()
+    {
+        return getNSUri();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/TagElement.java b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/TagElement.java
new file mode 100644
index 0000000..640778a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.runtime/src/org/eclipse/jst/jsf/common/runtime/internal/view/model/common/TagElement.java
@@ -0,0 +1,26 @@
+package org.eclipse.jst.jsf.common.runtime.internal.view.model.common;
+
+/**
+ * Abstract a tag element used to construct a view element
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class TagElement implements ITagElement 
+{
+    /* (non-Javadoc)
+     * @see viewhandlerprototype.model.ITagElement#getName()
+     */
+    public abstract String getName();
+
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement#getUri()
+     */
+    public abstract String getUri();
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement#getTagHandlerClassName()
+     */
+    public abstract String getTagHandlerClassName();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/.settings/org.eclipse.jdt.core.prefs b/jsf/plugins/org.eclipse.jst.jsf.common.ui/.settings/org.eclipse.jdt.core.prefs
index 0f6f7ac..3a67c5d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue Apr 10 08:59:53 PDT 2007
+#Thu Sep 27 16:19:18 PDT 2007
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
@@ -11,7 +11,7 @@
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=error
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
@@ -65,11 +65,13 @@
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=error
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.common.ui/META-INF/MANIFEST.MF
index 282f4c4..40067b9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.jsf.common.ui;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Activator: org.eclipse.jst.jsf.common.ui.JSFUICommonPlugin
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
@@ -19,8 +19,8 @@
  org.eclipse.jst.j2ee;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.common.emf;bundle-version="[1.1.103,2.0.0)",
  org.eclipse.wst.common.project.facet.core;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.emf;bundle-version="[2.2.0,2.4.0)",
- org.eclipse.emf.common;bundle-version="[2.2.0,2.4.0)"
+ org.eclipse.emf;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.emf.common;bundle-version="[2.2.0,3.0.0)"
 Export-Package: org.eclipse.jst.jsf.common.ui;x-friends:="org.eclipse.jst.pagedesigner,org.eclipse.jst.pagedesigner.jsf.ui",
  org.eclipse.jst.jsf.common.ui.internal.actions;x-friends:="org.eclipse.jst.jsf.facesconfig.ui",
  org.eclipse.jst.jsf.common.ui.internal.dialogfield;x-friends:="org.eclipse.jst.pagedesigner,org.eclipse.jst.pagedesigner.jsf.ui",
@@ -28,6 +28,6 @@
  org.eclipse.jst.jsf.common.ui.internal.guiutils;x-friends:="org.eclipse.jst.pagedesigner",
  org.eclipse.jst.jsf.common.ui.internal.logging;x-friends:="org.eclipse.jst.pagedesigner,org.eclipse.jst.pagedesigner.jsf.ui",
  org.eclipse.jst.jsf.common.ui.internal.utils;x-friends:="org.eclipse.jst.pagedesigner,org.eclipse.jst.jsf.facesconfig.ui,org.eclipse.jst.pagedesigner.jsf.ui"
-Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %pluginProvider
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/ICommonConstants.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/ICommonConstants.java
deleted file mode 100644
index f8ef8b5..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/ICommonConstants.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.jsf.common.ui;
-
-/**
- * Common constants that would be used through the swad world. This might
- * include file extensions, ids
- * 
- * @author mengbo
- */
-public interface ICommonConstants {
-	/**
-	 * These are the defines for the logging preference pages.
-	 */
-	public static final String P_LOGGING = "logging"; // all logging
-
-	// preferences will
-	// contain this string
-	// in the key.
-
-	public static final String P_CONSOLE_LOGGING = "console.logging.on";
-
-	public static final String P_CONSOLE_LOG_LEVEL = "console.logging.max.level";
-
-	public static final String P_ECLIPSE_LOGGING = "eclipse.logging.on";
-
-	public static final String P_ECLIPSE_LOG_LEVEL = "eclipse.logging.max.level";
-
-	public static final String P_FILE_LOGGING = "file.logging.on";
-
-	public static final String P_FILE_LOG_LEVEL = "file.logging.max.level";
-
-	public static final String P_FILE_PATH = "file.logging.path";
-
-	public static final String P_FILE_CLEAR = "file.logging.startup.clear";
-
-	public static final String P_FILE_ROLLOVER_FREQUENCY = "file.logging.rollover.frequency";
-
-	public static final String P_REMOTE_LOGGING = "remote.logging.on";
-
-	public static final String P_REMOTE_LOG_LEVEL = "remote.logging.max.level";
-
-	public static final String P_REMOTE_HOST = "remote.logging.host";
-
-	public static final String P_REMOTE_PORT = "remote.logging.port";
-
-	/** Debug levels */
-	public static final int DEBUG_LEVEL = 0;
-
-	public static final int INFO_LEVEL = 1;
-
-	public static final int WARN_LEVEL = 2;
-
-	public static final int ERROR_LEVEL = 3;
-
-	public static final int FATAL_LEVEL = 4;
-
-	/** Rollover Frequency */
-	public static final int DAILY_FREQ = 0;
-
-	public static final int WEEKLY_FREQ = 1;
-
-	public static final int MONTHLY_FREQ = 2;
-
-	/** Sybase provided taglib id, defined in plugin.xml */
-	public static final String SYBASE_TAGLIB_ID = "category_jsf";
-
-	/** DataWindow taglib id, defined in plugin.xml */
-	public static final String DATAWINDOW_TAGLIB_ID = "category_datawindow";
-
-	/** Soap Service support category id, defined in plugin.xml of jmt */
-	public static String SOAP_SERVICE_CATEGORY_ID = "category_soapservice";
-
-	/** An nature for jsf based webapp project */
-	public static final String NATURE_WEBAPP = "org.eclipse.jst.pagedesigner.WebappNature";
-
-	public static final String XML_DECL = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
-
-	/** default faces-config.xml file, for version 1.0 */
-	public static final String FACES_CONFIG_10 = XML_DECL
-			+ "<!DOCTYPE faces-config PUBLIC \"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN\" \"http://java.sun.com/dtd/web-facesconfig_1_0.dtd\">\n<faces-config/>";
-
-	/** default faces-config.xml file, for version 1.1 */
-	public static final String FACES_CONFIG_11 = XML_DECL
-			+ "<!DOCTYPE faces-config PUBLIC \"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN\" \"http://java.sun.com/dtd/web-facesconfig_1_1.dtd\">\n<faces-config/>";
-
-	/** default web.xml, for version 2.2 */
-	public static final String WEBAPP_22 = XML_DECL
-			+ "<!DOCTYPE web-app PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN\" \"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd\">";
-
-	/** default web.xml, for version 2.3 */
-	public static final String WEBAPP_23 = XML_DECL
-			+ "<!DOCTYPE web-app PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\" \"http://java.sun.com/dtd/web-app_2_3.dtd\">";
-
-	/** default web.xml, for version 2.4 */
-	public static final String WEBAPP_24 = XML_DECL
-			+ "<web-app xmlns=\"http://java.sun.com/xml/ns/j2ee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" version=\"2.4\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">";
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/IFileFolderConstants.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/IFileFolderConstants.java
index 34cc432..30e1ace 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/IFileFolderConstants.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/IFileFolderConstants.java
@@ -16,132 +16,81 @@
  * @version 1.5
  */
 public interface IFileFolderConstants {
-	public static final String STAR = "*";
 
+	/**
+	 * the dot character
+	 */
 	public static final String DOT = ".";
 
+	/**
+	 * the path separator
+	 */
 	public static final String PATH_SEPARATOR = "/";
 
 	/** file extensions */
-	public static final String EXT_APP = "app";
-
+	/**
+	 * class file extension
+	 */
 	public static final String EXT_CLASS = "class";
 
-	public static final String EXT_DGM = "dgm";
-
-	public static final String EXT_GIF = "gif";
-
-	public static final String EXT_HTM = "htm";
-
-	public static final String EXT_HTML = "html";
-
+	/**
+	 * jar file extension
+	 */
 	public static final String EXT_JAR = "jar";
 
+	/**
+	 * java file extension
+	 */
 	public static final String EXT_JAVA = "java";
 
-	public static final String EXT_JPEG = "jpeg";
 
-	public static final String EXT_JPG = "jpg";
-
-	public static final String EXT_JSF = "jsf";
-
+	/**
+	 * jsp file extension
+	 */
 	public static final String EXT_JSP = "jsp";
 
-	public static final String EXT_JSV = "jsv";
-
-	public static final String EXT_JTPL = "jtpl";
-
-	public static final String EXT_JSPX = "jspx";
-
-	public static final String EXT_PAGEFLOW = "pageflow";
-
-	public static final String EXT_PBD = "pbd";
-
-	public static final String EXT_PBL = "pbl";
-
-	public static final String EXT_PNG = "png";
-
-	public static final String EXT_PSR = "psr";
-
+	/**
+	 * properties file extension
+	 */
 	public static final String EXT_PROPERTIES = "properties";
 
-	public static final String EXT_PUL = "pul";
-
-	public static final String EXT_SRD = "srd";
-
+	/**
+	 * taglib file extension
+	 */
 	public static final String EXT_TAGLIB = "tld";
 
-	public static final String EXT_TMPL = "tmpl";
-
-	public static final String EXT_WAR = "war";
-
-	public static final String EXT_XML = "xml";
-
-	public static final String EXT_ZIP = "zip";
-
-	public static final String EXT_WSDL = "wsdl";
-
-	/** files */
-	public static final String FILE_BUILD_PROPERTIES = "build.properties";
-
-	public static final String FILE_FACES_CONFIG_XML = "faces-config.xml";
-
-	public static final String FILE_MANIFEST_MF = "MANIFEST.MF";
-
-	public static final String FILE_WEB_APP_23_DTD = "web-app_2_3.dtd";
-
-	public static final String FILE_WEB_FACESCONFIG_10_DTD = "web-facesconfig_1_0.dtd";
-
+	/**
+	 * standard web.xml file name
+	 */
 	public static final String FILE_WEB_XML = "web.xml";
 
-	public static final String FILE_SYBASE_EASERVER_CONFIG_XML = "sybase-easerver-config.xml";
-
 	/** folders */
-	public static final String FOLDER_BIN = "bin";
 
+	/**
+	 * classes folder name
+	 */
 	public static final String FOLDER_CLASS = "classes";
 
-	public static final String FOLDER_DTD = "dtd";
-
-	public static final String FOLDER_GENERATED = "generated";
-
+	/**
+	 * icons folder name
+	 */
 	public static final String FOLDER_ICONS = "icons";
 
-	public static final String FOLDER_IMAGES = "images";
-
-	public static final String FOLDER_LIB = "lib";
-
+	/**
+	 * the meta-inf folder name
+	 */
 	public static final String FOLDER_METAINF = "META-INF";
 
-	public static final String FOLDER_PAGEFLOW = "pageflows";
-
-	public static final String FOLDER_PB = "pb";
-
+	/**
+	 * the src folder name
+	 */
 	public static final String FOLDER_SOURCE = "src";
 
-	public static final String FOLDER_TEMPLATES = "templates";
-
-	public static final String FOLDER_TAGLIB = "tld";
-
+	/**
+	 * the web-inf folder name
+	 */
 	public static final String FOLDER_WEBINF = "WEB-INF";
 
-	public static final String FOLDER_WEBROOT = "WebContent";
-
-	public static final String FOLDER_WIZARDS = "wizards";
-
-	public static final String FOLDER_WSDL = "wsdl";
-
 	/** the webroot folder depth relative to the project */
 	public static final int WEBROOT_FOLDER_DEPTH = 2;
-
-    /**
-     * @deprecated
-     */
-    public static String DEFAULT_FACES_CONFIG_FILE_PATH = IFileFolderConstants.PATH_SEPARATOR
-            + IFileFolderConstants.FOLDER_WEBROOT
-            + IFileFolderConstants.PATH_SEPARATOR
-            + IFileFolderConstants.FOLDER_WEBINF
-            + IFileFolderConstants.PATH_SEPARATOR
-            + IFileFolderConstants.FILE_FACES_CONFIG_XML;
-
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/JSFUICommonPlugin.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/JSFUICommonPlugin.java
index 8a82e5f..39fb7f2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/JSFUICommonPlugin.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/JSFUICommonPlugin.java
@@ -19,7 +19,6 @@
 import java.util.Properties;
 import java.util.ResourceBundle;
 
-import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
@@ -31,9 +30,6 @@
 import org.eclipse.jst.jsf.common.ui.internal.guiutils.Alerts;
 import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Version;
@@ -41,10 +37,41 @@
 /**
  * The main plugin class to be used in the desktop.
  */
-public class JSFUICommonPlugin extends AbstractUIPlugin implements ICommonConstants {
+public class JSFUICommonPlugin extends AbstractUIPlugin {
 	// Properties contains general properties and defaults to preferences.
 	private static final String PROPERTIES = "default.properties";
+	// preferences will
+	// contain this string
+	// in the key.
 
+	private static final String P_CONSOLE_LOGGING = "console.logging.on";
+
+	private static final String P_CONSOLE_LOG_LEVEL = "console.logging.max.level";
+
+	private static final String P_ECLIPSE_LOGGING = "eclipse.logging.on";
+
+	private static final String P_ECLIPSE_LOG_LEVEL = "eclipse.logging.max.level";
+
+	private static final String P_FILE_LOGGING = "file.logging.on";
+
+	private static final String P_FILE_LOG_LEVEL = "file.logging.max.level";
+
+	private static final String P_FILE_PATH = "file.logging.path";
+
+	private static final String P_FILE_CLEAR = "file.logging.startup.clear";
+
+	private static final String P_FILE_ROLLOVER_FREQUENCY = "file.logging.rollover.frequency";
+
+	private static final int DEBUG_LEVEL = 0;
+
+	private static final int INFO_LEVEL = 1;
+
+	private static final int WARN_LEVEL = 2;
+
+	private static final int ERROR_LEVEL = 3;
+
+	private static final int FATAL_LEVEL = 4;
+	
 	// What version of the platform are we on.
 	private static boolean TWO_DOT_ONE;
 
@@ -152,6 +179,7 @@
 
 	/**
 	 * Returns the shared instance.
+	 * @return the plugin instance
 	 */
 	public static JSFUICommonPlugin getDefault() {
 		return _plugin;
@@ -168,6 +196,8 @@
 
 	/**
 	 * Returns a logger for the new class using this plugin for reference.
+	 * @param theClass 
+	 * @return the logger
 	 */
     // TODO: theClass is never used!!
 	public static Logger getLogger(Class theClass) {
@@ -176,6 +206,7 @@
 
 	/**
 	 * Returns the plugin's root logger
+	 * @return the root logger
 	 */
 	public Logger getRootLogger() {
 		return _log;
@@ -184,7 +215,7 @@
 	/**
 	 * Returns this plugin's unique identifier
 	 * 
-	 * @retun this plugin's unique identifier
+	 * @return this plugin's unique identifier
 	 * 
 	 */
 	public static String getPluginId() {
@@ -193,6 +224,7 @@
 
 	/**
 	 * Returns the plugin's resource bundle,
+	 * @return the resource bundle
 	 */
 	public ResourceBundle getResourceBundle() {
 		return _resourceBundle;
@@ -201,6 +233,8 @@
 	/**
 	 * Returns the string from the plugin's resource bundle, or 'key' if not
 	 * found.
+	 * @param key 
+	 * @return the resource string
 	 */
 	public static String getResourceString(String key) {
 		ResourceBundle bundle = JSFUICommonPlugin.getDefault().getResourceBundle();
@@ -213,6 +247,7 @@
 
 	/**
 	 * Returns the plugin's descriptor's resource bundle,
+	 * @return the bundle
 	 */
 	public ResourceBundle getPluginDecriptorBundle() {
 		return Platform.getResourceBundle(getDefault().getBundle());
@@ -221,33 +256,13 @@
 	/**
 	 * Returns the plugin's default properties. These are normally used for
 	 * default preferences.
+	 * @return the properties
 	 */
 	public Properties getProperties() {
 		return _properties;
 	}
 
 	/**
-	 * Returns the standard display to be used. The method first checks, if the
-	 * thread calling this method has an associated dispaly. If so, this display
-	 * is returned. Otherwise the method returns the default display.
-	 */
-	public static Display getStandardDisplay() {
-		Display display;
-		display = Display.getCurrent();
-		if (display == null) {
-			display = Display.getDefault();
-		}
-		return display;
-	}
-
-	/**
-	 * Returns the workspace instance.
-	 */
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-
-	/**
 	 * Returns a shared image for the given name
 	 * <p>
 	 * Note: Images returned from this method will be automitically disposed of
@@ -314,16 +329,6 @@
 	}
 
 	/**
-	 * Read a file resource. The file should contain any partial path and the
-	 * filename from the plugin base. The caller is responsible for closing the
-	 * file.
-	 */
-	public InputStream readFile(String file) throws MalformedURLException,
-			IOException {
-		return (new URL(_pluginBase, file)).openStream();
-	}
-
-	/**
 	 * Is this eclipse version 2.1
 	 * 
 	 * @return true if version is 2.1
@@ -350,34 +355,7 @@
 		return _version;
 	}
 
-	/**
-	 * Returns the active workbench window.
-	 * 
-	 * @return the active workbench window. this can be null but I've never seen
-	 *         it.
-	 */
-	public static IWorkbenchWindow getActiveWorkbenchWindow() {
-		if (getDefault().getWorkbench() == null) {
-			return null;
-		}
-        return getDefault().getWorkbench().getActiveWorkbenchWindow();
-	}
 
-	/**
-	 * Returns the active workbench page. Note that the active page may not be
-	 * the one that the user perceives as active in some situations so this
-	 * method of obtaining the activate page should only be used if no other
-	 * method is available.
-	 * 
-	 * @return the active workbench page
-	 */
-	public static IWorkbenchPage getActivePage() {
-		IWorkbenchWindow window = getActiveWorkbenchWindow();
-		if (window == null) {
-			return null;
-		}
-		return window.getActivePage();
-	}
 
 	/**
 	 * Initializes the preference controls to the default values. These values
@@ -437,24 +415,4 @@
 		return ERROR_LEVEL;
 	}
 
-	/**
-	 * Converts the rollover frequency from string to int. The frequency
-	 * defaults to DAILY.
-	 * 
-	 * @param str
-	 *            String representation of rollover frequency
-	 * @return integer representation of rollover frequency
-	 */
-	public int strToIntFrequency(String str) {
-		if (str == null) {
-			return DAILY_FREQ;
-		}
-		if (str.equalsIgnoreCase("WEEKLY")) {
-			return WEEKLY_FREQ;
-		}
-		if (str.equalsIgnoreCase("MONTHLY")) {
-			return MONTHLY_FREQ;
-		}
-		return DAILY_FREQ;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/AbstractClassButtonDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/AbstractClassButtonDialogField.java
index d73a28d..d7e3cb7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/AbstractClassButtonDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/AbstractClassButtonDialogField.java
@@ -36,7 +36,7 @@
  * @author mengbo
  * @version 1.5
  */
-public abstract class AbstractClassButtonDialogField extends
+/*package*/ abstract class AbstractClassButtonDialogField extends
 		StringButtonDialogField {
 	private IProject _project;
 
@@ -50,10 +50,16 @@
 
 	private boolean _autoOpenResource = true;
 
+	/**
+	 * @param autoOpenResource
+	 */
 	public void setAutoOpenResource(boolean autoOpenResource) {
 		_autoOpenResource = autoOpenResource;
 	}
 
+	/**
+	 * @param project
+	 */
 	public AbstractClassButtonDialogField(IProject project) {
 		super(null);
 		this._project = project;
@@ -107,8 +113,16 @@
 		}
 	}
 
+	/**
+	 * @return the interfaces 
+	 * TODO: the contract seems inconsistent
+	 * as whether to return null or empty list when none
+	 */
 	protected abstract List getImplementInterfaces();
 
+	/**
+	 * @return the java search scope to be used.  Must not be null
+	 */
 	protected abstract IJavaSearchScope getJavaSearchScope();
 
 	private void browseButtonPressed() {
@@ -190,23 +204,17 @@
 		return _interfacesList;
 	}
 
+	/**
+	 * Sets (replaces) the interface list
+	 * TODO: this list can have at most one element
+	 * @param interfaceName
+	 */
 	public void setInterface(String interfaceName) {
 		_interfacesList = new ArrayList();
 		_interfacesList.add(interfaceName);
 	}
 
 	/**
-	 * @param interfacesList
-	 *            The interfacesList to set.
-	 */
-	public void setInterfacesList(List interfacesList) {
-		// TODO:Now we can not find the IJavaSearchScope that support the
-		// Hierarchies for multi-types.
-		// We will support the multi-interfaces After resolve the problem.
-		this._interfacesList = interfacesList;
-	}
-
-	/**
 	 * @return Returns the _type.
 	 */
 	public IType getType() {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/BooleanComboDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/BooleanComboDialogField.java
deleted file mode 100644
index b40bdae..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/BooleanComboDialogField.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.jsf.common.ui.internal.dialogfield;
-
-
-/**
- * @author mengbo
- */
-public class BooleanComboDialogField extends ComboDialogField {
-	final public static int USE_YESNO = 0;
-
-	final public static int USE_TRUEFALSE = 1;
-
-	/**
-	 * 
-	 * @param type
-	 */
-	public void setType(int type) {
-		if (type == USE_YESNO) {
-			setItems(new String[] { "", "yes", "no" });
-		} else if (type == USE_TRUEFALSE) {
-			setItems(new String[] { "", "true", "false" });
-		}
-	}
-
-	/**
-	 * @param flags
-	 */
-	public BooleanComboDialogField(int flags) {
-		super(flags);
-		setType(USE_TRUEFALSE);
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ClasspathResourceButtonDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ClasspathResourceButtonDialogField.java
deleted file mode 100644
index a02a94f..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ClasspathResourceButtonDialogField.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.jsf.common.ui.internal.dialogfield;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jst.jsf.common.ui.JSFUICommonPlugin;
-import org.eclipse.jst.jsf.common.ui.IFileFolderConstants;
-import org.eclipse.jst.jsf.common.ui.internal.dialogs.ResourceOnClasspathDialog;
-import org.eclipse.swt.widgets.Shell;
-
-/**
- * @author mengbo
- */
-public class ClasspathResourceButtonDialogField extends StringButtonDialogField {
-	private IProject _project;
-
-	private static final String[] PROPERTIES_FILES_SUFFIXS = new String[] { IFileFolderConstants.EXT_PROPERTIES }; //$NON-NLS-1$
-
-	public ClasspathResourceButtonDialogField(IProject project) {
-		this(null, project);
-		setStringButtonAdapter(new IStringButtonAdapter() {
-			public void changeControlPressed(DialogField field) {
-				browseButtonPressed();
-			}
-		});
-	}
-
-	public ClasspathResourceButtonDialogField(IStringButtonAdapter adapter,
-			IProject project) {
-		super(adapter);
-		this._project = project;
-	}
-
-	private void browseButtonPressed() {
-		Shell shell = getShell();
-		ResourceOnClasspathDialog dialog = new ResourceOnClasspathDialog(shell,
-				getJavaProject());
-		dialog.setTitle(JSFUICommonPlugin
-				.getResourceString("DialogField.ResourceButton.SelectFile"));//$NON-NLS-1$
-		dialog.setSuffixs(PROPERTIES_FILES_SUFFIXS);
-		if (dialog.open() == Window.OK) {
-			String oldValue = getText();
-
-			String newValue = (String) dialog.getResult()[0];
-			if (oldValue != newValue) {
-				setText(newValue);
-			}
-		}
-	}
-
-	private IJavaProject getJavaProject() {
-		try {
-			if (_project != null && _project.hasNature(JavaCore.NATURE_ID)) {
-				return JavaCore.create(_project);
-			}
-            return null;
-		} catch (CoreException e) {
-			return null;
-		}
-	}
-
-	/**
-	 * @return Returns the project.
-	 */
-	public IProject getProject() {
-		return _project;
-	}
-
-	/**
-	 * @param project
-	 *            The project to set.
-	 */
-	public void setProject(IProject project) {
-		this._project = project;
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ColorButtonDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ColorButtonDialogField.java
index 95eca30..c4d2246 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ColorButtonDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ColorButtonDialogField.java
@@ -71,6 +71,10 @@
     
     private ColorPalette    _colorPalette;
 
+	/**
+	 * @param flags
+	 * @param colorPalette
+	 */
 	public ColorButtonDialogField(int flags, ColorPalette colorPalette) {
 		super(flags);
 		_buttonEnabled = true;
@@ -149,6 +153,7 @@
 
 	/**
 	 * Sets the enable state of the button.
+	 * @param enable 
 	 */
 	public void enableButton(boolean enable) {
 		if (isOkToUse(_button)) {
@@ -159,10 +164,12 @@
 
 	/**
 	 * Creates or returns the created buttom widget.
+	 * @param toolkit 
 	 * 
 	 * @param parent
 	 *            The parent composite or <code>null</code> if the widget has
 	 *            already been created.
+	 * @return  the button widget
 	 */
 	public Button getChangeControl(FormToolkit toolkit, Composite parent) {
 		if (_button == null) {
@@ -246,12 +253,7 @@
 	public int getNumberOfControls() {
 		return 4;
 	}
-
-	public StyleCombo getTextControl(FormToolkit toolkit, Composite parent) {
-		return getComboControl(toolkit, parent);
-	}
-
-	protected GridData gridDataForButton(int span) {
+	private GridData gridDataForButton(int span) {
 		GridData gd = new GridData();
 		gd.horizontalAlignment = GridData.FILL;
 		gd.grabExcessHorizontalSpace = false;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ComboDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ComboDialogField.java
index 66dd217..582634e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ComboDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ComboDialogField.java
@@ -12,7 +12,6 @@
 package org.eclipse.jst.jsf.common.ui.internal.dialogfield;
 
 import java.util.Map;
-import java.util.TreeMap;
 import java.util.Map.Entry;
 
 import org.eclipse.swt.SWT;
@@ -59,6 +58,9 @@
 
 	private Map _entryMap;
 
+	/**
+	 * @param flags
+	 */
 	public ComboDialogField(int flags) {
 		super();
 		_text = ""; //$NON-NLS-1$
@@ -95,7 +97,7 @@
 		return 3;
 	}
 
-	protected static GridData gridDataForCombo(int span) {
+	private static GridData gridDataForCombo(int span) {
 		GridData gd = new GridData();
 		gd.horizontalAlignment = GridData.FILL;
 		gd.grabExcessHorizontalSpace = false;
@@ -120,13 +122,15 @@
 
 	/**
 	 * Creates or returns the created combo control.
+	 * @param toolkit 
 	 * 
 	 * @param parent
 	 *            The parent composite or <code>null</code> when the widget
 	 *            has already been created.
+	 * @return the custom combo control
 	 */
 	public CCombo getComboControl(FormToolkit toolkit, Composite parent) {
-		if (_comboControl == null) {
+		if (_comboControl == null || _comboControl.isDisposed()) {
 			assertCompositeNotNull(parent);
 			_modifyListener = new ModifyListener() {
 				public void modifyText(ModifyEvent e) {
@@ -173,7 +177,7 @@
 		return _comboControl;
 	}
 
-	protected void handleDefaultSelection(SelectionEvent e) {
+	private void handleDefaultSelection(SelectionEvent e) {
 		// commit value
 		if (_pending) {
 			_pending = false;
@@ -181,7 +185,7 @@
 		}
 	}
 
-	protected void doFocusLost(FocusEvent e) {
+	private void doFocusLost(FocusEvent e) {
 		if (_pending) {
 			_pending = false;
 			dialogFieldApplied();
@@ -221,15 +225,10 @@
 
 	// ------ text access
 
-	/**
-	 * Gets the combo items.
-	 */
-	public String[] getItems() {
-		return _items;
-	}
 
 	/**
 	 * Sets the combo items. Triggers a dialog-changed event.
+	 * @param items 
 	 */
 	public void setItems(String[] items) {
 		_items = items;
@@ -240,19 +239,6 @@
 		// dialogFieldChangedAndApplied();
 	}
 
-	public void setEntryMap(Map map) {
-		_entryMap = map;
-		if (_entryMap == null) {
-			_entryMap = new TreeMap();
-		}
-		Entry[] entries = (Entry[]) _entryMap.entrySet().toArray(new Entry[0]);
-		String[] items = new String[entries.length];
-		for (int i = 0; i < entries.length; i++) {
-			items[i] = entries[i].getValue().toString();
-		}
-		setItems(items);
-	}
-
 	/**
 	 * Gets the text.
 	 */
@@ -271,6 +257,7 @@
 
 	/**
 	 * Selects an item.
+	 * @param index 
 	 */
 	public void selectItem(int index) {
 		if (isOkToUse(_comboControl)) {
@@ -284,10 +271,6 @@
 		dialogFieldChangedAndApplied();
 	}
 
-	public int getSelectionIndex() {
-		return _selectionIndex;
-	}
-
 	/**
 	 * Sets the text without triggering a dialog-changed event.
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogField.java
index fe40291..0ff86f7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogField.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogField.java
@@ -13,6 +13,7 @@
 
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.forms.events.IHyperlinkListener;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 
@@ -24,7 +25,7 @@
 	/**
 	 * this method must be called directly after constructor, in this case,
 	 * system will create a hyper link label, and when the hyper link is
-	 * clicked, the corresponding method on the listene will be called. A
+	 * clicked, the corresponding method on the listener will be called. A
 	 * RuntimeException will throw out if this method is called after the label
 	 * has been created.
 	 * 
@@ -35,38 +36,72 @@
 
 	/**
 	 * Sets the label of the dialog field.
+	 * @param labeltext 
 	 */
 	public abstract void setLabelText(String labeltext);
 
 	// ------ change listener
+	/**
+	 * Listener that is notified on a field change
+	 * @param listener
+	 */
 	public abstract void setDialogFieldChangeListener(
 			IDialogFieldChangeListener listener);
 
+	/**
+	 * Listener  that is notified on a field apply
+	 * @param listener
+	 */
 	public abstract void setDialogFieldApplyListener(
 			IDialogFieldApplyListener listener);
 
 	// ------- focus management
+	/**
+	 * Tries to set the focus to the dialog field. Returns <code>true</code>
+	 * if the dialog field can take focus. To be re-implemented by dialog field
+	 * implementors.
+	 * @return true if dialog field can take focus
+	 */
 	public abstract boolean setFocus();
 
-	// ------- layout helpers
+	/**
+	 * Creates all controls of the dialog field and fills it to a composite. The
+	 * composite is assumed to have <code>MGridLayout</code> as layout. The
+	 * dialog field will adjust its controls' spans to the number of columns
+	 * given. To be reimplemented by dialog field implementors.
+	 * @param toolkit 
+	 * @param parent 
+	 * @param nColumns 
+	 * @return the controls
+	 */
 	public abstract Control[] doFillIntoGrid(FormToolkit toolkit,
 			Composite parent, int nColumns);
 
 	/**
 	 * Returns the number of columns of the dialog field. To be reimplemented by
 	 * dialog field implementors.
+	 * @return the number of columns
 	 */
 	public abstract int getNumberOfControls();
 
 	// ------- ui creation
+	/**
+	 * @param _formToolkit
+	 * @param parent
+	 * @return the label control
+	 */
 	public abstract Control getLabelControl(FormToolkit _formToolkit,
 			Composite parent);
 
 	// --------- enable / disable management
+	/**
+	 * @param enabled
+	 */
 	public abstract void setEnabled(boolean enabled);
 
 	/**
 	 * Gets the enable state of the dialog field.
+	 * @return true if enabled is set
 	 */
 	public abstract boolean isEnabled();
 
@@ -97,7 +132,18 @@
 	 */
 	public abstract void handleGrabHorizontal();
 
+	/**
+	 * @return true if is required field
+	 */
 	public abstract boolean isRequired();
 
+	/**
+	 * @param toolTip
+	 */
 	public abstract void setToolTip(String toolTip);
+	
+	/**
+	 * @return the field's enclosing shell or null if none
+	 */
+	public Shell getShell();
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldBase.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldBase.java
index bfc56d4..431dae4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldBase.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldBase.java
@@ -64,7 +64,7 @@
 
 	private Label _requiredLabel;
 
-	protected String _labelText;
+	private String _labelText;
 
 	private IDialogFieldChangeListener _dialogFieldChangeListener;
 
@@ -84,6 +84,9 @@
 
 	private String toolTip;
 
+	/**
+	 * default constructor
+	 */
 	public DialogFieldBase() {
 		_enabled = true;
 		_label = null;
@@ -130,7 +133,10 @@
 		}
 	}
 
-	protected Shell getShell() {
+	/**
+	 * @return return the enclosing Shell or null if one cannot be determined
+	 */
+	public Shell getShell() {
 		if (_label != null && !_label.isDisposed()) {
 			return _label.getShell();
 		} else if (_hyperlink != null && !_hyperlink.isDisposed()) {
@@ -188,11 +194,7 @@
 
 	// ------- focus management
 
-	/**
-	 * Tries to set the focus to the dialog field. Returns <code>true</code>
-	 * if the dialog field can take focus. To be reimplemented by dialog field
-	 * implementors.
-	 */
+
 	public boolean setFocus() {
 		return false;
 	}
@@ -218,12 +220,6 @@
 
 	// ------- layout helpers
 
-	/**
-	 * Creates all controls of the dialog field and fills it to a composite. The
-	 * composite is assumed to have <code>MGridLayout</code> as layout. The
-	 * dialog field will adjust its controls' spans to the number of columns
-	 * given. To be reimplemented by dialog field implementors.
-	 */
 	public Control[] doFillIntoGrid(FormToolkit toolkit, Composite parent,
 			int nColumns) {
 		assertEnoughColumns(nColumns);
@@ -244,6 +240,7 @@
 	 * 
 	 * @param control
 	 *            a control from which to obtain the current font
+	 * @return the font metrics for control
 	 */
 	protected FontMetrics getDialogUnits(Control control) {
 		if (_fontMetrics == null) {
@@ -264,6 +261,10 @@
 		return 1;
 	}
 
+	/**
+	 * @param span
+	 * @return a new GridData for the horizontal 'span' value
+	 */
 	protected static GridData gridDataForLabel(int span) {
 		GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
 		gd.horizontalSpan = span;
@@ -281,7 +282,7 @@
 	 */
 	public Control getLabelControl(FormToolkit _formToolkit, Composite parent) {
 		Control control = null;
-		if (_label == null && _hyperlink == null) {
+		if ((_label == null || _label.isDisposed()) && (_hyperlink == null  || _hyperlink.isDisposed())) {
 			assertCompositeNotNull(parent);
 
 			String label = null;
@@ -322,9 +323,14 @@
 		return control;
 	}
 
+	/**
+	 * @param _formToolkit
+	 * @param parent
+	 * @return get the Label control for required
+	 */
 	public Control getRequiredLabelControl(FormToolkit _formToolkit,
 			Composite parent) {
-		if (_requiredLabel == null) {
+		if (_requiredLabel == null || _requiredLabel.isDisposed()) {
 			if (_formToolkit == null) {
 				_requiredLabel = new Label(parent, SWT.LEFT | SWT.WRAP);
 			} else {
@@ -394,9 +400,11 @@
 
 	/**
 	 * Creates a spacer control.
+	 * @param toolkit 
 	 * 
 	 * @param parent
 	 *            The parent composite
+	 * @return a spacer control
 	 */
 	public Control createEmptySpace(FormToolkit toolkit, Composite parent) {
 		return createEmptySpace(toolkit, parent, 1);
@@ -405,9 +413,12 @@
 	/**
 	 * Creates a spacer control with the given span. The composite is assumed to
 	 * have <code>MGridLayout</code> as layout.
+	 * @param toolkit 
 	 * 
 	 * @param parent
 	 *            The parent composite
+	 * @param span 
+	 * @return a label that creates empty space
 	 */
 	public Control createEmptySpace(FormToolkit toolkit, Composite parent,
 			int span) {
@@ -430,6 +441,8 @@
 
 	/**
 	 * Tests is the control is not <code>null</code> and not disposed.
+	 * @param control 
+	 * @return true if the control is valid for use
 	 */
 	protected final boolean isOkToUse(Control control) {
 		return (control != null) && !(control.isDisposed());
@@ -467,11 +480,17 @@
 		return _enabled;
 	}
 
+	/**
+	 * @param comp
+	 */
 	protected final void assertCompositeNotNull(Composite comp) {
 		Assert.isNotNull(comp,
 				"uncreated control requested with composite null"); //$NON-NLS-1$
 	}
 
+	/**
+	 * @param nColumns
+	 */
 	protected final void assertEnoughColumns(int nColumns) {
 		Assert.isTrue(nColumns >= getNumberOfControls(),
 				"given number of columns is too small"); //$NON-NLS-1$
@@ -520,10 +539,16 @@
 		return _isRequired;
 	}
 
+	/**
+	 * @param isRequired
+	 */
 	public void setRequired(boolean isRequired) {
 		this._isRequired = isRequired;
 	}
 
+	/**
+	 * @return gthe tool tip text
+	 */
 	protected String getToolTip() {
 		return toolTip;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldGroup.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldGroup.java
index 2e4c5bc..0ed7b3a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldGroup.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldGroup.java
@@ -103,4 +103,11 @@
 	 * @return could return null. or an array containing null elements.
 	 */
 	public abstract IStatus[] validateDialogFields();
+	
+	/**
+	 * Intended to allow subclasses to recreate controls.  Default implementation does nothing.
+	 */
+	public void reset(){
+		//do nothing by default	
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldGroupPage.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldGroupPage.java
index 9839eb0..2e10f45 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldGroupPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldGroupPage.java
@@ -22,12 +22,16 @@
 public class DialogFieldGroupPage extends WizardPage {
 	private DialogFieldGroup _group;
 
-	IDialogFieldChangeListener _defaultChangeListener = new IDialogFieldChangeListener() {
+	private IDialogFieldChangeListener _defaultChangeListener = new IDialogFieldChangeListener() {
 		public void dialogFieldChanged(DialogField field) {
 			validate();
 		}
 	};
 
+	/**
+	 * @param pageName
+	 * @param section
+	 */
 	public DialogFieldGroupPage(String pageName, DialogFieldGroup section) {
 		super(pageName);
 		_group = section;
@@ -52,11 +56,18 @@
 		this.setControl(container);
 	}
 
+	/**
+	 * @return the dialog field group
+	 */
 	public DialogFieldGroup getDialogFieldGroup() {
 		return _group;
 	}
 
-	public void validate() {
+	/**
+	 * validate all the dialog fields.  Updates
+	 * status line and sets page completion if there are no errors
+	 */
+	private void validate() {
 		IStatus[] statuses = _group.validateDialogFields();
 		IStatus status = StatusUtil.getMostSevere(statuses);
 		StatusUtil.applyToStatusLine(this, status);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldResources.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldResources.java
index 7ae2eab..e58971c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldResources.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldResources.java
@@ -23,7 +23,7 @@
  * 
  * @author mengbo
  */
-public class DialogFieldResources extends ResourceUtils {
+/*package*/ class DialogFieldResources extends ResourceUtils {
 	/** Create the logger for this class */
 	private static Logger _log = JSFUICommonPlugin
 			.getLogger(DialogFieldResources.class);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldWrapper.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldWrapper.java
deleted file mode 100644
index a0bf301..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/DialogFieldWrapper.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.jsf.common.ui.internal.dialogfield;
-
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.ui.forms.events.IHyperlinkListener;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-/**
- * This is a wrapper to a dialog field, by adding a small button at the end. The
- * caller is responsible to provide the image or lable text and the button click
- * handler.
- * 
- * @author mengbo
- * @version 1.5
- * see CellEditorWrapper TODO: what relation to page designer?
- */
-
-public class DialogFieldWrapper implements DialogField, ISupportTextValue {
-	private DialogField _wrappedDialogField;
-
-	private Button _button;
-
-	private boolean _buttonEnabled;
-
-	private Image _buttonImage;
-
-	private Image _disabledImage;
-
-	private String _buttonLabel;
-
-	private IStringButtonAdapter _adapter;
-
-	/**
-	 * 
-	 */
-	public DialogFieldWrapper(DialogField field, Image image,
-			Image disabledImage) {
-		super();
-		if (!(field instanceof ISupportTextValue)) {
-			throw new IllegalArgumentException(
-					"Field must be ISupportTextValue");
-		}
-		_wrappedDialogField = field;
-		_buttonImage = image;
-		_disabledImage = disabledImage;
-	}
-
-	/**
-	 * 
-	 */
-	public DialogFieldWrapper(DialogField field, String label) {
-		super();
-		if (!(field instanceof ISupportTextValue)) {
-			throw new IllegalArgumentException(
-					"Field must be ISupportTextValue");
-		}
-		_wrappedDialogField = field;
-		_buttonLabel = label;
-	}
-
-	public void setButtonAdapter(IStringButtonAdapter adapter) {
-		this._adapter = adapter;
-		this.updateButtonControl();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue#setTextWithoutUpdate(java.lang.String)
-	 */
-	public void setTextWithoutUpdate(String value) {
-		((ISupportTextValue) _wrappedDialogField).setTextWithoutUpdate(value);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue#getText()
-	 */
-	public String getText() {
-		return ((ISupportTextValue) _wrappedDialogField).getText();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue#setText(java.lang.String)
-	 */
-	public void setText(String value) {
-		((ISupportTextValue) _wrappedDialogField).setText(value);
-	}
-
-	// --------------------------------------------------------------------------------------------
-	// wrapped method to add the attached button
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField#doFillIntoGrid(org.eclipse.ui.forms.widgets.FormToolkit,
-	 *      org.eclipse.swt.widgets.Composite, int)
-	 */
-	public Control[] doFillIntoGrid(FormToolkit toolkit, Composite parent,
-			int nColumns) {
-		Control[] wrappedControls = _wrappedDialogField.doFillIntoGrid(toolkit,
-				parent, nColumns - 1);
-		Control[] result = new Control[wrappedControls.length];
-
-		Control button = getButton(toolkit, parent);
-		button.setLayoutData(gridDataForButton(1));
-
-		System.arraycopy(wrappedControls, 0, result, 0, wrappedControls.length);
-		result[result.length - 1] = _button;
-		return result;
-	}
-
-	/**
-	 * @param span
-	 * @return
-	 */
-	private GridData gridDataForButton(int span) {
-		GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		gd.horizontalSpan = span;
-		gd.widthHint = gd.heightHint = 18;
-		return gd;
-	}
-
-	/**
-	 * @param toolkit
-	 * @param parent
-	 * @return
-	 */
-	private Control getButton(FormToolkit toolkit, Composite parent) {
-		if (_button == null) {
-			Assert.isNotNull(parent,
-					"uncreated control requested with composite null"); //$NON-NLS-1$
-			if (toolkit != null) {
-				_button = toolkit.createButton(parent, "", SWT.PUSH);
-				if (_buttonImage != null) {
-					_button.setImage(_buttonImage);
-				} else {
-					_button.setText(_buttonLabel);
-				}
-			} else {
-				_button = new Button(parent, SWT.PUSH);
-				if (_buttonImage != null) {
-					_button.setImage(_buttonImage);
-				} else {
-					_button.setText(_buttonLabel);
-				}
-			}
-			_button.addPaintListener(new PaintListener() {
-				public void paintControl(PaintEvent e) {
-					if (!_button.isEnabled() && _disabledImage != null) {
-						Rectangle buttonBounds = _button.getBounds();
-						Rectangle imageBounds = _disabledImage.getBounds();
-						e.gc.drawImage(_disabledImage,
-								(buttonBounds.width - imageBounds.width) / 2,
-								(buttonBounds.height - imageBounds.height) / 2);
-					}
-				}
-			});
-			_button.setEnabled(isEnabled() && _buttonEnabled);
-			_button.addSelectionListener(new SelectionListener() {
-				public void widgetDefaultSelected(SelectionEvent e) {
-					buttonPressed();
-				}
-
-				public void widgetSelected(SelectionEvent e) {
-					buttonPressed();
-				}
-			});
-
-		}
-		return _button;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField#getLabelControl(org.eclipse.ui.forms.widgets.FormToolkit,
-	 *      org.eclipse.swt.widgets.Composite)
-	 */
-	public Control getLabelControl(FormToolkit _formToolkit, Composite parent) {
-		return _wrappedDialogField.getLabelControl(_formToolkit, parent);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogField#setHyperLink(org.eclipse.ui.forms.events.IHyperlinkListener)
-	 */
-	public void setHyperLink(IHyperlinkListener listener) {
-		_wrappedDialogField.setHyperLink(listener);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogField#setLabelText(java.lang.String)
-	 */
-	public void setLabelText(String labeltext) {
-		_wrappedDialogField.setLabelText(labeltext);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogField#setDialogFieldChangeListener(org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldChangeListener)
-	 */
-	public void setDialogFieldChangeListener(IDialogFieldChangeListener listener) {
-		_wrappedDialogField.setDialogFieldChangeListener(listener);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogField#setDialogFieldApplyListener(org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldApplyListener)
-	 */
-	public void setDialogFieldApplyListener(IDialogFieldApplyListener listener) {
-		_wrappedDialogField.setDialogFieldApplyListener(listener);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogField#setFocus()
-	 */
-	public boolean setFocus() {
-		return _wrappedDialogField.setFocus();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogField#getNumberOfControls()
-	 */
-	public int getNumberOfControls() {
-		return _wrappedDialogField.getNumberOfControls() + 1;
-	}
-
-	public void setButtonEnabled(boolean enabled) {
-		this._buttonEnabled = enabled;
-		updateButtonControl();
-	}
-
-	public boolean isButtonEnabled() {
-		return _buttonEnabled;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogField#setEnabled(boolean)
-	 */
-	public void setEnabled(boolean enabled) {
-		_wrappedDialogField.setEnabled(enabled);
-		updateButtonControl();
-	}
-
-	/**
-	 * 
-	 */
-	private void updateButtonControl() {
-		if (this._button != null) {
-			this._button.setEnabled(this.isEnabled() && _buttonEnabled
-					&& _adapter != null);
-			_button.redraw();
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogField#isEnabled()
-	 */
-	public boolean isEnabled() {
-		return _wrappedDialogField.isEnabled();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogField#getAttachedData(java.lang.Object)
-	 */
-	public Object getAttachedData(Object key) {
-		return _wrappedDialogField.getAttachedData(key);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogField#putAttachedData(java.lang.Object,
-	 *      java.lang.Object)
-	 */
-	public void putAttachedData(Object key, Object value) {
-		_wrappedDialogField.putAttachedData(key, value);
-	}
-
-	protected void buttonPressed() {
-		if (_adapter != null) {
-			_adapter.changeControlPressed(this);
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField#handleGrabHorizontal()
-	 */
-	public void handleGrabHorizontal() {
-		_wrappedDialogField.handleGrabHorizontal();
-	}
-
-	public DialogField getWrappedDialogField() {
-		return _wrappedDialogField;
-	}
-
-	public boolean isRequired() {
-		return _wrappedDialogField.isRequired();
-	}
-
-	public void setToolTip(String toolTip) {
-		_wrappedDialogField.setToolTip(toolTip);
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/IDialogFieldChangeListener.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/IDialogFieldChangeListener.java
index 3a73452..b5ead67 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/IDialogFieldChangeListener.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/IDialogFieldChangeListener.java
@@ -21,6 +21,7 @@
 
 	/**
 	 * The dialog field has changed.
+	 * @param field
 	 */
 	void dialogFieldChanged(DialogField field);
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/IStringButtonAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/IStringButtonAdapter.java
index 8fd7fe7..466e355 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/IStringButtonAdapter.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/IStringButtonAdapter.java
@@ -17,6 +17,8 @@
  */
 public interface IStringButtonAdapter {
 
+	/**
+	 * @param field
+	 */
 	void changeControlPressed(DialogField field);
-
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ISupportTextValue.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ISupportTextValue.java
index 3e2ea5a..014752d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ISupportTextValue.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ISupportTextValue.java
@@ -20,9 +20,18 @@
  * @version 1.5
  */
 public interface ISupportTextValue {
+	/**
+	 * @param value
+	 */
 	public void setTextWithoutUpdate(String value);
 
+	/**
+	 * @return the text
+	 */
 	public String getText();
 
+	/**
+	 * @param value
+	 */
 	public void setText(String value);
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaClassWizard.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaClassWizard.java
index 4aa0808..7458740 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaClassWizard.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaClassWizard.java
@@ -19,7 +19,6 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
@@ -38,7 +37,7 @@
 /**
  * @author mengbo
  */
-public class JavaClassWizard extends Wizard {
+/*package*/ class JavaClassWizard extends Wizard {
 	private static String STORE_SECTION = "JavaClassWizard"; //$NON-NLS-1$
 
 	private JavaClassWizardPage _mainPage;
@@ -53,14 +52,27 @@
 
 	private boolean _autoOpenResource = true;
 
+	/**
+	 * @param autoOpenResource
+	 */
 	public void setAutoOpenResource(boolean autoOpenResource) {
 		_autoOpenResource = autoOpenResource;
 	}
 
+	/**
+	 * @param project
+	 * @param className
+	 */
 	public JavaClassWizard(IProject project, String className) {
 		this(project, className, null, null);
 	}
 
+	/**
+	 * @param project
+	 * @param className
+	 * @param superClass
+	 * @param superInterfaces
+	 */
 	public JavaClassWizard(IProject project, String className,
 			String superClass, List superInterfaces) {
 		this._project = project;
@@ -146,7 +158,7 @@
 		return true;
 	}
 
-	protected void selectAndReveal(IResource newResource) {
+	private void selectAndReveal(IResource newResource) {
 		BasicNewResourceWizard.selectAndReveal(newResource,
 				getWorkbenchWindow());
 	}
@@ -155,14 +167,13 @@
 		return PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 	}
 
-	protected ISchedulingRule getSchedulingRule() {
-		return _mainPage.getModifiedResource();
-	}
-
-	public String getClassName() {
+	private String getClassName() {
 		return _className;
 	}
 
+	/**
+	 * @return the class name including args
+	 */
 	public String getClassNameWithArgs() {
 		if (_classArgs != null && _classArgs.length() > 0) {
 			StringBuffer buffer = new StringBuffer(_className);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaClassWizardPage.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaClassWizardPage.java
index a990666..b445c60 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaClassWizardPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaClassWizardPage.java
@@ -17,14 +17,9 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IClassFile;
-import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaConventions;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
@@ -33,12 +28,12 @@
 /**
  * @author mengbo
  */
-public class JavaClassWizardPage extends NewClassWizardPage {
+/*package*/ class JavaClassWizardPage extends NewClassWizardPage {
 	private String _className;
 
-	private IProject _project;
+	private final IProject _project;
 
-	private InitialClassProperties _initialValues;
+	private final InitialClassProperties _initialValues;
 
 	private IJavaProject _javaProject;
 
@@ -46,26 +41,23 @@
 
 	private final static String  SOURCE_COMPLIANCE_1_3 = JavaCore.VERSION_1_3;
 	
-	class InitialClassProperties {
+	static class InitialClassProperties {
 		// populate new wizard page
-		IType superClassType;
+		private String superClassName;
 
-		String superClassName;
+		private List interfacesName;
 
-		List interfacesName;
+		private String className;
 
-		String className;
+		private String classArgs;
 
-		String classArgs;
+		private String packageName;
 
-		String packageName;
+		private IPackageFragmentRoot packageFragmentRoot;
 
-		IPackageFragmentRoot packageFragmentRoot;
+		private IPackageFragment packageFragment;
 
-		IPackageFragment packageFragment;
-
-		public InitialClassProperties() {
-			this.superClassType = null;
+		InitialClassProperties() {
 			this.superClassName = ""; //$NON-NLS-1$
 			this.interfacesName = null;
 			this.className = null;
@@ -76,6 +68,12 @@
 		}
 	}
 
+	/**
+	 * @param project
+	 * @param className
+	 * @param superClassName
+	 * @param interfacesName
+	 */
 	public JavaClassWizardPage(IProject project, String className,
 			String superClassName, List interfacesName) {
 		super();
@@ -96,10 +94,17 @@
 		_initialValues.interfacesName = interfacesName;
 	}
 
+	/**
+	 * @param project
+	 * @param className
+	 */
 	public JavaClassWizardPage(IProject project, String className) {
 		this(project, className, null, null);
 	}
 
+	/**
+	 * Call when page is added to wizard to initialize
+	 */
 	public void init() {
 		initializeExpectedValues();
 		initializeWizardPage();
@@ -167,12 +172,15 @@
 			if (_initialValues.superClassName == null) {
 				_initialValues.superClassName = "java.lang.Object"; //$NON-NLS-1$
 			}
-			_initialValues.superClassType = findTypeForName(_initialValues.superClassName);
+//			_initialValues.superClassType = findTypeForName(_initialValues.superClassName);
 		} catch (JavaModelException e) {
 			e.printStackTrace();// PDEPlugin.logException(e);
 		}
 	}
 
+	/**
+	 * initialize the wizard page
+	 */
 	protected void initializeWizardPage() {
 		setPackageFragmentRoot(_initialValues.packageFragmentRoot, true);
 		setPackageFragment(_initialValues.packageFragment, true);
@@ -191,24 +199,24 @@
 				|| hasSuperClass, true);
 	}
 
-	private IType findTypeForName(String typeName) throws JavaModelException {
-		if (typeName == null || typeName.length() == 0) {
-			return null;
-		}
-		IType type = null;
-		String fileName = typeName.replace('.', '/') + ".java"; //$NON-NLS-1$
-		IJavaElement element = _javaProject.findElement(new Path(fileName));
-		if (element == null) {
-			return null;
-		}
-		if (element instanceof IClassFile) {
-			type = ((IClassFile) element).getType();
-		} else if (element instanceof ICompilationUnit) {
-			IType[] types = ((ICompilationUnit) element).getTypes();
-			type = types[0];
-		}
-		return type;
-	}
+//	private IType findTypeForName(String typeName) throws JavaModelException {
+//		if (typeName == null || typeName.length() == 0) {
+//			return null;
+//		}
+//		IType type = null;
+//		String fileName = typeName.replace('.', '/') + ".java"; //$NON-NLS-1$
+//		IJavaElement element = _javaProject.findElement(new Path(fileName));
+//		if (element == null) {
+//			return null;
+//		}
+//		if (element instanceof IClassFile) {
+//			type = ((IClassFile) element).getType();
+//		} else if (element instanceof ICompilationUnit) {
+//			IType[] types = ((ICompilationUnit) element).getTypes();
+//			type = types[0];
+//		}
+//		return type;
+//	}
 
 	/*
 	 * (non-Javadoc)
@@ -228,6 +236,9 @@
 		}
 	}
 
+	/**
+	 * @return the class arguments or "" if not set
+	 */
 	public String getClassArgs() {
 		if (_initialValues.classArgs == null) {
 			return ""; //$NON-NLS-1$
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaSearchScope.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaSearchScope.java
index 0cbcfe4..8ac5807 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaSearchScope.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaSearchScope.java
@@ -30,10 +30,10 @@
 /**
  * @author mengbo
  */
-public class JavaSearchScope implements IJavaSearchScope {
-	private IProject _project;
+/*package*/ class JavaSearchScope implements IJavaSearchScope {
+	private final IProject _project;
 
-	private String _superType;
+	private final String _superType;
 
 	private HashSet _allowedTypeSet;
 
@@ -41,6 +41,10 @@
 
 	private IProject[] _relativeProjects;
 
+	/**
+	 * @param project
+	 * @param superType
+	 */
 	public JavaSearchScope(IProject project, String superType) {
 		this._project = project;
 		this._superType = superType;
@@ -214,12 +218,4 @@
 	public String getSuperType() {
 		return _superType;
 	}
-
-	/**
-	 * @param superType
-	 *            The superType to set.
-	 */
-	public void setSuperType(String superType) {
-		this._superType = superType;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaSearchScopeDecorator.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaSearchScopeDecorator.java
index 25ff03d..94cd55c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaSearchScopeDecorator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaSearchScopeDecorator.java
@@ -26,9 +26,13 @@
  * @author mengbo
  * @version 1.5
  */
-public class JavaSearchScopeDecorator implements IJavaSearchScope {
+/*package*/ class JavaSearchScopeDecorator implements IJavaSearchScope {
 	JavaSearchScope[] _scopes = new JavaSearchScope[0];
 
+	/**
+	 * @param project
+	 * @param superTypes
+	 */
 	public JavaSearchScopeDecorator(IProject project, List superTypes) {
 		List scopeList = new ArrayList();
 		if (superTypes != null) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaUIHelper.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaUIHelper.java
index 4847fb8..f3130f1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaUIHelper.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/JavaUIHelper.java
@@ -22,7 +22,6 @@
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.core.search.SearchEngine;
-import org.eclipse.jdt.ui.IJavaElementSearchConstants;
 import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jst.jsf.common.ui.JSFUICommonPlugin;
@@ -36,8 +35,12 @@
 /**
  * @author mengbo
  */
-public class JavaUIHelper {
-	public static void doOpenClass(IProject project, String className) {
+public final class JavaUIHelper {
+	/**
+	 * @param project
+	 * @param className
+	 */
+	static void doOpenClass(IProject project, String className) {
 		String path = className.replace('.', '/') + ".java"; //$NON-NLS-1$
 		try {
 			if (project.hasNature(JavaCore.NATURE_ID)) {
@@ -46,7 +49,7 @@
 				JavaUI.openInEditor(result);
 			} else {
 				IResource resource = project.findMember(new Path(path));
-				if (resource != null && resource instanceof IFile) {
+				if (resource instanceof IFile) {
 					IWorkbenchPage page = PlatformUI.getWorkbench()
 							.getActiveWorkbenchWindow().getActivePage();
 					IDE.openEditor(page, (IFile) resource, true);
@@ -61,7 +64,12 @@
 		}
 	}
 
-	public static boolean doesClassExist(IProject project, String className) {
+	/**
+	 * @param project
+	 * @param className
+	 * @return true if the class exists in project
+	 */
+	static boolean doesClassExist(IProject project, String className) {
 		String path = className.replace('.', '/') + ".java"; //$NON-NLS-1$
 		try {
 			if (project.hasNature(JavaCore.NATURE_ID)) {
@@ -79,7 +87,13 @@
 		}
 	}
 
-	public static SelectionDialog openSelectionDialog(Shell shell,
+	/**
+	 * @param shell
+	 * @param searchScope
+	 * @param typeFlag
+	 * @return the selection dialog
+	 */
+	static SelectionDialog openSelectionDialog(Shell shell,
 			IJavaSearchScope searchScope, int typeFlag) {
 		try {
 			return JavaUI.createTypeDialog(shell, new ProgressMonitorDialog(
@@ -90,20 +104,25 @@
 		}
 	}
 
+	/**
+	 * @param shell
+	 * @param project
+	 * @param superType
+	 * @param typeFlag
+	 * @return the selection  dialog
+	 */
 	public static SelectionDialog openSelectionDialog(Shell shell,
 			IProject project, String superType, int typeFlag) {
 		IJavaSearchScope searchScope = findSearchScope(project, superType);
 		return openSelectionDialog(shell, searchScope, typeFlag);
 	}
 
-	public static SelectionDialog openSelectionDialog(Shell shell,
-			IProject project, String superType) {
-		IJavaSearchScope searchScope = findSearchScope(project, superType);
-		return openSelectionDialog(shell, searchScope,
-				IJavaElementSearchConstants.CONSIDER_ALL_TYPES);
-	}
-
-	public static IJavaSearchScope findSearchScope(IProject project,
+	/**
+	 * @param project
+	 * @param superType
+	 * @return the search scope
+	 */
+	static IJavaSearchScope findSearchScope(IProject project,
 			String superType) {
 		if (project != null) {
 			if (superType == null || "".equals(superType)) {
@@ -113,4 +132,9 @@
 		}
 		return SearchEngine.createWorkspaceScope();
 	}
+	
+	private JavaUIHelper()
+	{
+		// static helper, no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/LayoutUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/LayoutUtil.java
index 25e8280..2457cd1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/LayoutUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/LayoutUtil.java
@@ -17,161 +17,26 @@
 import org.eclipse.swt.graphics.FontMetrics;
 import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 
-public class LayoutUtil {
+/**
+ * A layout utility class
+ *
+ */
+public final class LayoutUtil {
 	// The Text control looks higher then Button control when they have the same
 	// height,
 	// Increasing the height of 5 pixels will make them looks the same height.
 	private final static int BUTTON_HEIGHT_ADJUSTMENT = 5;
 
-	public static Control createEmptySpace(FormToolkit kit, Composite parent,
-			int span) {
-		Label label;
-		if (kit != null) {
-			label = kit.createLabel(parent, "");
-		} else {
-			label = new Label(parent, SWT.LEFT);
-		}
-		GridData gd = new GridData();
-		gd.horizontalAlignment = GridData.BEGINNING;
-		gd.grabExcessHorizontalSpace = false;
-		gd.horizontalSpan = span;
-		gd.horizontalIndent = 0;
-		gd.widthHint = 0;
-		gd.heightHint = 0;
-		label.setLayoutData(gd);
-		return label;
-	}
-
-	public static Composite createComposite(FormToolkit kit, Composite parent,
-			int span, int internalSpan) {
-		Composite c;
-		if (kit != null) {
-			c = kit.createComposite(parent);
-			kit.paintBordersFor(c);
-		} else {
-			c = new Composite(parent, SWT.NONE);
-		}
-		GridData gd = new GridData();
-		gd.grabExcessHorizontalSpace = true;
-		gd.horizontalSpan = span;
-		gd.horizontalIndent = 0;
-		c.setLayoutData(gd);
-
-		GridLayout layout = new GridLayout();
-		layout.numColumns = internalSpan;
-		c.setLayout(layout);
-
-		return c;
-	}
 
 	/**
-	 * Calculates the number of columns needed by field editors
+	 * @param control
+	 * @param grab
 	 */
-	public static int getNumberOfColumns(DialogField[] editors) {
-		int nCulumns = 0;
-		for (int i = 0; i < editors.length; i++) {
-			nCulumns = Math.max(editors[i].getNumberOfControls(), nCulumns);
-		}
-		return nCulumns;
-	}
-
-	/**
-	 * Creates a composite and fills in the given editors.
-	 * 
-	 * @param labelOnTop
-	 *            Defines if the label of all fields should be on top of the
-	 *            fields
-	 */
-	public static void doDefaultLayout(FormToolkit toolkit, Composite parent,
-			DialogField[] editors, boolean labelOnTop) {
-		doDefaultLayout(toolkit, parent, editors, labelOnTop, 0, 0, 0, 0);
-	}
-
-	/**
-	 * Creates a composite and fills in the given editors.
-	 * 
-	 * @param labelOnTop
-	 *            Defines if the label of all fields should be on top of the
-	 *            fields
-	 * @param minWidth
-	 *            The minimal width of the composite
-	 * @param minHeight
-	 *            The minimal height of the composite
-	 */
-	public static void doDefaultLayout(FormToolkit toolkit, Composite parent,
-			DialogField[] editors, boolean labelOnTop, int minWidth,
-			int minHeight) {
-		doDefaultLayout(toolkit, parent, editors, labelOnTop, minWidth,
-				minHeight, 0, 0);
-	}
-
-	/**
-	 * Creates a composite and fills in the given editors.
-	 * 
-	 * @param labelOnTop
-	 *            Defines if the label of all fields should be on top of the
-	 *            fields
-	 * @param minWidth
-	 *            The minimal width of the composite
-	 * @param minHeight
-	 *            The minimal height of the composite
-	 * @param marginWidth
-	 *            The margin width to be used by the composite
-	 * @param marginHeight
-	 *            The margin height to be used by the composite
-	 * @deprecated
-	 */
-	public static void doDefaultLayout(FormToolkit toolkit, Composite parent,
-			DialogField[] editors, boolean labelOnTop, int minWidth,
-			int minHeight, int marginWidth, int marginHeight) {
-		int nCulumns = getNumberOfColumns(editors);
-		Control[][] controls = new Control[editors.length][];
-		for (int i = 0; i < editors.length; i++) {
-			controls[i] = editors[i].doFillIntoGrid(toolkit, parent, nCulumns);
-		}
-		if (labelOnTop) {
-			nCulumns--;
-			modifyLabelSpans(controls, nCulumns);
-		}
-		GridLayout layout = new GridLayout();
-		if (marginWidth != SWT.DEFAULT) {
-			layout.marginWidth = marginWidth;
-		}
-		if (marginHeight != SWT.DEFAULT) {
-			layout.marginHeight = marginHeight;
-		}
-		layout.numColumns = nCulumns;
-		parent.setLayout(layout);
-	}
-
-	private static void modifyLabelSpans(Control[][] controls, int nCulumns) {
-		for (int i = 0; i < controls.length; i++) {
-			setHorizontalSpan(controls[i][0], nCulumns);
-		}
-	}
-
-	/**
-	 * Sets the span of a control. Assumes that GridData is used.
-	 */
-	public static void setHorizontalSpan(Control control, int span) {
-		Object ld = control.getLayoutData();
-		if (ld instanceof GridData) {
-			((GridData) ld).horizontalSpan = span;
-		} else if (span != 1) {
-			GridData gd = new GridData();
-			gd.horizontalSpan = span;
-			control.setLayoutData(gd);
-		}
-	}
-
 	public static void setGrabHorizontal(Control control, boolean grab) {
 		Object ld = control.getLayoutData();
 		if (ld instanceof GridData) {
@@ -181,6 +46,8 @@
 
 	/**
 	 * Sets the width hint of a control. Assumes that GridData is used.
+	 * @param control 
+	 * @param widthHint 
 	 */
 	public static void setWidthHint(Control control, int widthHint) {
 		Object ld = control.getLayoutData();
@@ -189,20 +56,13 @@
 		}
 	}
 
-	/**
-	 * Sets the heigthHint hint of a control. Assumes that GridData is used.
-	 */
-	public static void setHeigthHint(Control control, int heigthHint) {
-		Object ld = control.getLayoutData();
-		if (ld instanceof GridData) {
-			((GridData) ld).heightHint = heigthHint;
-		}
-	}
 
 	/**
 	 * Sets the horizontal indent of a control. Assumes that GridData is used.
+	 * @param control 
+	 * @param horizontalIndent 
 	 */
-	public static void setHorizontalIndent(Control control, int horizontalIndent) {
+	static void setHorizontalIndent(Control control, int horizontalIndent) {
 		Object ld = control.getLayoutData();
 		if (ld instanceof GridData) {
 			((GridData) ld).horizontalIndent = horizontalIndent;
@@ -211,6 +71,7 @@
 
 	/**
 	 * Sets the horizontal indent of a control. Assumes that GridData is used.
+	 * @param control 
 	 */
 	public static void setHorizontalGrabbing(Control control) {
 		Object ld = control.getLayoutData();
@@ -221,8 +82,10 @@
 
 	/**
 	 * Returns a width hint for a button control.
+	 * @param button 
+	 * @return the hint value
 	 */
-	public static int getButtonWidthHint(Button button) {
+	static int getButtonWidthHint(Button button) {
 		if (button.getFont().equals(JFaceResources.getDefaultFont()))
 			button.setFont(JFaceResources.getDialogFont());
 
@@ -238,11 +101,16 @@
 				true).x);
 	}
 
-	public static int getButtonHeightHint(FormToolkit toolkit, Text text) {
+	static int getButtonHeightHint(FormToolkit toolkit, Text text) {
 		if (toolkit != null) {
 			return text.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y
 					+ BUTTON_HEIGHT_ADJUSTMENT;
 		}
         return text.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y;
 	}
+	
+	private LayoutUtil()
+	{
+		// static utility class; no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/LocaleComboDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/LocaleComboDialogField.java
deleted file mode 100644
index 0c7c6a1..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/LocaleComboDialogField.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.jsf.common.ui.internal.dialogfield;
-
-import java.util.Arrays;
-import java.util.Locale;
-
-
-/**
- * @author mengbo
- */
-public class LocaleComboDialogField extends ComboDialogField {
-	private static String[] items;
-	static {
-		Locale[] locales = Locale.getAvailableLocales();
-		items = new String[locales.length + 1];
-		for (int i = 0, n = locales.length; i < n; i++) {
-			items[i] = locales[i].toString();
-		}
-		items[locales.length] = "";
-		Arrays.sort(items);
-	}
-
-	/**
-	 * @param flags
-	 */
-	public LocaleComboDialogField(int flags) {
-		super(flags);
-		setItems(items);
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/MultiTypeButtonDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/MultiTypeButtonDialogField.java
deleted file mode 100644
index 7aa792e..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/MultiTypeButtonDialogField.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.jsf.common.ui.internal.dialogfield;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jdt.core.search.IJavaSearchScope;
-
-/**
- * @author mengbo
- * @version 1.5
- */
-public class MultiTypeButtonDialogField extends AbstractClassButtonDialogField {
-	IJavaSearchScope _scope;
-
-	/**
-	 * @param project
-	 */
-	public MultiTypeButtonDialogField(IProject project) {
-		super(project);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.AbstractClassButtonDialogField#getJavaSearchScope()
-	 */
-	protected IJavaSearchScope getJavaSearchScope() {
-		if (_scope == null) {
-			List list = new ArrayList();
-			String superClassName = getSuperClassName();
-			if (superClassName != null && !"".equalsIgnoreCase(superClassName)) {
-				list.add(getSuperClassName());
-			}
-			list.addAll(getInterfacesList());
-			_scope = new JavaSearchScopeDecorator(this.getProject(), list);
-		}
-		return _scope;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.AbstractClassButtonDialogField#getImplementInterfaces()
-	 */
-	protected List getImplementInterfaces() {
-		List list = getInterfacesList();
-		if (list.size() == 1) {
-			return list;
-		}
-		return Collections.EMPTY_LIST;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.AbstractClassButtonDialogField#setProject(org.eclipse.core.resources.IProject)
-	 */
-	public void setProject(IProject project) {
-		if (project != getProject()) {
-			_scope = null;
-		}
-		super.setProject(project);
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/NumberDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/NumberDialogField.java
deleted file mode 100644
index 8755c5a..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/NumberDialogField.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.jsf.common.ui.internal.dialogfield;
-
-import org.eclipse.swt.events.VerifyEvent;
-import org.eclipse.swt.events.VerifyListener;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
-/**
- * The text input only allows numbers
- * 
- * @author mengbo
- * @version 1.5
- */
-public class NumberDialogField extends StringDialogField {
-	public Control[] doFillIntoGrid(FormToolkit kit, Composite parent,
-			int nColumns) {
-		Control[] controls = super.doFillIntoGrid(kit, parent, nColumns);
-
-		getTextControl(kit, parent).addVerifyListener(new VerifyListener() {
-			public void verifyText(VerifyEvent e) {
-				String str = ((Text) e.getSource()).getText();
-				String newString = str.substring(0, e.start) + e.text
-						+ str.substring(e.end, str.length());
-				String regExpression = "^[1-9][0-9]*";
-				e.doit = (newString.length() == 0 || newString
-						.matches(regExpression));
-			}
-		});
-
-		return controls;
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/PackageButtonDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/PackageButtonDialogField.java
deleted file mode 100644
index 2238352..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/PackageButtonDialogField.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.jsf.common.ui.internal.dialogfield;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IPackageFragment;
-import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.core.JavaConventions;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-//import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
-import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jst.jsf.common.ui.JSFUICommonPlugin;
-import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
-import org.eclipse.ui.dialogs.ElementListSelectionDialog;
-
-/**
- * This dialog field is used to select the package in the IPackageFragmentRoot
- * 
- * 
- * @author mengbo
- * @version 1.5
- */
-public class PackageButtonDialogField extends StringButtonDialogField {
-	/** Create the logger for this class */
-	private static Logger _log = JSFUICommonPlugin
-			.getLogger(PackageButtonDialogField.class);
-
-	/*
-	 * package fragment root corresponding to the input type (can be null)
-	 */
-	private IPackageFragmentRoot _fCurrRoot;
-
-	private IPackageFragment _fCurrPackage;
-
-    private final static String  SOURCE_COMPLIANCE_1_3 = JavaCore.VERSION_1_3;
-    
-	/**
-	 * @param packageRoot 
-	 */
-	public PackageButtonDialogField(IPackageFragmentRoot packageRoot) {
-		super(null);
-		setPackageFragmentRoot(packageRoot);
-
-		setLabelText(DialogFieldResources.getInstance().getString(
-				"PackageButtonDialogField.package.label"));
-
-		setButtonLabel(DialogFieldResources.getInstance().getString(
-				"PackageButtonDialogField.package.button"));
-
-		setStringButtonAdapter(new IStringButtonAdapter() {
-			public void changeControlPressed(DialogField field) {
-				packageChangeControlPressed(field);
-			}
-
-		});
-
-	}
-
-	/**
-	 * @param field
-	 */
-	protected void packageChangeControlPressed(DialogField field) {
-		IPackageFragment pack = choosePackage();
-		if (pack != null) {
-			setPackageFragment(pack, true);
-		}
-	}
-
-	/**
-	 * Sets the current source folder (model and text field) to the given
-	 * package fragment root.
-	 * 
-	 * @param root
-	 *            The new root.
-	 */
-	public void setPackageFragmentRoot(IPackageFragmentRoot root) {
-		_fCurrRoot = root;
-		enableButton(getPackageFragmentRoot() != null);
-	}
-
-	/**
-	 * Returns the <code>IPackageFragmentRoot</code> that corresponds to the
-	 * current value of the source folder field.
-	 * 
-	 * @return the IPackageFragmentRoot or <code>null</code> if the current
-	 *         source folder value is not a valid package fragment root
-	 * 
-	 */
-	public IPackageFragmentRoot getPackageFragmentRoot() {
-		return _fCurrRoot;
-	}
-
-	/**
-	 * selection dialogs
-	 */
-	private IPackageFragment choosePackage() {
-		IPackageFragmentRoot froot = getPackageFragmentRoot();
-		IJavaElement[] packages = null;
-		try {
-			if (froot != null && froot.exists()) {
-				packages = froot.getChildren();
-			}
-		} catch (JavaModelException e) {
-			_log.error(e);
-		}
-		if (packages == null) {
-			packages = new IJavaElement[0];
-		}
-
-		ElementListSelectionDialog dialog = new ElementListSelectionDialog(
-				getShell(), new JavaElementLabelProvider(
-						JavaElementLabelProvider.SHOW_DEFAULT));
-		dialog.setIgnoreCase(false);
-		dialog.setTitle(DialogFieldResources.getInstance().getString(
-				"PackageButtonDialogField.ChoosePackageDialog.title")); //$NON-NLS-1$
-		dialog.setMessage(DialogFieldResources.getInstance().getString(
-				"PackageButtonDialogField.ChoosePackageDialog.description")); //$NON-NLS-1$
-		dialog
-				.setEmptyListMessage(DialogFieldResources
-						.getInstance()
-						.getString(
-								"PackageButtonDialogField.ChoosePackageDialog.empty")); //$NON-NLS-1$
-		dialog.setElements(packages);
-		IPackageFragment pack = getPackageFragment();
-		if (pack != null) {
-			dialog.setInitialSelections(new Object[] { pack });
-		}
-
-		if (dialog.open() == Window.OK) {
-			return (IPackageFragment) dialog.getFirstResult();
-		}
-		return null;
-	}
-
-	/**
-	 * Returns the package fragment corresponding to the current input.
-	 * 
-	 * @return a package fragment or <code>null</code> if the input could not
-	 *         be resolved.
-	 */
-	public IPackageFragment getPackageFragment() {
-		return _fCurrPackage;
-	}
-
-	/**
-	 * Sets the package fragment to the given value. The method updates the
-	 * model and the text of the control.
-	 * 
-	 * @param pack
-	 *            the package fragment to be set
-	 * @param canBeModified
-	 *            if <code>true</code> the package fragment is editable;
-	 *            otherwise it is read-only.
-	 */
-	public void setPackageFragment(IPackageFragment pack, boolean canBeModified) {
-		_fCurrPackage = pack;
-		String str = (pack == null) ? "" : pack.getElementName(); //$NON-NLS-1$
-		setText(str);
-		setEnabled(canBeModified);
-	}
-
-	/**
-	 * Returns the text of the package input field.
-	 * 
-	 * @return the text of the package input field
-	 */
-	public String getPackageText() {
-		return getText();
-	}
-
-	/**
-	 * The method validates the package name and returns the status of the
-	 * validation. The validation also updates the package fragment model.
-	 * 
-	 * @return the status of the validation
-	 */
-	public IStatus getChangedStatus() {
-		StatusInfo status = new StatusInfo();
-
-		String packName = getPackageText();
-		if (packName.length() > 0) {
-			IStatus val = JavaConventions.validatePackageName(packName,SOURCE_COMPLIANCE_1_3,SOURCE_COMPLIANCE_1_3);
-			if (val.getSeverity() == IStatus.ERROR) {
-				status
-						.setError(DialogFieldResources
-								.getInstance()
-								.getString(
-										"PackageButtonDialogField.error.InvalidPackageName", val.getMessage())); //$NON-NLS-1$
-				return status;
-			} else if (val.getSeverity() == IStatus.WARNING) {
-				status
-						.setWarning(DialogFieldResources
-								.getInstance()
-								.getString(
-										"PackageButtonDialogField.warning.DiscouragedPackageName", val.getMessage())); //$NON-NLS-1$
-				// continue
-			}
-		} else {
-			status
-					.setWarning(DialogFieldResources
-							.getInstance()
-							.getString(
-									"PackageButtonDialogField.warning.DefaultPackageDiscouraged")); //$NON-NLS-1$
-		}
-
-		IPackageFragmentRoot root = getPackageFragmentRoot();
-		if (root != null) {
-			if (root.getJavaProject().exists() && packName.length() > 0) {
-				try {
-					IPath rootPath = root.getPath();
-					IPath outputPath = root.getJavaProject()
-							.getOutputLocation();
-					if (rootPath.isPrefixOf(outputPath)
-							&& !rootPath.equals(outputPath)) {
-						// if the bin folder is inside of our root, don't allow
-						// to name a package
-						// like the bin folder
-						IPath packagePath = rootPath.append(packName.replace(
-								'.', '/'));
-						if (outputPath.isPrefixOf(packagePath)) {
-							status
-									.setError(DialogFieldResources
-											.getInstance()
-											.getString(
-													"PackageButtonDialogField.error.ClashOutputLocation")); //$NON-NLS-1$
-							return status;
-						}
-					}
-				} catch (JavaModelException e) {
-					_log.error(e);
-					// let pass
-				}
-			}
-
-			_fCurrPackage = root.getPackageFragment(packName);
-		} else {
-			status.setError(""); //$NON-NLS-1$
-		}
-		return status;
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/RadiosDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/RadiosDialogField.java
index cfe52bc..3a6aa5c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/RadiosDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/RadiosDialogField.java
@@ -89,6 +89,10 @@
 		return 3;
 	}
 
+	/**
+	 * @param span
+	 * @return the grid data
+	 */
 	protected static GridData gridDataForGroup(int span) {
 		GridData gd = new GridData();
 		gd.horizontalAlignment = GridData.FILL;
@@ -111,8 +115,13 @@
 
 	// ------- ui creation
 
+	/**
+	 * @param toolkit
+	 * @param parent
+	 * @return the group composite
+	 */
 	public Composite getGroup(FormToolkit toolkit, Composite parent) {
-		if (_group == null) {
+		if (_group == null || _group.isDisposed()) {
 			assertCompositeNotNull(parent);
 			if (toolkit != null) {
 				_group = toolkit.createComposite(parent);
@@ -167,6 +176,7 @@
 
 	/**
 	 * Sets the text. Triggers a dialog-changed event.
+	 * @param index 
 	 */
 	public void setSelectedIndex(int index) {
 		_selectIndex = index;
@@ -186,6 +196,7 @@
 
 	/**
 	 * Sets the text without triggering a dialog-changed event.
+	 * @param index 
 	 */
 	public void setSelectedIndexWithoutUpdate(int index) {
 		_selectIndex = index;
@@ -204,6 +215,9 @@
 		}
 	}
 
+	/**
+	 * @return the index selected
+	 */
 	public int getSelectedIndex() {
 		return _selectIndex;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ResourceButtonDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ResourceButtonDialogField.java
index 0ef4993..0fac773 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ResourceButtonDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/ResourceButtonDialogField.java
@@ -54,6 +54,9 @@
 
 	private String _separator = "";
 
+	/**
+	 * @param project
+	 */
 	public ResourceButtonDialogField(IProject project) {
 		this(null, project);
 		setStringButtonAdapter(new IStringButtonAdapter() {
@@ -67,19 +70,26 @@
 		});
 	}
 
+	/**
+	 * @param adapter
+	 * @param project
+	 */
 	public ResourceButtonDialogField(IStringButtonAdapter adapter,
 			IProject project) {
 		super(adapter);
 		this._project = project;
 	}
 
+	/**
+	 * @return the string
+	 */
 	protected String browseButtonPressed() {
 		Shell shell = getShell();
 		CommonResourceDialog dialog = null;
 		int style = "".equals(_separator) ? SWT.NONE : SWT.MULTI | SWT.H_SCROLL
 				| SWT.V_SCROLL;
 		if (_folder != null) {
-			dialog = new CommonResourceDialog(shell, _folder, style);
+			dialog = new CommonResourceDialog(shell, _folder.getProject(), style);
 		} else {
 			dialog = new CommonResourceDialog(shell, _project, style);
 		}
@@ -205,14 +215,16 @@
 		this._isWebPath = isWebPath;
 	}
 
-	public boolean isWebPath() {
-		return _isWebPath;
-	}
-
+	/**
+	 * @return the separator string
+	 */
 	public String getSeparator() {
 		return _separator;
 	}
 
+	/**
+	 * @param separator
+	 */
 	public void setSeparator(String separator) {
 		this._separator = separator;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/Separator.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/Separator.java
index 9b74c01..f54722a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/Separator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/Separator.java
@@ -27,6 +27,9 @@
 
 	private int _style;
 
+	/**
+	 * Default constructor
+	 */
 	public Separator() {
 		this(SWT.NONE);
 	}
@@ -44,9 +47,13 @@
 
 	/**
 	 * Creates the separator and fills it in a MGridLayout.
+	 * @param toolkit 
+	 * @param parent 
+	 * @param nColumns 
 	 * 
 	 * @param height
 	 *            The heigth of the separator
+	 * @return the controls or empty array
 	 */
 	public Control[] doFillIntoGrid(FormToolkit toolkit, Composite parent,
 			int nColumns, int height) {
@@ -73,6 +80,11 @@
 		return 1;
 	}
 
+	/**
+	 * @param span
+	 * @param height
+	 * @return the grid data
+	 */
 	protected static GridData gridDataForSeperator(int span, int height) {
 		GridData gd = new GridData();
 		gd.horizontalAlignment = GridData.FILL;
@@ -86,13 +98,15 @@
 
 	/**
 	 * Creates or returns the created separator.
+	 * @param toolkit 
 	 * 
 	 * @param parent
 	 *            The parent composite or <code>null</code> if the widget has
 	 *            already been created.
+	 * @return  the separator
 	 */
-	public Control getSeparator(FormToolkit toolkit, Composite parent) {
-		if (_separator == null) {
+	private Control getSeparator(FormToolkit toolkit, Composite parent) {
+		if (_separator == null || _separator.isDisposed()) {
 			assertCompositeNotNull(parent);
 			if (toolkit != null) {
 				_separator = toolkit.createSeparator(parent, _style);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/SourceFolderButtonDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/SourceFolderButtonDialogField.java
index 03f9b12..1cef181 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/SourceFolderButtonDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/SourceFolderButtonDialogField.java
@@ -24,8 +24,8 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.ui.JavaElementComparator;
 import org.eclipse.jdt.ui.JavaElementLabelProvider;
-import org.eclipse.jdt.ui.JavaElementSorter;
 import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.Viewer;
@@ -200,7 +200,7 @@
 		ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(
 				getShell(), labelProvider, provider);
 		dialog.setValidator(validator);
-		dialog.setSorter(new JavaElementSorter());
+		dialog.setComparator(new JavaElementComparator());
 		// HibernateWizardPage.ChooseSourceContainerDialog.Title = Folder
 		// Selection
 		dialog
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StatusInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StatusInfo.java
index c784b96..8a8c9b7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StatusInfo.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StatusInfo.java
@@ -19,11 +19,16 @@
  * A settable IStatus. Can be an error, warning, info or ok. For error, info and
  * warning states, a message describes the problem.
  * 
+ * TODO: couldn't have sub-classed Status?
+ * 
  * @author mengbo
  * @version 1.5
  */
-public class StatusInfo implements IStatus {
+/*package*/ class StatusInfo implements IStatus {
 
+	/**
+	 * a default status info for IStatus.OK
+	 */
 	public static final IStatus OK_STATUS = new StatusInfo();
 
 	private String fStatusMessage;
@@ -60,6 +65,7 @@
 
 	/**
 	 * Returns if the status' severity is WARNING.
+	 * @return true if severity is IStatus.WARNING
 	 */
 	public boolean isWarning() {
 		return fSeverity == IStatus.WARNING;
@@ -67,6 +73,7 @@
 
 	/**
 	 * Returns if the status' severity is INFO.
+	 * @return true if severity is INFO
 	 */
 	public boolean isInfo() {
 		return fSeverity == IStatus.INFO;
@@ -74,6 +81,7 @@
 
 	/**
 	 * Returns if the status' severity is ERROR.
+	 * @return true if severity is error
 	 */
 	public boolean isError() {
 		return fSeverity == IStatus.ERROR;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StatusUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StatusUtil.java
index 6c65dc0..22fe6d8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StatusUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StatusUtil.java
@@ -27,6 +27,8 @@
 	 * returned: An error is more severe than a warning, and a warning is more
 	 * severe than ok. If the two stati have the same severity, the second is
 	 * returned.
+	 * @param s1 
+	 * @param s2 
 	 * 
 	 * @return Could be null.
 	 */
@@ -47,6 +49,7 @@
 	/**
 	 * Finds the most severe status from a array of stati. An error is more
 	 * severe than a warning, and a warning is more severe than ok.
+	 * @param status 
 	 * 
 	 * @return could be null
 	 */
@@ -76,6 +79,8 @@
 
 	/**
 	 * Applies the status to the status line of a dialog page.
+	 * @param page 
+	 * @param status 
 	 */
 	public static void applyToStatusLine(DialogPage page, IStatus status) {
 		if (status == null) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StringButtonDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StringButtonDialogField.java
index 2afe1f9..4ff9eda 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StringButtonDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StringButtonDialogField.java
@@ -34,6 +34,9 @@
 
 	private boolean _buttonEnabled;
 
+	/**
+	 * @param adapter
+	 */
 	public StringButtonDialogField(IStringButtonAdapter adapter) {
 		_stringButtonAdapter = adapter;
 		_browseButtonLabel = JSFUICommonPlugin
@@ -43,6 +46,7 @@
 
 	/**
 	 * Sets the label of the button.
+	 * @param label 
 	 */
 	public void setButtonLabel(String label) {
 		_browseButtonLabel = label;
@@ -87,6 +91,13 @@
 		return 4;
 	}
 
+	/**
+	 * @param toolkit
+	 * @param button
+	 * @param text
+	 * @param span
+	 * @return the grid data for the button
+	 */
 	protected static GridData gridDataForButton(FormToolkit toolkit,
 			Button button, Text text, int span) {
 		GridData gd = new GridData();
@@ -103,13 +114,15 @@
 
 	/**
 	 * Creates or returns the created buttom widget.
+	 * @param toolkit 
 	 * 
 	 * @param parent
 	 *            The parent composite or <code>null</code> if the widget has
 	 *            already been created.
+	 * @return the button
 	 */
 	public Button getChangeControl(FormToolkit toolkit, Composite parent) {
-		if (_browseButton == null) {
+		if (_browseButton == null || _browseButton.isDisposed()) {
 			assertCompositeNotNull(parent);
 			if (toolkit != null) {
 				_browseButton = toolkit.createButton(parent,
@@ -137,6 +150,7 @@
 
 	/**
 	 * Sets the enable state of the button.
+	 * @param enable 
 	 */
 	public void enableButton(boolean enable) {
 		if (isOkToUse(_browseButton)) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StringDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StringDialogField.java
index 499ddbe..c00f3c6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StringDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StringDialogField.java
@@ -37,18 +37,25 @@
 
 	private ModifyListener _modifyListener;
 
-	private int _numRows = 1;
+	private int _numRows;
 
 	/**
 	 * whether there is change in the UI but not fire applied event yet.
 	 */
 	private boolean _pending = false;
 
+	/**
+	 * default constructor
+	 * numRows == 1
+	 */
 	public StringDialogField() {
-		super();
+		this(1);
 		_text = ""; //$NON-NLS-1$
 	}
 
+	/**
+	 * @param numRows
+	 */
 	public StringDialogField(int numRows) {
 		super();
 		_text = ""; //$NON-NLS-1$
@@ -93,6 +100,11 @@
 		return gd;
 	}
 
+	/**
+	 * @param span
+	 * @param heightHint
+	 * @return the grid data for text
+	 */
 	protected static GridData gridDataForText(int span, int heightHint) {
 		GridData gd = new GridData();
 		gd.horizontalAlignment = GridData.FILL;
@@ -103,6 +115,10 @@
 		return gd;
 	}
 
+	/**
+	 * @param span
+	 * @return the grid data for text
+	 */
 	protected static GridData gridDataForText(int span) {
 		GridData gd = gridDataForText(span, -1);
 		return gd;
@@ -125,13 +141,15 @@
 
 	/**
 	 * Creates or returns the created text control.
+	 * @param toolkit 
 	 * 
 	 * @param parent
 	 *            The parent composite or <code>null</code> when the widget
 	 *            has already been created.
+	 * @return the text control
 	 */
 	public Text getTextControl(FormToolkit toolkit, Composite parent) {
-		if (_textControl == null) {
+		if (_textControl == null || _textControl.isDisposed()) {
 			assertCompositeNotNull(parent);
 			_modifyListener = new ModifyListener() {
 				public void modifyText(ModifyEvent e) {
@@ -178,6 +196,9 @@
 		return _textControl;
 	}
 
+	/**
+	 * @param e
+	 */
 	protected void doKeyReleased(KeyEvent e) {
 		if (e.character == '\r') {
 			// commit value
@@ -188,6 +209,9 @@
 		}
 	}
 
+	/**
+	 * @param e
+	 */
 	protected void doFocusLost(FocusEvent e) {
 		if (_pending) {
 			_pending = false;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StyleComboDialogField.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StyleComboDialogField.java
index a2079e5..93c9332 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StyleComboDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/StyleComboDialogField.java
@@ -36,6 +36,10 @@
 import org.eclipse.ui.forms.FormColors;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 
+/**
+ * A dialog field for style combos
+ *
+ */
 public class StyleComboDialogField extends DialogFieldBase implements
 		ISupportTextValue {
 	final static private int WIDTH_HINT = 10;
@@ -58,14 +62,19 @@
 
 	private String _defaultValue;
 
-	public String getDefaultValue() {
-		return _defaultValue;
-	}
 
+	/**
+	 * @param defaultValue
+	 */
 	public void setDefaultValue(String defaultValue) {
 		this._defaultValue = defaultValue;
+		if (_comboControl != null && ! _comboControl.isDisposed())
+			_comboControl.setDefaultValue(_defaultValue);
 	}
 
+	/**
+	 * @param flags
+	 */
 	public StyleComboDialogField(int flags) {
 		super();
 		_text = ""; //$NON-NLS-1$
@@ -76,6 +85,7 @@
 
 	// ------- layout helpers
 
+
 	/*
 	 * @see DialogField#doFillIntoGrid
 	 */
@@ -102,6 +112,10 @@
 		return 3;
 	}
 
+	/**
+	 * @param span
+	 * @return the grid data for the combo
+	 */
 	protected static GridData gridDataForCombo(int span) {
 		GridData gd = new GridData();
 		gd.horizontalAlignment = GridData.FILL;
@@ -127,14 +141,16 @@
 
 	/**
 	 * Creates or returns the created combo control.
+	 * @param toolkit 
 	 * 
 	 * @param parent
 	 *            The parent composite or <code>null</code> when the widget
 	 *            has already been created.
+	 * @return the combo control
 	 */
 	public StyleCombo getComboControl(FormToolkit toolkit,
 			final Composite parent) {
-		if (_comboControl == null) {
+		if (_comboControl == null || _comboControl.isDisposed()) {
 			assertCompositeNotNull(parent);
 			_modifyListener = new ModifyListener() {
 				public void modifyText(ModifyEvent e) {
@@ -211,6 +227,9 @@
 		return _comboControl;
 	}
 
+	/**
+	 * @param e
+	 */
 	protected void handleDefaultSelection(SelectionEvent e) {
 		// commit value
 		if (_pending) {
@@ -219,6 +238,9 @@
 		}
 	}
 
+	/**
+	 * @param e
+	 */
 	protected void doFocusLost(FocusEvent e) {
 		if (_pending) {
 			_pending = false;
@@ -260,14 +282,8 @@
 	// ------ text access
 
 	/**
-	 * Gets the combo items.
-	 */
-	public String[] getItems() {
-		return _items;
-	}
-
-	/**
 	 * Sets the combo items. Triggers a dialog-changed event.
+	 * @param items 
 	 */
 	public void setItems(String[] items) {
 		_items = items;
@@ -278,6 +294,9 @@
 		// dialogFieldChangedAndApplied();
 	}
 
+	/**
+	 * @param map
+	 */
 	public void setEntryMap(Map map) {
 		this._entryMap = map;
 		if (_entryMap == null) {
@@ -309,6 +328,7 @@
 
 	/**
 	 * Selects an item.
+	 * @param index 
 	 */
 	public void selectItem(int index) {
 		if (isOkToUse(_comboControl)) {
@@ -322,6 +342,9 @@
 		dialogFieldChangedAndApplied();
 	}
 
+	/**
+	 * @return the selection index
+	 */
 	public int getSelectionIndex() {
 		return _selectionIndex;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/TypedElementSelectionValidator.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/TypedElementSelectionValidator.java
index 6ec055e..8d0e091 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/TypedElementSelectionValidator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/TypedElementSelectionValidator.java
@@ -24,7 +24,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class TypedElementSelectionValidator implements
+/*package*/ class TypedElementSelectionValidator implements
 		ISelectionStatusValidator {
 
 	private IStatus _fgErrorStatus = new StatusInfo(IStatus.ERROR, ""); //$NON-NLS-1$
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/TypedViewerFilter.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/TypedViewerFilter.java
index 584f99b..52ecb6a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/TypedViewerFilter.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogfield/TypedViewerFilter.java
@@ -22,7 +22,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class TypedViewerFilter extends ViewerFilter {
+/*package*/ class TypedViewerFilter extends ViewerFilter {
 
 	private Class[] _fAcceptedTypes;
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/CommonResourceDialog.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/CommonResourceDialog.java
index 48f5cb9..9af2a1c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/CommonResourceDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/CommonResourceDialog.java
@@ -134,15 +134,13 @@
 
 	// The default resource filter
 	class CommonResourceFilter extends ViewerFilter {
-		private String _suffixs[] = null;
-
-		Logger _log = JSFUICommonPlugin.getLogger(CommonResourceFilter.class);
+		private String _filterSuffixs[] = null;
 
 		/**
 		 * @return Returns the _suffixs.
 		 */
 		public String[] getSuffixs() {
-			return _suffixs;
+			return _filterSuffixs;
 		}
 
 		/**
@@ -150,7 +148,7 @@
 		 *            The _suffixs to set.
 		 */
 		public void setSuffixs(String[] _suffixs) {
-			this._suffixs = _suffixs;
+			this._filterSuffixs = _suffixs;
 		}
 
 		/*
@@ -170,7 +168,7 @@
 					return true;
 				}
 				if (file.getFileExtension() != null) {
-					if (Arrays.asList(_suffixs).contains(
+					if (Arrays.asList(_filterSuffixs).contains(
 							file.getFileExtension().toLowerCase())) {
 						return true;
 					}
@@ -209,6 +207,7 @@
 	 * 
 	 * @param parentShell
 	 * @param project
+	 * @param style 
 	 */
 	public CommonResourceDialog(Shell parentShell, IProject project, int style) {
 		super(parentShell, "", style);
@@ -226,26 +225,17 @@
 		setStatusMessage(getStatusMessage());
 	}
 
+	/**
+	 * Same as CommonResourceDialog(parentShell, project, SWT.NONE)
+	 * 
+	 * @param parentShell
+	 * @param project
+	 */
 	public CommonResourceDialog(Shell parentShell, IProject project) {
 		this(parentShell, project, SWT.NONE);
 	}
 
-	/**
-	 * This is a dialog for common resource selection, the resouce supported
-	 * include IFolder, IProject, IFile, user can provide
-	 * 
-	 * @param parentShell
-	 * @param folder 
-	 * @param style 
-	 */
-	public CommonResourceDialog(Shell parentShell, IFolder folder, int style) {
-		this(parentShell, (folder == null ? null : folder.getProject()), style);
-
-		_folder = folder;
-
-	}
-
-	protected String getStatusMessage() {
+	private String getStatusMessage() {
 		if (_resourceDescription == null) {
 			return "";
 		}
@@ -339,11 +329,6 @@
 		return null;
 	}
 
-	public void setFilter(String[] suffixs, String sourceDescription) {
-		setSuffixs(suffixs);
-		setResourceDescription(sourceDescription);
-	}
-
 	/**
 	 * @return Returns the sourceDescription.
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/CommonWizardDialog.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/CommonWizardDialog.java
index 63202d9..3fd719c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/CommonWizardDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/CommonWizardDialog.java
@@ -17,8 +17,17 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Shell;
 
+/**
+ * Wizard Dialog with a Finish set to OK if no previous
+ * or next buttons are needed
+ *
+ */
 public class CommonWizardDialog extends WizardDialog {
 
+	/**
+	 * @param parentShell
+	 * @param newWizard
+	 */
 	public CommonWizardDialog(Shell parentShell, IWizard newWizard) {
 		super(parentShell, newWizard);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/ResourceOnClasspathDialog.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/ResourceOnClasspathDialog.java
index 77d802d..84409ca 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/ResourceOnClasspathDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/ResourceOnClasspathDialog.java
@@ -20,10 +20,10 @@
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IJarEntryResource;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.core.JarEntryFile;
 import org.eclipse.jdt.ui.JavaElementLabelProvider;
 import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
 import org.eclipse.jface.viewers.Viewer;
@@ -62,6 +62,9 @@
 	class ResourceOnClasspathFilter extends ViewerFilter {
 		StandardJavaElementContentProvider _javaContentProvider;
 
+		/**
+		 * @param contentProvider
+		 */
 		public ResourceOnClasspathFilter(
 				StandardJavaElementContentProvider contentProvider) {
 			_javaContentProvider = contentProvider;
@@ -124,9 +127,9 @@
 				}
 				return false;
 			}
-			// XXX: JarEntryFile is for internal use.
-			if (element instanceof JarEntryFile) {
-				String ext = ((JarEntryFile) element).getFullPath()
+
+			if (element instanceof IJarEntryResource) {
+				String ext = ((IJarEntryResource) element).getFullPath()
 						.getFileExtension();
 				if (ext != null && Arrays.asList(_suffixs).contains(ext)) {
 					return true;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/TreeViewerSelectionDialog.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/TreeViewerSelectionDialog.java
index 4923533..7e3ac8d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/TreeViewerSelectionDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/dialogs/TreeViewerSelectionDialog.java
@@ -60,11 +60,11 @@
 	/** Used to tag the image type */
 	public static final int STYLE_NONE = 0;
 
-	public static final int STYLE_INFORMATION = 1;
+	private static final int STYLE_INFORMATION = 1;
 
-	public static final int STYLE_ERROR = 2;
+	private static final int STYLE_ERROR = 2;
 
-	public static final int STYLE_WARNING = 3;
+	private static final int STYLE_WARNING = 3;
 
 	/** Sizi of the TreeViewer composite */
 	private static final int SIZING_SELECTION_PANE_HEIGHT = 300;
@@ -100,6 +100,8 @@
 
 	/**
 	 * @param parentShell
+	 * @param statusMessage 
+	 * @param style 
 	 */
 	public TreeViewerSelectionDialog(Shell parentShell, String statusMessage,
 			int style) {
@@ -110,6 +112,12 @@
 				| SWT.APPLICATION_MODAL | SWT.RESIZE);
 	}
 
+	/**
+	 * Convenience for TreeViewerSelectionDialog(parentShell, statusMessage, SWT.NONE)
+	 * 
+	 * @param parentShell
+	 * @param statusMessage
+	 */
 	public TreeViewerSelectionDialog(Shell parentShell, String statusMessage) {
 		this(parentShell, statusMessage, SWT.NONE);
 	}
@@ -174,8 +182,9 @@
 
 	/**
 	 * Creates the contents of the composite.
+	 * @param parent 
 	 */
-	public void createTreeViewerComposite(Composite parent) {
+	protected void createTreeViewerComposite(Composite parent) {
 		Composite treeViewerComposite = new Composite(parent, SWT.NONE);
 		GridLayout layout = new GridLayout();
 		layout.marginWidth = 0;
@@ -277,6 +286,9 @@
 		_viewerSorter = sorter;
 	}
 
+	/**
+	 * @param message
+	 */
 	public void setStatusMessage(String message) {
 		_statusMessage = message;
 	}
@@ -305,6 +317,7 @@
 
 	/**
 	 * Get the different message according the message type.
+	 * @param imageType 
 	 * 
 	 * @return Image - the message image
 	 */
@@ -348,7 +361,15 @@
 		return control;
 	}
 
+	/**
+	 * @param selection
+	 * @return true if selection is valid
+	 */
 	protected abstract boolean isValidSelection(Object selection);
 
+	/**
+	 * Used to set the input element on the tree viewer
+	 * @return the input element
+	 */
 	protected abstract Object findInputElement();
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/Alerts.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/Alerts.java
index c416e71..40e28cc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/Alerts.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/Alerts.java
@@ -42,7 +42,7 @@
 public class Alerts {
 	// this is used for junit testing to turn off all alerts and return the
 	// default on yes/no dialogs.
-	public static boolean _noAlerts = false;
+	private static boolean _noAlerts = false;
 
 	private ResourceBundle _rb;
 
@@ -660,8 +660,10 @@
 	 * Returns the standard display to be used. The method first checks, if the
 	 * thread calling this method has an associated dispaly. If so, this display
 	 * is returned. Otherwise the method returns the default display.
+	 * 
+	 * TODO: should probably use the workbench display
 	 */
-	public Display getStandardDisplay() {
+	private Display getStandardDisplay() {
 		Display display = Display.getCurrent();
 		if (display == null) {
 			display = Display.getDefault();
@@ -672,7 +674,7 @@
 	/**
 	 * Returns the string from the resource bundle, or 'key' if not found.
 	 */
-	public String getResourceString(String key) {
+	private String getResourceString(String key) {
 		if (key == null) {
 			return null;
 		}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/BrowserWindow.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/BrowserWindow.java
index 95b02c4..ae80858 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/BrowserWindow.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/BrowserWindow.java
@@ -46,38 +46,36 @@
 	/**
 	 * Command to send to the browser.
 	 */
-	public static final int BROWSER_CMD_BACK = 1;
+	private static final int BROWSER_CMD_BACK = 1;
 
-	public static final int BROWSER_CMD_FORWARD = 2;
+	private static final int BROWSER_CMD_FORWARD = 2;
 
-	public static final int BROWSER_CMD_STOP = 3;
+	private static final int BROWSER_CMD_STOP = 3;
 
-	public static final int BROWSER_CMD_REFRESH = 4;
+	private static final int BROWSER_CMD_REFRESH = 4;
 
-	public static final int BROWSER_CMD_RELOAD = 5;
+	private static final int BROWSER_CMD_RELOAD = 5;
 
-	protected boolean _bIncludeToolbar;
+	private boolean _bIncludeToolbar;
 
-	protected boolean _bPopups;
+	private boolean _bPopups;
 
-	protected String _title;
+	private String _title;
 
-	protected ScrolledComposite _scomp;
+	private ScrolledComposite _scomp;
 
-	protected Composite _browserComposite;
+	private Composite _browserComposite;
 
-	protected Browser _browser;
+	private Browser _browser;
 
-	protected String _startLocation;
+	private String _startLocation;
 
-	protected String _startContent;
-
-	protected Point _size = new Point(600, 600);
+	private String _startContent;
 
 	// these items are browser context sensitive.
-	protected ToolItem _backItem;
+	private ToolItem _backItem;
 
-	protected ToolItem _forwardItem;
+	private ToolItem _forwardItem;
 
 	/**
 	 * @param parentShell
@@ -134,20 +132,35 @@
 		_bIncludeToolbar = bIncludeToolbar;
 	}
 
+	/**
+	 * @param title
+	 */
 	public void setTitle(String title) {
 		if ((title != null) && (super.getShell() != null)) {
 			super.getShell().setText(title);
 		}
 	}
 
+	/**
+	 * @param startLocation
+	 */
+	/**
+	 * @param startLocation
+	 */
 	public void setStartLocation(String startLocation) {
 		_startLocation = startLocation;
 	}
 
+	/**
+	 * @param startContent
+	 */
 	public void setStartContent(String startContent) {
 		_startContent = startContent;
 	}
 
+	/**
+	 * @return the browser object
+	 */
 	public Browser getBrowser() {
 		return _browser;
 	}
@@ -334,6 +347,7 @@
 
 	/**
 	 * send the browser widget a command as defined by the cmd constant defines.
+	 * @param cmd
 	 * 
 	 * @return true if the command was successful.
 	 */
@@ -360,16 +374,4 @@
 		}
 		return false;
 	}
-
-	public void setStartSize(Point pp) {
-		_size = pp;
-	}
-
-	public void setStartSize(int x, int y) {
-		_size = new Point(x, y);
-	}
-
-	protected Point getInitialSize() {
-		return _size;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/CollapsableSection.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/CollapsableSection.java
index 83777fc..f787c22 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/CollapsableSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/CollapsableSection.java
@@ -39,15 +39,15 @@
 public abstract class CollapsableSection {
 	// internal fields needed for doing the section and computing the scrollbar
 	// on a collapse.
-	protected FormToolkit _toolkit;
+	private FormToolkit _toolkit;
 
-	protected Section _section;
+	private Section _section;
 
-	protected ScrolledComposite _scomp;
+	private ScrolledComposite _scomp;
 
-	protected String _title;
+	private String _title;
 
-	protected int _expansionStyle;
+	private int _expansionStyle;
 
 	/**
 	 * Creates a class to be used to build the control for a collapseable area.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/FavoriteSection.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/FavoriteSection.java
index 0075afb..73fd31c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/FavoriteSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/FavoriteSection.java
@@ -35,10 +35,20 @@
 
 	private Combo _favoriteCombo;
 
+	/**
+	 * @param plugin
+	 * @param favoriteName
+	 */
 	public FavoriteSection(AbstractUIPlugin plugin, String favoriteName) {
 		_favorites = new FavoriteConfigurations(plugin, favoriteName);
 	}
 
+	/**
+	 * @param parent
+	 * @param horizontalSpan
+	 * @param comboMinWidth
+	 * @return the combo
+	 */
 	public Combo createFavoriteGroup(Composite parent, int horizontalSpan,
 			int comboMinWidth) {
 		Group favGroup = SWTUtils.createGroup(parent, JSFUICommonPlugin
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/ImageContainer.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/ImageContainer.java
index b2a6a3e..8f697d1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/ImageContainer.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/ImageContainer.java
@@ -95,6 +95,7 @@
 	/**
 	 * @param image
 	 *            The image to set.
+	 * @param bCleanupImage 
 	 */
 	public void setImage(Image image, boolean bCleanupImage) {
 		_image = image;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/IntroductionSection.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/IntroductionSection.java
index 51419a7..e8fd6f0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/IntroductionSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/IntroductionSection.java
@@ -16,7 +16,6 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Plugin;
 import org.eclipse.help.HelpSystem;
 import org.eclipse.help.IContext;
 import org.eclipse.help.IHelpResource;
@@ -53,6 +52,9 @@
  * 
  * this was original written by Collinsc
  * 
+ * TODO: Should this be moved into the facesconfig ui plugin since it is only
+ * really used there?
+ * 
  * @author collinsc,jchoi
  */
 public class IntroductionSection extends SectionPart {
@@ -209,39 +211,57 @@
 
 		if (iconPath != null && iconPath.length() > 0) {
 			// add an icon to the page
+			String iconName;
+			if (iconPath.indexOf(IPath.SEPARATOR) != -1) {
+				iconName = new Path(iconPath).lastSegment();
+			} else {
+				iconName = iconPath;
+			}
 
-			if (iconPath != null) {
-				String iconName;
-				if (iconPath.indexOf(IPath.SEPARATOR) != -1) {
-					iconName = new Path(iconPath).lastSegment();
-				} else {
-					iconName = iconPath;
-				}
-
-				Plugin plugin = Platform.getPlugin(element
-						.getDeclaringExtension().getContributor().getName());
-				if (plugin instanceof AbstractUIPlugin) {
-					ImageRegistry imageRegistry = ((AbstractUIPlugin) plugin)
-							.getImageRegistry();
-					Image image = imageRegistry.get(iconName);
-					if (image == null) {
-						ImageDescriptor imageDescriptor = AbstractUIPlugin
-								.imageDescriptorFromPlugin(
-										element.getDeclaringExtension()
-												.getContributor().getName(), iconPath);
-						imageRegistry.put(iconName, imageDescriptor);
-						image = imageRegistry.get(iconName);
+			ImageDescriptor imageDescriptor = AbstractUIPlugin
+					.imageDescriptorFromPlugin(
+							element.getDeclaringExtension()
+									.getContributor().getName(), iconPath);
+			
+			if (imageDescriptor != null)
+			{
+				ImageRegistry imageRegistry =
+					JSFUICommonPlugin.getDefault().getImageRegistry();
+				
+				
+				Image image = imageRegistry.get(iconName);
+				
+				if (image == null)
+				{
+					image = imageDescriptor.createImage();
+					
+					if (image != null)
+					{
+						imageRegistry.put(iconName, image);
 					}
-
+					else
+					{
+						image = ImageDescriptor.getMissingImageDescriptor().createImage();
+					}
+				}
+				
+				if (image != null)
+				{
 					ImageContainer img = new ImageContainer(parent);
 					img.setImage(image);
 					TableWrapData td = new TableWrapData();
 					td.rowspan = 2;
 					img.setLayoutData(td);
 				}
+				else
+				{
+					JSFUICommonPlugin.getLogger(this.getClass()).error(new Throwable("Image not created for "+element));
+				}
 			}
-
-			
+			else
+			{
+				JSFUICommonPlugin.getLogger(this.getClass()).error(new Throwable("Image Descriptor not found for "+element));
+			}
 		}
 
 		if (heading != null && heading.length() > 0) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/OverviewSection.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/OverviewSection.java
index 7fd9e54..032081e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/OverviewSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/OverviewSection.java
@@ -20,7 +20,6 @@
 import org.eclipse.jst.jsf.common.ui.JSFUICommonPlugin;
 import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.layout.RowLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.PlatformUI;
@@ -57,8 +56,6 @@
 
 	private String helpTooltip;
 
-	protected FormEditor editor;
-
 	/**
 	 * @param editorId 
 	 * @param managedForm 
@@ -96,7 +93,7 @@
 		init();
 
 		Composite client = this.toolkit.createComposite(getSection());
-		createClient(client, this.toolkit);
+		//createClient(client, this.toolkit);
 		getSection().setClient(client);
 	}
 
@@ -111,7 +108,6 @@
 		super(managedForm.getForm().getBody(), toolkit,
 				ExpandableComposite.TITLE_BAR | style);
 		super.initialize(managedForm);
-		this.editor = editor;
 		this.toolkit = toolkit;
 
 		this.textClient = this.toolkit.createComposite(getSection(), SWT.NONE);
@@ -120,13 +116,20 @@
 		init();
 	}
 
+	/**
+	 * @param editor
+	 * @param managedForm
+	 * @param toolkit
+	 * @param style
+	 * @param helpContextId
+	 * @param helpTooltip
+	 */
 	public OverviewSection(FormEditor editor, IManagedForm managedForm,
 			FormToolkit toolkit, int style, String helpContextId,
 			String helpTooltip) {
 		super(managedForm.getForm().getBody(), toolkit,
 				ExpandableComposite.TITLE_BAR | style);
 		super.initialize(managedForm);
-		this.editor = editor;
 		this.toolkit = toolkit;
 
 		this.textClient = toolkit.createComposite(getSection(), SWT.NONE);
@@ -136,9 +139,12 @@
 		init();
 	}
 
+	/**
+	 * 
+	 */
 	public void initialize() {
 		Composite client = toolkit.createComposite(getSection());
-		createClient(client, toolkit);
+		//createClient(client, toolkit);
 		getSection().setClient(client);
 	}
 
@@ -184,26 +190,6 @@
 		 */
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.update.ui.forms.internal.FormSection#createClient(org.eclipse.swt.widgets.Composite,
-	 *      org.eclipse.update.ui.forms.internal.FormWidgetFactory)
-	 */
-	public Composite createClient(Composite container, FormToolkit factory) {
-		return null;
-	}
-
-	protected Composite createClientContainer(Composite parent, int span,
-			FormToolkit toolkit_) {
-		Composite container = toolkit_.createComposite(parent);
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = layout.marginHeight = 2;
-		layout.numColumns = span;
-		container.setLayout(layout);
-		return container;
-	}
-
 	/**
 	 * set the page details from the extensionpoint
 	 * 
@@ -260,6 +246,8 @@
 
 	/**
 	 * Get the extension elements for the Introduction pages
+	 * @param extensionPoint 
+	 * @return the configuration element
 	 */
 	public IConfigurationElement getExtensions(String extensionPoint) {
 		// find all service editor page extensions
@@ -286,50 +274,12 @@
 		return element;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.service.framework.forms.ISESection#setEditor()
-	 */
-	public void setEditor(FormEditor editor) {
-		this.editor = editor;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.service.framework.forms.ISESection#getEditor()
-	 */
-	public FormEditor getEditor() {
-		return editor;
-	}
-
-	public void setText(String text) {
+	private void setText(String text) {
 		getSection().setText(text);
 	}
 
-	public void setDescription(String text) {
+	private void setDescription(String text) {
 		getSection().setDescription(text);
 
 	}
-
-	public void setLayoutData(Object layoutData) {
-		getSection().setLayoutData(layoutData);
-	}
-
-	public void setExpanded(boolean expanded) {
-		getSection().setExpanded(expanded);
-	}
-
-	/**
-	 * @return Returns the _helpImage.
-	 */
-	public ImageHyperlink getHelpImage() {
-		return helpImage;
-	}
-
-	public void setEditorID(String id) {
-		editorId = id;
-	}
-
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/SWTUtils.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/SWTUtils.java
index b955c97..a1decc9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/SWTUtils.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/SWTUtils.java
@@ -13,8 +13,6 @@
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.custom.TableTree;
-import org.eclipse.swt.custom.TableTreeEditor;
 import org.eclipse.swt.events.ControlEvent;
 import org.eclipse.swt.events.ControlListener;
 import org.eclipse.swt.graphics.Color;
@@ -41,13 +39,13 @@
  */
 public class SWTUtils {
 	// Defaults of controls
-	public static final int DEFAULT_BUTTON_WIDTH = 70;
+	private static final int DEFAULT_BUTTON_WIDTH = 70;
 
-	public static final int DEFAULT_COMBO_WIDTH = 100;
+	private static final int DEFAULT_COMBO_WIDTH = 100;
 
-	public static final int DEFAULT_TEXTBOX_WIDTH = 100;
+	private static final int DEFAULT_TEXTBOX_WIDTH = 100;
 
-	public static final int DEFAULT_RADIO_FILL = GridData.HORIZONTAL_ALIGN_BEGINNING
+	private static final int DEFAULT_RADIO_FILL = GridData.HORIZONTAL_ALIGN_BEGINNING
 			| GridData.VERTICAL_ALIGN_CENTER;
 
 	/**
@@ -541,6 +539,7 @@
 	 *            the parent for the new button
 	 * @param label
 	 *            the label for the new button
+	 * @param gridDataFill 
 	 * @return the newly-created button
 	 */
 	public static Button createRadioButton(Composite parent, String label,
@@ -556,6 +555,7 @@
 	 *            the parent for the new button
 	 * @param label
 	 *            the label for the new button
+	 * @param gridDataFill 
 	 * @param horizontalSpan
 	 *            number of columns occupied by button
 	 * @return the newly-created button
@@ -619,32 +619,6 @@
 	}
 
 	/**
-	 * Create a table from a TableTree object
-	 * 
-	 * @param tableTree
-	 *            the TableTree this table is to be created from
-	 * @param columns
-	 *            A string array containing names of the columns in the order
-	 *            that they should be displayed in the table, or null if no
-	 *            columns need to be created.
-	 * @return the new table
-	 */
-	public static Table createTable(TableTree tableTree, String[] columns) {
-		Table table = tableTree.getTable();
-		table.setLayoutData(tableTree.getLayoutData());
-		table.setHeaderVisible(true);
-		table.setLinesVisible(true);
-
-		if (columns != null) {
-			for (int i = 0; i < columns.length; i++) {
-				/*(void)*/ createTableColumn(table, columns[i], i);
-			}
-		}
-
-		return table;
-	}
-
-	/**
 	 * Create a table from a Composite object
 	 * 
 	 * @param composite
@@ -656,6 +630,7 @@
 	 *            created.
 	 * @param tablewidth
 	 *            the minimum width for the table
+	 * @param tableHeight 
 	 * @return the new table
 	 */
 	public static Table createTable(Composite composite, String tokenString,
@@ -749,6 +724,7 @@
 	 *            the table that contains this column
 	 * @param image
 	 *            iamge for this column
+	 * @param index 
 	 * @return the new table column
 	 */
 	public static TableColumn createTableColumn(Table parent, Image image,
@@ -782,39 +758,6 @@
 	}
 
 	/**
-	 * Create a TableTree object
-	 * 
-	 * @param parent
-	 *            the composite that contains the TableTree
-	 * @return the new TableTree object
-	 */
-	public static TableTree createTableTree(Composite parent) {
-		int style = SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL
-				| SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
-		TableTree tableTree = new TableTree(parent, style);
-		GridData gridData = new GridData(GridData.FILL_BOTH);
-		gridData.grabExcessVerticalSpace = true;
-		gridData.grabExcessHorizontalSpace = true;
-		tableTree.setLayoutData(gridData);
-		return tableTree;
-	}
-
-	/**
-	 * Create a TableTreeEditor object
-	 * 
-	 * @param tableTree
-	 *            the TableTree that this editor is for
-	 * @return the new TableTreeEditor object
-	 */
-	public static TableTreeEditor createTableTreeEditor(TableTree tableTree) {
-		TableTreeEditor editor = new TableTreeEditor(tableTree);
-		editor.horizontalAlignment = SWT.LEFT;
-		editor.grabHorizontal = true;
-		editor.minimumWidth = 50;
-		return editor;
-	}
-
-	/**
 	 * Create a text field
 	 * 
 	 * @param parent
@@ -830,6 +773,7 @@
 	 * 
 	 * @param parent
 	 *            the parent of the new text field
+	 * @param text 
 	 * @return the new text field
 	 */
 	public static Text createTextBox(Composite parent, String text) {
@@ -876,6 +820,7 @@
 	 *            number of columns the text box is to occupy
 	 * @param minWidth
 	 *            minimum width of text field
+	 * @param minHeight 
 	 * @return the new text field
 	 */
 	public static Text createTextBox(Composite parent, int numColumns,
@@ -1078,6 +1023,9 @@
 		}
 	};
 
+	/**
+	 * @param composite
+	 */
 	public static void workaroundResize(Composite composite) {
 		composite.addControlListener(_listener);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/TextWindow.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/TextWindow.java
index 122d85e..b829cd2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/TextWindow.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/guiutils/TextWindow.java
@@ -19,7 +19,6 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
 
 /**
  * Brings up a simple text window.
@@ -27,15 +26,14 @@
  * @author mengbo
  */
 public class TextWindow extends ApplicationWindow {
-	// this browser will be cleaned up when they close the window.
-	private Text _text;
-
 	private String _content;
 
 	private Point _size = new Point(600, 600);
 
 	/**
 	 * empty for passing from events.
+	 * @param parentShell 
+	 * @param content 
 	 */
 	public TextWindow(Shell parentShell, String content) {
 		super(parentShell);
@@ -46,10 +44,6 @@
 		// addToolBar(SWT.BORDER);
 	}
 
-	public Text getTextWidget() {
-		return _text;
-	}
-
 	protected Control createContents(Composite parent) {
 		// _text = new Text(parent, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
 		// _text.setText(_content);
@@ -62,9 +56,6 @@
 		return tview.getControl();
 	}
 
-	public void setStartSize(Point pp) {
-		_size = pp;
-	}
 
 	protected Point getInitialSize() {
 		return _size;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/logging/Logger.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/logging/Logger.java
index dc1a3e6..94bc039 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/logging/Logger.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/logging/Logger.java
@@ -20,6 +20,10 @@
 import org.eclipse.core.runtime.Status;
 import org.osgi.framework.Bundle;
 
+/**
+ * A resource bundle driven logger
+ *
+ */
 public class Logger {
 	private ResourceBundle resourceBundle;
 
@@ -27,6 +31,10 @@
 
 	private String bundleId;
 
+	/**
+	 * @param bundle
+	 * @param resourceBundle
+	 */
 	public Logger(Bundle bundle, ResourceBundle resourceBundle) {
 		log = Platform.getLog(bundle);
 		this.resourceBundle = resourceBundle;
@@ -37,6 +45,10 @@
 			log.log(status);
 		}
 	}
+	/**
+	 * @param key
+	 * @param arg0
+	 */
 	public void info(String key, String arg0) {
 		Object[] args = new Object[1];
 		args[0] = arg0;
@@ -48,12 +60,19 @@
 		log.log(status);
 	}
 
+	/**
+	 * @param message
+	 */
 	public void info(String message) {
 		IStatus status = new Status(IStatus.INFO, bundleId, IStatus.OK,
 				message, null);
 		log.log(status);
 	}
 
+	/**
+	 * @param key
+	 * @param e
+	 */
 	public void info(String key, Throwable e) {
 		String message = getString(key);
 		IStatus status = new Status(IStatus.INFO, bundleId, IStatus.OK,
@@ -61,6 +80,11 @@
 		log.log(status);
 	}
 
+	/**
+	 * @param key
+	 * @param arg0
+	 * @param e
+	 */
 	public void info(String key, String arg0, Throwable e) {
 		Object[] args = new Object[1];
 		args[0] = arg0;
@@ -72,6 +96,12 @@
 		log.log(status);
 	}
 	
+	/**
+	 * @param key
+	 * @param arg0
+	 * @param arg1
+	 * @param e
+	 */
 	public void info(String key, String arg0, String arg1, Throwable e) {
 		Object[] args = new Object[1];
 		args[0] = arg0;
@@ -84,6 +114,9 @@
 		log.log(status);
 	}
 
+    /**
+     * @param key
+     */
     public void error(String key) {
         
         String message = getString(key);
@@ -92,11 +125,18 @@
         log.log(status);
     }
 
+	/**
+	 * @param e
+	 */
 	public void error(Throwable e) {
 		IStatus status = new Status(IStatus.ERROR, bundleId, IStatus.OK, "", e);
 		log.log(status);
 	}
 
+	/**
+	 * @param key
+	 * @param e
+	 */
 	public void error(String key, Throwable e) {
 		String message = getString(key);
 		IStatus status = new Status(IStatus.ERROR, bundleId, IStatus.OK,
@@ -104,6 +144,10 @@
 		log.log(status);
 	}
 	
+	/**
+	 * @param key
+	 * @param arg0
+	 */
 	public void error(String key, String arg0) {
 		Object[] args = new Object[1];
 		args[0] = arg0;
@@ -115,6 +159,11 @@
 		log.log(status);
 	}
 
+	/**
+	 * @param key
+	 * @param arg
+	 * @param e
+	 */
 	public void error(String key, String arg, Throwable e) {
 		Object[] args = new Object[1];
 		args[0] = arg;
@@ -126,6 +175,12 @@
 		log.log(status);
 	}
 
+	/**
+	 * @param key
+	 * @param arg0
+	 * @param arg1
+	 * @param e
+	 */
 	public void error(String key, String arg0, String arg1, Throwable e) {
 		Object[] args = new Object[1];
 		args[0] = arg0;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/JavaModelUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/JavaModelUtil.java
index b28a1c0..b0e4cbf 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/JavaModelUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/JavaModelUtil.java
@@ -27,13 +27,11 @@
 import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IField;
-import org.eclipse.jdt.core.IImportContainer;
 import org.eclipse.jdt.core.IImportDeclaration;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
-import org.eclipse.jdt.core.IPackageDeclaration;
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.IType;
@@ -57,6 +55,7 @@
 	 *            The fully qualified name (type name with enclosing type names
 	 *            and package (all separated by dots))
 	 * @return The type found, or null if not existing
+	 * @throws JavaModelException 
 	 */
 	public static IType findType(IJavaProject jproject,
 			String fullyQualifiedName) throws JavaModelException {
@@ -81,6 +80,8 @@
 	 * referenced. This means it is own by a different project but is referenced
 	 * by the root's parent. Returns <code>false</code> if the given root
 	 * doesn't have an underlying resource.
+	 * @param root 
+	 * @return true if root is referenced
 	 */
 	public static boolean isReferenced(IPackageFragmentRoot root) {
 		IResource resource = root.getResource();
@@ -147,6 +148,7 @@
 	 *            the type qualified name (type name with enclosing type names
 	 *            (separated by dots))
 	 * @return the type found, or null if not existing
+	 * @throws JavaModelException 
 	 * @deprecated Use IJavaProject.findType(String, String) instead
 	 */
 	public static IType findType(IJavaProject jproject, String pack,
@@ -163,6 +165,8 @@
 	 *            The Java project defining the context to search
 	 * @param typeContainerName
 	 *            A dot separarted name of the type container
+	 * @return the java element
+	 * @throws JavaModelException 
 	 * @see #getTypeContainerName(IType)
 	 */
 	public static IJavaElement findTypeContainer(IJavaProject jproject,
@@ -191,6 +195,7 @@
 	 *            the type qualified name (type name with enclosing type names
 	 *            (separated by dots))
 	 * @return the type found, or null if not existing
+	 * @throws JavaModelException 
 	 */
 	public static IType findTypeInCompilationUnit(ICompilationUnit cu,
 			String typeQualifiedName) throws JavaModelException {
@@ -248,6 +253,8 @@
 	 * separators. This is a replace for IType.getTypeQualifiedName() which uses
 	 * '$' as separators. As '$' is also a valid character in an id this is
 	 * ambiguous. JavaCore PR: 1GCFUNT
+	 * @param type 
+	 * @return the type qualified name
 	 */
 	public static String getTypeQualifiedName(IType type) {
 		return type.getTypeQualifiedName('.');
@@ -258,6 +265,8 @@
 	 * separators. This is a replace for IType.getFullyQualifiedTypeName which
 	 * uses '$' as separators. As '$' is also a valid character in an id this is
 	 * ambiguous. JavaCore PR: 1GCFUNT
+	 * @param type 
+	 * @return the fully qualified name using . as the separator
 	 */
 	public static String getFullyQualifiedName(IType type) {
 		return type.getFullyQualifiedName('.');
@@ -266,6 +275,8 @@
 	/**
 	 * Returns the fully qualified name of a type's container. (package name or
 	 * enclosing type name)
+	 * @param type 
+	 * @return the container name
 	 */
 	public static String getTypeContainerName(IType type) {
 		IType outerType = type.getDeclaringType();
@@ -278,6 +289,9 @@
 	/**
 	 * Concatenates two names. Uses a dot for separation. Both strings can be
 	 * empty or <code>null</code>.
+	 * @param name1 
+	 * @param name2 
+	 * @return name1 + name2
 	 */
 	public static String concatenateName(String name1, String name2) {
 		StringBuffer buf = new StringBuffer();
@@ -296,6 +310,9 @@
 	/**
 	 * Concatenates two names. Uses a dot for separation. Both strings can be
 	 * empty or <code>null</code>.
+	 * @param name1 
+	 * @param name2 
+	 * @return name1 + name2
 	 */
 	public static String concatenateName(char[] name1, char[] name2) {
 		StringBuffer buf = new StringBuffer();
@@ -319,6 +336,8 @@
 	 *            The member to test the visibility for
 	 * @param pack
 	 *            The package in focus
+	 * @return true if visible
+	 * @throws JavaModelException 
 	 */
 	public static boolean isVisible(IMember member, IPackageFragment pack)
 			throws JavaModelException {
@@ -354,6 +373,8 @@
 	 *            The member to test the visibility for
 	 * @param pack
 	 *            The package of the focus element focus
+	 * @return true if is visible in hiearchy
+	 * @throws JavaModelException 
 	 */
 	public static boolean isVisibleInHierarchy(IMember member,
 			IPackageFragment pack) throws JavaModelException {
@@ -384,6 +405,8 @@
 	 * Returns the package fragment root of <code>IJavaElement</code>. If the
 	 * given element is already a package fragment root, the element itself is
 	 * returned.
+	 * @param element 
+	 * @return the package fragment root
 	 */
 	public static IPackageFragmentRoot getPackageFragmentRoot(
 			IJavaElement element) {
@@ -397,7 +420,7 @@
 	 * 
 	 * @deprecated Use element.getParent().getAncestor(kind);
 	 */
-	public static IJavaElement findParentOfKind(IJavaElement element, int kind) {
+	private static IJavaElement findParentOfKind(IJavaElement element, int kind) {
 		if (element != null && element.getParent() != null) {
 			return element.getParent().getAncestor(kind);
 		}
@@ -417,7 +440,9 @@
 	 *            <code>{"QString;","I"}</code>
 	 * @param isConstructor
 	 *            If the method is a constructor
+	 * @param type 
 	 * @return The first found method or <code>null</code>, if nothing found
+	 * @throws JavaModelException 
 	 */
 	public static IMethod findMethod(String name, String[] paramTypes,
 			boolean isConstructor, IType type) throws JavaModelException {
@@ -440,6 +465,7 @@
 	 * @param methods
 	 *            The methods to search in
 	 * @return The found method or <code>null</code>, if nothing found
+	 * @throws JavaModelException 
 	 */
 	public static IMethod findMethod(String name, String[] paramTypes,
 			boolean isConstructor, IMethod[] methods) throws JavaModelException {
@@ -459,6 +485,7 @@
 	 * only compared by the simple name, no resolving for the fully qualified
 	 * type name is done. Constructors are only compared by parameters, not the
 	 * name.
+	 * @param hierarchy 
 	 * 
 	 * @param type
 	 *            Searches in this type's supertypes.
@@ -470,6 +497,7 @@
 	 * @param isConstructor
 	 *            If the method is a constructor
 	 * @return The first method found or null, if nothing found
+	 * @throws JavaModelException 
 	 */
 	public static IMethod findMethodDeclarationInHierarchy(
 			ITypeHierarchy hierarchy, IType type, String name,
@@ -500,6 +528,7 @@
 	 * with a name and signature. Parameter types are only compared by the
 	 * simple name, no resolving for the fully qualified type name is done.
 	 * Constructors are only compared by parameters, not the name.
+	 * @param hierarchy 
 	 * 
 	 * @param type
 	 *            Type to search the superclasses
@@ -511,6 +540,7 @@
 	 * @param isConstructor
 	 *            If the method is a constructor
 	 * @return The first method found or null, if nothing found
+	 * @throws JavaModelException 
 	 */
 	public static IMethod findMethodImplementationInHierarchy(
 			ITypeHierarchy hierarchy, IType type, String name,
@@ -561,10 +591,16 @@
 	/**
 	 * Finds the method that is defines/declares the given method. The search is
 	 * bottom-up, so this returns the nearest defining/declaring method.
+	 * @param typeHierarchy 
+	 * @param type 
+	 * @param methodName 
+	 * @param paramTypes 
+	 * @param isConstructor 
 	 * 
 	 * @param testVisibility
 	 *            If true the result is tested on visibility. Null is returned
 	 *            if the method is not visible.
+	 * @return the method or null
 	 * @throws JavaModelException
 	 */
 	public static IMethod findMethodDefininition(ITypeHierarchy typeHierarchy,
@@ -608,8 +644,10 @@
 	 *            <code>{"QString;","I"}</code>
 	 * @param isConstructor
 	 *            Specifies if the method is a constructor
+	 * @param curr 
 	 * @return Returns <code>true</code> if the method has the given name and
 	 *         parameter types and constructor state.
+	 * @throws JavaModelException 
 	 */
 	public static boolean isSameMethodSignature(String name,
 			String[] paramTypes, boolean isConstructor, IMethod curr)
@@ -637,6 +675,8 @@
 	/**
 	 * Tests if two <code>IPackageFragment</code>s represent the same logical
 	 * java package.
+	 * @param pack1 
+	 * @param pack2 
 	 * 
 	 * @return <code>true</code> if the package fragments' names are equal.
 	 */
@@ -647,6 +687,9 @@
 
 	/**
 	 * Checks whether the given type has a valid main method or not.
+	 * @param type 
+	 * @return true if type has a main method
+	 * @throws JavaModelException 
 	 */
 	public static boolean hasMainMethod(IType type) throws JavaModelException {
 		IMethod[] methods = type.getMethods();
@@ -660,25 +703,20 @@
 
 	/**
 	 * Checks if the field is boolean.
+	 * @param field 
+	 * @return true if the file is of primitive boolean type
+	 * @throws JavaModelException 
 	 */
 	public static boolean isBoolean(IField field) throws JavaModelException {
 		return field.getTypeSignature().equals(Signature.SIG_BOOLEAN);
 	}
 
 	/**
-	 * Returns true if the element is on the build path of the given project
-	 * 
-	 * @deprecated Use jproject.isOnClasspath(element);
-	 */
-	public static boolean isOnBuildPath(IJavaProject jproject,
-			IJavaElement element) {
-		return jproject.isOnClasspath(element);
-	}
-
-	/**
 	 * Tests if the given element is on the class path of its containing
 	 * project. Handles the case that the containing project isn't a Java
 	 * project.
+	 * @param element 
+	 * @return true if element in on the class path?
 	 */
 	public static boolean isOnClasspath(IJavaElement element) {
 		IJavaProject project = element.getJavaProject();
@@ -699,6 +737,7 @@
 	 *            in)
 	 * @return returns the fully qualified type name or build-in-type name. if a
 	 *         unresoved type couldn't be resolved null is returned
+	 * @throws JavaModelException 
 	 */
 	public static String getResolvedTypeName(String refTypeSig,
 			IType declaringType) throws JavaModelException {
@@ -724,6 +763,8 @@
 
 	/**
 	 * Returns if a CU can be edited.
+	 * @param cu 
+	 * @return true if cu is editable
 	 */
 	public static boolean isEditable(ICompilationUnit cu) {
 		IResource resource = toOriginal(cu).getResource();
@@ -733,6 +774,10 @@
 
 	/**
 	 * Finds a qualified import for a type name.
+	 * @param cu 
+	 * @param simpleName 
+	 * @return the import declaration or null
+	 * @throws JavaModelException 
 	 */
 	public static IImportDeclaration findImport(ICompilationUnit cu,
 			String simpleName) throws JavaModelException {
@@ -753,6 +798,8 @@
 	/**
 	 * Returns the original if the given member. If the member is already an
 	 * original the input is returned. The returned member might not exist
+	 * @param member 
+	 * @return the original IMember
 	 */
 	public static IMember toOriginal(IMember member) {
 		if (member instanceof IMethod) {
@@ -802,6 +849,8 @@
 	 * Returns the original cu if the given cu is a working copy. If the cu is
 	 * already an original the input cu is returned. The returned cu might not
 	 * exist
+	 * @param cu 
+	 * @return the original compiliation unit
 	 */
 	public static ICompilationUnit toOriginal(ICompilationUnit cu) {
 		// To stay compatible with old version returned null
@@ -815,70 +864,31 @@
 	 * Returns the original element if the given element is a working copy. If
 	 * the cu is already an original the input element is returned. The returned
 	 * element might not exist
+	 * @param element 
+	 * @return element's primary element
 	 */
 	public static IJavaElement toOriginal(IJavaElement element) {
 		return element.getPrimaryElement();
 	}
 
 	/**
-	 * @deprecated Inline this method.
-	 */
-	public static IMember toWorkingCopy(IMember member) {
-		return member;
-	}
-
-	/**
-	 * @deprecated Inline this method.
-	 */
-	public static IPackageDeclaration toWorkingCopy(
-			IPackageDeclaration declaration) {
-		return declaration;
-	}
-
-	/**
-	 * @deprecated Inline this method.
-	 */
-	public static IJavaElement toWorkingCopy(IJavaElement elem) {
-		return elem;
-	}
-
-	/**
-	 * @deprecated Inline this method.
-	 */
-	public static IImportContainer toWorkingCopy(IImportContainer container) {
-		return container;
-
-	}
-
-	/**
-	 * @deprecated Inline this method.
-	 */
-	public static IImportDeclaration toWorkingCopy(
-			IImportDeclaration importDeclaration) {
-		return importDeclaration;
-	}
-
-	/**
-	 * @deprecated Inline this method.
-	 */
-	public static ICompilationUnit toWorkingCopy(ICompilationUnit cu) {
-		return cu;
-	}
-
-	/**
 	 * Returns true if a cu is a primary cu (original or shared working copy)
+	 * @param cu 
+	 * @return true if cu  is primary
 	 */
 	public static boolean isPrimary(ICompilationUnit cu) {
 		return cu.getOwner() == null;
 	}
 
-	/*
+	/**
 	 * http://bugs.eclipse.org/bugs/show_bug.cgi?id=19253
 	 * 
 	 * Reconciling happens in a separate thread. This can cause a situation
 	 * where the Java element gets disposed after an exists test has been done.
 	 * So we should not log not present exceptions when they happen in working
 	 * copies.
+	 * @param exception 
+	 * @return true if filter not present
 	 */
 	public static boolean filterNotPresentException(CoreException exception) {
 		if (!(exception instanceof JavaModelException)) {
@@ -903,6 +913,12 @@
 		return false;
 	}
 
+	/**
+	 * @param type
+	 * @param pm
+	 * @return all supertypes of type
+	 * @throws JavaModelException
+	 */
 	public static IType[] getAllSuperTypes(IType type, IProgressMonitor pm)
 			throws JavaModelException {
 		// workaround for 23656
@@ -915,6 +931,11 @@
 		return (IType[]) types.toArray(new IType[types.size()]);
 	}
 
+	/**
+	 * @param resourcePath
+	 * @param exclusionPatterns
+	 * @return true if resourcePath is excluded by exclusion patterns
+	 */
 	public static boolean isExcludedPath(IPath resourcePath,
 			IPath[] exclusionPatterns) {
 		char[] path = resourcePath.toString().toCharArray();
@@ -928,10 +949,16 @@
 	}
 
 	/*
+
+	 * @see IClasspathEntry#getExclusionPatterns
+	 */
+	/**
 	 * Returns whether the given resource path matches one of the exclusion
 	 * patterns.
 	 * 
-	 * @see IClasspathEntry#getExclusionPatterns
+	 * @param resourcePath
+	 * @param exclusionPatterns
+	 * @return true if resourcePath is excluded
 	 */
 	public static boolean isExcluded(IPath resourcePath,
 			char[][] exclusionPatterns) {
@@ -950,7 +977,7 @@
 	private static Boolean fgIsJDTCore_1_5 = null;
 
 	/**
-	 * Return true if JRE 1.5 in enabled.
+	 * @return true if JRE 1.5 in enabled.
 	 */
 	public static boolean isJDTCore_1_5() {
 		if (fgIsJDTCore_1_5 == null) {
@@ -977,6 +1004,7 @@
 	 *            The path of the library to be found
 	 * @return IClasspathEntry A classpath entry from the container of
 	 *         <code>null</code> if the container can not be modified.
+	 * @throws JavaModelException 
 	 */
 	public static IClasspathEntry getClasspathEntryToEdit(
 			IJavaProject jproject, IPath containerPath, IPath libPath)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/PathUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/PathUtil.java
index c7c75c8..5745f3f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/PathUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/PathUtil.java
@@ -22,27 +22,29 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJarEntryResource;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.internal.core.JarEntryFile;
 import org.eclipse.jst.jsf.common.ui.IFileFolderConstants;
-import org.eclipse.jst.jsf.common.ui.JSFUICommonPlugin;
 import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
 
 /**
  * Collection of helper methods to manage and convert links Originally part of
  * the LinksManager (com.ibm.iwt.parser.util)
  */
-public class PathUtil {
-	public static final String BACKWARD_SLASH = "\\"; //$NON-NLS-1$
+public final class PathUtil {
+	private static final String FORWARD_SLASH = "/"; //$NON-NLS-1$
 
-	public static final String FORWARD_SLASH = "/"; //$NON-NLS-1$
-
-	public static final String RELATIVE_PATH_SIGNAL = IFileFolderConstants.DOT
+	private static final String RELATIVE_PATH_SIGNAL = IFileFolderConstants.DOT
 			+ IFileFolderConstants.DOT + IFileFolderConstants.PATH_SEPARATOR;
 
 	/**
 	 * adjust relative path isside the absolute path
+	 * @param path 
+	 * @return the adjusted path
 	 */
 	public static String adjustPath(String path) {
 		int i = 0;
@@ -64,6 +66,8 @@
 
 	/**
 	 * Append trailing url slash if needed
+	 * @param input 
+	 * @return the string
 	 */
 	public static String appendTrailingURLSlash(String input) {
 		// check to see already a slash
@@ -75,6 +79,9 @@
 
 	/**
 	 * Convert to relative url based on base
+	 * @param input 
+	 * @param base 
+	 * @return the string
 	 */
 	public static String convertToRelativePath(String input, String base) {
 		// tokenize the strings
@@ -109,6 +116,12 @@
 		return output;
 	}
 
+	/**
+	 * @param projectName
+	 * @param path
+	 * @return the path in the project converted to a path relative to the
+	 * web folder
+	 */
 	public static String convertToWebPath(String projectName, String path) {
 		String name = "";
 		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(
@@ -132,6 +145,7 @@
 	 * 
 	 * @param uri
 	 *            the relative path
+	 * @param curFile 
 	 * @return absolute path in file system
 	 */
 	public static String convertToAbsolutePath(String uri, IFile curFile) {
@@ -142,7 +156,7 @@
 		IFile jsp = curFile;
 		try {
 			if (jsp == null) {
-				jsp = ((IFileEditorInput) JSFUICommonPlugin.getActivePage()
+				jsp = ((IFileEditorInput) getActivePage()
 						.getActiveEditor().getEditorInput()).getFile();
 			}
 			if (jsp != null) {
@@ -181,6 +195,34 @@
 	}
 
 	/**
+	 * Returns the active workbench window.
+	 * 
+	 * @return the active workbench window. this can be null but I've never seen
+	 *         it.
+	 */
+	private static IWorkbenchWindow getActiveWorkbenchWindow() {
+		if (PlatformUI.getWorkbench() == null) {
+			return null;
+		}
+        return PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+	}
+
+	/**
+	 * Returns the active workbench page. Note that the active page may not be
+	 * the one that the user perceives as active in some situations so this
+	 * method of obtaining the activate page should only be used if no other
+	 * method is available.
+	 * 
+	 * @return the active workbench page
+	 */
+	private static IWorkbenchPage getActivePage() {
+		IWorkbenchWindow window = getActiveWorkbenchWindow();
+		if (window == null) {
+			return null;
+		}
+		return window.getActivePage();
+	}
+	/**
 	 * @param javaProject
 	 * @param parent
 	 * @return the IPath for a a classpath object (?)
@@ -245,8 +287,8 @@
 					}
 				}
 			}
-		} else if (parent instanceof JarEntryFile) {
-			IPath elementPath = ((JarEntryFile) parent).getFullPath();
+		} else if (parent instanceof IJarEntryResource) {
+			IPath elementPath = ((IJarEntryResource) parent).getFullPath();
 			if (elementPath.getFileExtension().equalsIgnoreCase(
 					IFileFolderConstants.EXT_PROPERTIES)) {
 				result = elementPath;
@@ -257,4 +299,9 @@
 		}
 		return new Path("");
 	}
+	
+	private PathUtil()
+	{
+		// utility class, no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/PropertyUtils.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/PropertyUtils.java
index 02a6261..cc734cc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/PropertyUtils.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/PropertyUtils.java
@@ -20,9 +20,9 @@
 import java.io.ByteArrayOutputStream;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.MissingResourceException;
 import java.util.Properties;
 import java.util.ResourceBundle;
 import java.util.StringTokenizer;
@@ -35,7 +35,7 @@
  * 
  * @author mengbo
  */
-public class PropertyUtils {
+public final class PropertyUtils {
 	// WARNING: There can be NO static logging line here since the logger uses
 	// this class to figure out the preferences
 	// for the logging system. "Logging" an error here would be useless since
@@ -47,7 +47,7 @@
 	// The prop-name will be prepended to this string....
 	private static final String NAME_PROPERTIES = ".props";
 
-	public static final String STR_BOUNDS_END = ".bounds"; // assumes the
+	private static final String STR_BOUNDS_END = ".bounds"; // assumes the
 
 	// window name or
 	// name list is
@@ -56,6 +56,12 @@
 	// //////////////////////////////////////////////////////////////////////////
 	// Property get methods.
 	// //////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param props
+	 * @param key
+	 * @param theDefault
+	 * @return the property
+	 */
 	public static String getProperty(Properties props, String key,
 			String theDefault) {
 		try {
@@ -75,6 +81,11 @@
 		}
 	}
 
+	/**
+	 * @param props
+	 * @param key
+	 * @return the value for key in props, may return null
+	 */
 	public static String getProperty(Properties props, String key) {
 		try {
 			String value = props.getProperty(key);
@@ -87,16 +98,30 @@
 		}
 	}
 
+	/**
+	 * @param props
+	 * @param key
+	 * @param defaultValue
+	 * @param minimumValue
+	 * @return the integer property value for key, or defaultValue
+	 * if none.  Enforces minimumValue in all cases
+	 */
 	public static int getPropertyValue(Properties props, String key,
-			int defaultValue, int minumumValue) {
+			int defaultValue, int minimumValue) {
 		int theValue = getPropertyValue(props, key, defaultValue);
 
-		if (theValue < minumumValue) {
-			theValue = minumumValue;
+		if (theValue < minimumValue) {
+			theValue = minimumValue;
 		}
 		return theValue;
 	}
 
+	/**
+	 * @param props
+	 * @param key
+	 * @param defaultValue
+	 * @return the integer value for key in props or defaultValue if none
+	 */
 	public static int getPropertyValue(Properties props, String key,
 			int defaultValue) {
 		String stringValue = getProperty(props, key);
@@ -112,6 +137,12 @@
 		return defaultValue;
 	}
 
+	/**
+	 * @param props
+	 * @param key
+	 * @param defaultValue
+	 * @return the long value for key props or defaultValue if none
+	 */
 	public static long getPropertyLongValue(Properties props, String key,
 			long defaultValue) {
 		String stringValue = getProperty(props, key);
@@ -127,11 +158,23 @@
 		return defaultValue;
 	}
 
+	/**
+	 * @param props
+	 * @param key
+	 * @param bDefault
+	 * @return true if props has a value for key
+	 */
 	public static boolean isProperty(Properties props, String key,
 			boolean bDefault) {
 		return getProperty(props, key, "" + bDefault).equals("" + true);
 	}
 
+	/**
+	 * @param props
+	 * @param key
+	 * @return the string values in props for key tokenized from
+	 * a comma-separated string
+	 */
 	public static String[] getPropertyStrings(Properties props, String key) {
 		String tokenString = getProperty(props, key);
 
@@ -150,6 +193,12 @@
 	// //////////////////////////////////////////////////////////////////////////
 	// Resource bundle get methods.
 	// //////////////////////////////////////////////////////////////////////////
+	/**
+	 * @param bundle
+	 * @param key
+	 * @param theDefault
+	 * @return the string value from bundle for key or default if none
+	 */
 	public static String getResourceProperty(ResourceBundle bundle, String key,
 			String theDefault) {
 		try {
@@ -158,33 +207,74 @@
 				value = theDefault;
 			}
 			return value;
-		} catch (Exception ee) {
+		} 
+		catch(NullPointerException npe)
+		{
+			return theDefault;
+		}
+		catch (MissingResourceException mre)
+		{
+			return theDefault;
+		}
+		catch (ClassCastException cce)
+		{
 			return theDefault;
 		}
 	}
 
+	/**
+	 * @param bundle
+	 * @param key
+	 * @return the value for key in bundle or null if none
+	 */
 	public static String getResourceProperty(ResourceBundle bundle, String key) {
-		try {
+		try 
+		{
 			String value = bundle.getString(key);
-			if ((value != null) && (value.length() == 0)) {
+			if ((value != null) && (value.length() == 0)) 
+			{
 				value = null;
 			}
-			return value;
-		} catch (Exception ee) {
+				return value;
+		}
+		catch(NullPointerException npe)
+		{
+			return null;
+		}
+		catch (MissingResourceException mre)
+		{
+			return null;
+		}
+		catch (ClassCastException cce)
+		{
 			return null;
 		}
 	}
 
+	/**
+	 * @param bundle
+	 * @param key
+	 * @param defaultValue
+	 * @param minimumValue
+	 * @return the integer value for key in bundle or defaultValue if none
+	 * Enforces minimum value in all cases
+	 */
 	public static int getResourcePropertyValue(ResourceBundle bundle,
-			String key, int defaultValue, int minumumValue) {
+			String key, int defaultValue, int minimumValue) {
 		int theValue = getResourcePropertyValue(bundle, key, defaultValue);
 
-		if (theValue < minumumValue) {
-			theValue = minumumValue;
+		if (theValue < minimumValue) {
+			theValue = minimumValue;
 		}
 		return theValue;
 	}
 
+	/**
+	 * @param bundle
+	 * @param key
+	 * @param defaultValue
+	 * @return the integer value for key in bundle or defaultValue if  none
+	 */
 	public static int getResourcePropertyValue(ResourceBundle bundle,
 			String key, int defaultValue) {
 		String stringValue = getResourceProperty(bundle, key);
@@ -200,6 +290,12 @@
 		return defaultValue;
 	}
 
+	/**
+	 * @param bundle
+	 * @param key
+	 * @param defaultValue
+	 * @return the long value for key in bundle or default value if none
+	 */
 	public static long getResourcePropertyLongValue(ResourceBundle bundle,
 			String key, long defaultValue) {
 		String stringValue = getResourceProperty(bundle, key);
@@ -215,6 +311,12 @@
 		return defaultValue;
 	}
 
+	/**
+	 * @param bundle
+	 * @param key
+	 * @param bDefault
+	 * @return true if bundle has a value for key
+	 */
 	public static boolean isResourceProperty(ResourceBundle bundle, String key,
 			boolean bDefault) {
 		return getResourceProperty(bundle, key, "" + bDefault)
@@ -224,6 +326,10 @@
 	// ///////////////////////////////////////////////////////////////////////
 	// Property misc routines
 	// ///////////////////////////////////////////////////////////////////////
+	/**
+	 * @param theName
+	 * @return the encoded name
+	 */
 	public static String encodeName(String theName) {
 		int theSize = theName.length();
 		StringBuffer encoded = new StringBuffer(theSize);
@@ -264,6 +370,10 @@
 		return encoded.toString();
 	}
 
+	/**
+	 * @param theName
+	 * @return the decoded name
+	 */
 	public static String decodeName(String theName) {
 		int theSize = theName.length();
 		int kk;
@@ -287,16 +397,37 @@
 		return decoded.toString();
 	}
 
+	/**
+	 * @param propName
+	 * @return the properties
+	 * @throws IOException
+	 * @throws FileNotFoundException
+	 */
 	public static Properties openProperties(String propName)
 			throws IOException, FileNotFoundException {
 		return openProperties(propName, null, true);
 	}
 
+	/**
+	 * @param propName
+	 * @param propDefaults
+	 * @return the properties
+	 * @throws IOException
+	 * @throws FileNotFoundException
+	 */
 	public static Properties openProperties(String propName,
 			Properties propDefaults) throws IOException, FileNotFoundException {
 		return openProperties(propName, propDefaults, true);
 	}
 
+	/**
+	 * @param propName
+	 * @param propDefaults
+	 * @param bCreatePropertiesPathname
+	 * @return the properties
+	 * @throws IOException
+	 * @throws FileNotFoundException
+	 */
 	public static Properties openProperties(String propName,
 			Properties propDefaults, boolean bCreatePropertiesPathname)
 			throws IOException, FileNotFoundException {
@@ -321,9 +452,14 @@
 		return theProperties;
 	}
 
-	/*
-	 * * Combines two properties objects, with the second one as the default
+	/**
+	 * Combines two properties objects, with the second one as the default
 	 * properties
+	 * 
+	 * @param localProperties
+	 * @param defaultProperties
+	 * @return the combined properties
+	 * @throws IOException
 	 */
 	public static Properties combineProperties(Properties localProperties,
 			Properties defaultProperties) throws IOException {
@@ -339,23 +475,10 @@
 		return theNewProperties;
 	}
 
-	// This should only be called by the main interface on shutdown/close!!!
-	public static void saveProperties(String propName, Properties theProperties)
-			throws IOException, SecurityException {
-		saveProperties(propName, theProperties, true);
-	}
-
-	public static void saveProperties(String propName,
-			Properties theProperties, boolean bCreatePropertiesPathname)
-			throws IOException, SecurityException {
-		// write out the changed set of preferences...
-		String propertiesFilename = bCreatePropertiesPathname ? getPropertiesPathname(propName)
-				: propName;
-		FileOutputStream fout = new FileOutputStream(propertiesFilename);
-		theProperties.store(fout, "preferences");
-		fout.close();
-	}
-
+	/**
+	 * @param theFilename
+	 * @return the encoded file name
+	 */ 
 	public static String encodeFilename(String theFilename) {
 		// make theFilename legal on the local system....
 		String theSeparator = System.getProperty("file.separator");
@@ -368,6 +491,10 @@
 		return theFilename;
 	}
 
+	/**
+	 * @param baseName
+	 * @return the properties path
+	 */
 	public static String getPropertiesPathname(String baseName) {
 		if (baseName.endsWith(NAME_PROPERTIES)) {
 			return System.getProperty("user.dir")
@@ -392,12 +519,23 @@
 	 * The resulting name will be used to obtain the intial bounds value from
 	 * the properties file, which will be decoded and the specified component
 	 * will then be set to that value.
+	 * @param props 
+	 * @param theComponent 
+	 * @param names 
+	 * @param defaultValue 
 	 */
 	public static void setComponentBounds(Properties props,
 			Component theComponent, String names[], String defaultValue) {
 		setComponentBounds(props, theComponent, names, defaultValue, false);
 	}
 
+	/**
+	 * @param props
+	 * @param theComponent
+	 * @param names
+	 * @param defaultValue
+	 * @param bEnsureDesktopVisibility
+	 */
 	public static void setComponentBounds(Properties props,
 			Component theComponent, String names[], String defaultValue,
 			boolean bEnsureDesktopVisibility) {
@@ -406,12 +544,25 @@
 				bEnsureDesktopVisibility);
 	}
 
+	/**
+	 * @param props
+	 * @param theComponent
+	 * @param thePropertyName
+	 * @param defaultValue
+	 */
 	public static void setComponentBounds(Properties props,
 			Component theComponent, String thePropertyName, String defaultValue) {
 		setComponentBounds(props, theComponent, thePropertyName, defaultValue,
 				false);
 	}
 
+	/**
+	 * @param props
+	 * @param theComponent
+	 * @param thePropertyName
+	 * @param defaultValue
+	 * @param bEnsureDesktopVisibility
+	 */
 	public static void setComponentBounds(Properties props,
 			Component theComponent, String thePropertyName,
 			String defaultValue, boolean bEnsureDesktopVisibility) {
@@ -433,12 +584,22 @@
 		}
 	}
 
+	/**
+	 * @param props
+	 * @param theComponent
+	 * @param names
+	 */
 	public static void saveComponentBounds(Properties props,
 			Component theComponent, String names[]) {
 		String tmpString = getComponentPropertyName(names, STR_BOUNDS_END);
 		saveComponentBounds(props, theComponent, tmpString);
 	}
 
+	/**
+	 * @param props
+	 * @param theComponent
+	 * @param thePropertyName
+	 */
 	public static void saveComponentBounds(Properties props,
 			Component theComponent, String thePropertyName) {
 		Rectangle theBounds = theComponent.getBounds();
@@ -446,6 +607,11 @@
 		props.put(thePropertyName, theValue);
 	}
 
+	/**
+	 * @param names
+	 * @param subsystemName
+	 * @return the component property name or ""
+	 */
 	public static String getComponentPropertyName(String names[],
 			String subsystemName) {
 		String tmpString = "";
@@ -465,6 +631,8 @@
 	 * normally called to decode the location/size of a component which has been
 	 * saved into a Properties object. See encodeBounds(); Order of items in the
 	 * string is (x, y, w, h)
+	 * @param sBounds 
+	 * @return the rectangle
 	 */
 	public static Rectangle decodeBounds(String sBounds) {
 		int index;
@@ -502,6 +670,8 @@
 	/**
 	 * * Encode the bounds of a component into a comma separated list * that is
 	 * appropriate for storing in a Properties object. * See decodeBounds();
+	 * @param rBounds 
+	 * @return the encoded bounds
 	 */
 	public static String encodeBounds(Rectangle rBounds) {
 		return "" + rBounds.x + "," + rBounds.y + "," + rBounds.width + ","
@@ -516,6 +686,9 @@
 	 * necessary to turn a properties object into a string that has legal
 	 * "value" syntax (they actually do more than they need to, but its all
 	 * non-destructive).
+	 * @param thePropertyString 
+	 * @return the properties from the string
+	 * @throws IOException 
 	 */
 	public static Properties getPropertiesFromString(String thePropertyString)
 			throws IOException {
@@ -530,6 +703,11 @@
 		return props;
 	}
 
+	/**
+	 * @param theEncodedPropertyString
+	 * @return the properties
+	 * @throws IOException
+	 */
 	public static Properties getPropertiesFromEncodedString(
 			String theEncodedPropertyString) throws IOException {
 		if (theEncodedPropertyString == null)
@@ -537,6 +715,10 @@
 		return (getPropertiesFromString(decodeName(theEncodedPropertyString)));
 	}
 
+	/**
+	 * @param theEncodedPropertyString
+	 * @return the properties
+	 */
 	public static Properties encodedStringToProperties(
 			String theEncodedPropertyString) {
 		try {
@@ -546,6 +728,12 @@
 		}
 	}
 
+	/**
+	 * @param props
+	 * @param comment
+	 * @return the string
+	 * @throws IOException
+	 */
 	public static String savePropertiesToString(Properties props, String comment)
 			throws IOException {
 		if (props == null)
@@ -557,6 +745,12 @@
 		return tmpString;
 	}
 
+	/**
+	 * @param props
+	 * @param comment
+	 * @return the encoded string
+	 * @throws IOException
+	 */
 	public static String savePropertiesToEncodedString(Properties props,
 			String comment) throws IOException {
 		if (props == null)
@@ -564,6 +758,10 @@
 		return encodeName(savePropertiesToString(props, comment));
 	}
 
+	/**
+	 * @param props
+	 * @return the encoded string
+	 */
 	public static String propertiesToEncodedString(Properties props) {
 		try {
 			return savePropertiesToEncodedString(props, "");
@@ -573,4 +771,9 @@
 		}
 		return null;
 	}
+	
+	private PropertyUtils()
+	{
+		// no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/ResourceUtils.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/ResourceUtils.java
index 07bdff7..75b0f11 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/ResourceUtils.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/ResourceUtils.java
@@ -27,8 +27,9 @@
  */
 public abstract class ResourceUtils {
 	private static Logger _log = JSFUICommonPlugin.getLogger(ResourceUtils.class);
-
-	// This is the resource bundle.
+	/**
+	 * the resource bundle accessible by all children
+	 */
 	protected ResourceBundle _resources;
 
 	/**
@@ -57,13 +58,6 @@
 	}
 
 	/**
-	 * Get the static stored resource bundle for the TRP.
-	 */
-	public ResourceBundle getResourceBundle() {
-		return _resources;
-	}
-
-	/**
 	 * Get the property defined in the resource bundle for the given key. This
 	 * property should be an integer. If none is defined
 	 * (MissingResourceException), return the default.
@@ -72,6 +66,7 @@
 	 *            the key in the resource bundle.
 	 * @param defaultValue
 	 *            default int to return if no value is found for the key.
+	 * @return the integer value for key or defaultValue if none
 	 */
 	public int getValue(String key, int defaultValue) {
 		String stringValue = getString(key);
@@ -96,6 +91,7 @@
 	 *            the key in the resource bundle.
 	 * @param defaultValue
 	 *            default long to return if no value is found for the key.
+	 * @return the long value for key or defaultValue if none
 	 */
 	public long getValue(String key, long defaultValue) {
 		String stringValue = getString(key);
@@ -118,6 +114,7 @@
 	 * 
 	 * @param key
 	 *            the key in the resource bundle.
+	 * @return true if there is a resource corresponding to key
 	 */
 	public boolean isResource(String key) {
 		return getString(key).equals("" + true);
@@ -129,6 +126,7 @@
 	 * 
 	 * @param key
 	 *            the key in the resource bundle.
+	 * @return the string value for key or key if not found
 	 */
 	public String getString(String key) {
 		try {
@@ -269,6 +267,11 @@
 		return formatter.format(args);
 	}
 
+	/**
+	 * Use in the try-finally idiom for inputStream to ensure close
+	 * and suppress exceptions on close
+	 * @param inputStream
+	 */
 	public static void ensureClosed(InputStream inputStream) {
 		if (inputStream != null) {
 			try {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/StyleCombo.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/StyleCombo.java
index bbcf2ce..4eccfa6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/StyleCombo.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/StyleCombo.java
@@ -1862,10 +1862,9 @@
 		}
 	}
 
-	public String getDefaultValue() {
-		return defaultValue;
-	}
-
+	/**
+	 * @param defaultValue
+	 */
 	public void setDefaultValue(String defaultValue) {
 		this.defaultValue = defaultValue;
 		int index = Arrays.asList(getTableItems()).indexOf(defaultValue);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/UTF8Util.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/UTF8Util.java
index 4f6b148..31aac19 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/UTF8Util.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/UTF8Util.java
@@ -12,13 +12,18 @@
 package org.eclipse.jst.jsf.common.ui.internal.utils;
 
 /**
+ * TODO: this class doesn't seem to be in use
  * @author mengbo
  * @version 1.5
  */
-public class UTF8Util {
+public final class UTF8Util {
 	private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
 			'6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
 
+	/**
+	 * @param s
+	 * @return the unwound string
+	 */
 	public static String unwindEscapeChars(String s) {
 		StringBuffer sb = new StringBuffer(s.length());
 		int length = s.length();
@@ -77,4 +82,8 @@
 		return HEX_DIGITS[(halfByte & 0xF)];
 	}
 
+	private UTF8Util()
+	{
+		// no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/WebrootUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/WebrootUtil.java
index 100cdad..bbe343d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/WebrootUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/WebrootUtil.java
@@ -106,9 +106,8 @@
 	public static IFolder getWebContentFolder(IProject project) {
 		IPath webContentPath = getWebContentPath(project);
 		IFolder folder = null;
-		if (webContentPath != null) {			
-			folder = project.getFolder(webContentPath.removeFirstSegments(webContentPath.segmentCount() - 1));
-
+		if (webContentPath != null) {
+			folder = project.getFolder(webContentPath.removeFirstSegments(1));
 		}
 		return folder;
 	}
@@ -172,6 +171,10 @@
 		return strWebrootPath;
 	}
 
+	/**
+	 * @param strWebPath
+	 * @return the page name
+	 */
 	public static String getPageNameFromWebPath(String strWebPath) {
 		String pageName = strWebPath;
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/WorkspaceUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/WorkspaceUtil.java
index 3423c25..5ad6b19 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/WorkspaceUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common.ui/src/org/eclipse/jst/jsf/common/ui/internal/utils/WorkspaceUtil.java
@@ -19,7 +19,6 @@
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
@@ -36,21 +35,19 @@
  * 
  * This class implements management of resource in a workspace.
  */
-public class WorkspaceUtil {
+public final class WorkspaceUtil {
 	/** log instance */
 	private static final Logger log = JSFUICommonPlugin
 			.getLogger(WorkspaceUtil.class);
 
-	public static IWorkspace getWorkspace() {
-		return ResourcesPlugin.getWorkspace();
-	}
-
-	public WorkspaceUtil() {
-	    // TODO: can we delete this?
+	private WorkspaceUtil() {
+	    // no external instantiation
 	}
 
 	/**
 	 * Create the given file in the workspace resource info tree.
+	 * @param resource 
+	 * @param contents 
 	 */
 	public static void ensureExistsInWorkspace(final IFile resource,
 			final InputStream contents) {
@@ -68,7 +65,7 @@
 			}
 		};
 		try {
-			getWorkspace().run(body, null);
+			ResourcesPlugin.getWorkspace().run(body, null);
 		} catch (CoreException e) {
 			// Test.EclipseWorkspaceTest.Error.FileCreationInWorkspace = Fail in
 			// creating file:{0} in the workspace resource info tree.
@@ -80,6 +77,8 @@
 
 	/**
 	 * Create the given file in the workspace resource info tree.
+	 * @param resource 
+	 * @param contents 
 	 */
 	public static void ensureExistsInWorkspace(IFile resource, String contents) {
 		// FIXME: We'll need some way for handing file encoding.
@@ -89,6 +88,8 @@
 
 	/**
 	 * Create the given resource in the workspace resource info tree.
+	 * @param resource 
+	 * @param local 
 	 */
 	public static void ensureExistsInWorkspace(final IResource resource,
 			final boolean local) {
@@ -98,7 +99,7 @@
 			}
 		};
 		try {
-			getWorkspace().run(body, null);
+			ResourcesPlugin.getWorkspace().run(body, null);
 		} catch (CoreException e) {
 			// Test.EclipseWorkspaceTest.Error.ResourceCreationInWorkspace =
 			// Fail in creating resource:{0} in the workspace resource info
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/.options b/jsf/plugins/org.eclipse.jst.jsf.common/.options
new file mode 100644
index 0000000..41f99dd
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/.options
@@ -0,0 +1,2 @@
+org.eclipse.jst.jsf.common/debug=false
+org.eclipse.jst.jsf.common/debug/metadataload=false
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/.settings/org.eclipse.jdt.core.prefs b/jsf/plugins/org.eclipse.jst.jsf.common/.settings/org.eclipse.jdt.core.prefs
index 47fdcaf..be91a99 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/.settings/org.eclipse.jdt.core.prefs
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 15 14:57:39 PDT 2007
+#Tue Oct 23 12:03:01 PDT 2007
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
@@ -11,7 +11,7 @@
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=warning
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=error
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
@@ -65,11 +65,13 @@
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=error
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.common/META-INF/MANIFEST.MF
index af9105f..b810514 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/META-INF/MANIFEST.MF
@@ -2,13 +2,20 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.eclipse.jst.jsf.common;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Activator: org.eclipse.jst.jsf.common.JSFCommonPlugin$Implementation
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jst.jsf.common;x-internal:=true,
  org.eclipse.jst.jsf.common.dom,
  org.eclipse.jst.jsf.common.internal;x-friends:="org.eclipse.jst.jsf.core",
- org.eclipse.jst.jsf.common.internal.types;x-friends:="org.eclipse.jst.jsf.core,org.eclipse.jst.jsf.core.tests,org.eclipse.jst.jsf.validation.el.tests,org.eclipse.jst.jsf.designtime.tests,org.eclipse.jst.jsf.context.symbol.tests",
+ org.eclipse.jst.jsf.common.internal.policy,
+ org.eclipse.jst.jsf.common.internal.resource;x-friends:="org.eclipse.jst.jsf.core.tests",
+ org.eclipse.jst.jsf.common.internal.types;
+  x-friends:="org.eclipse.jst.jsf.core,
+   org.eclipse.jst.jsf.core.tests,
+   org.eclipse.jst.jsf.validation.el.tests,
+   org.eclipse.jst.jsf.designtime.tests,
+   org.eclipse.jst.jsf.context.symbol.tests",
  org.eclipse.jst.jsf.common.metadata,
  org.eclipse.jst.jsf.common.metadata.internal;x-friends:="org.eclipse.jst.jsf.metadata.tests",
  org.eclipse.jst.jsf.common.metadata.internal.impl;x-internal:=true,
@@ -42,11 +49,12 @@
  org.eclipse.jst.jsp.core;bundle-version="[1.1.0,1.3.0)",
  org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.sse.ui;bundle-version="[1.0.101,1.1.0)",
+ org.eclipse.wst.sse.ui;bundle-version="[1.0.101,1.2.0)",
  org.eclipse.wst.xml.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.jdt.core;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.emf.edit.ui;bundle-version="[2.2.0,2.4.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.4.0)"
-Eclipse-LazyStart: true
+ org.eclipse.emf.edit.ui;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.jdt.ui;bundle-version="[3.2.0,4.0.0)"
+Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %plugin.provider
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/plugin.xml b/jsf/plugins/org.eclipse.jst.jsf.common/plugin.xml
index dd1a730..1e03d60 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/plugin.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/plugin.xml
@@ -23,6 +23,13 @@
             ordinal="10">
       </domainSourceModelTypes>   
    </extension>
+   <extension
+         point="org.eclipse.jst.jsf.common.domainSourceModelTypeTranslators">
+      <domainSourceModelTypeTranslator
+            domainSourceModelTypeId="DefaultMetaDataTagLibraryHandler"
+            translatorClass="org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataFilesTranslator">
+      </domainSourceModelTypeTranslator>
+   </extension>
   <extension point="org.eclipse.emf.ecore.generated_package">
     <package 
        uri = "http:///org/eclipse/jst/jsf/context/symbol.ecore" 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainLoadingStrategies.exsd b/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainLoadingStrategies.exsd
index 924c679..a2b609d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainLoadingStrategies.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainLoadingStrategies.exsd
@@ -72,7 +72,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         JSF 1.0
+         2.0
       </documentation>
    </annotation>
 
@@ -113,17 +113,8 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         /*******************************************************************************
- * Copyright (c) 2007 Oracle Corporation.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Oracle - initial API and implementation
- *    
- ********************************************************************************/
+         Copyright 2007 Oracle
+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
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainSourceModelTypeTranslators.exsd b/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainSourceModelTypeTranslators.exsd
index 34e56ad..1d9c020 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainSourceModelTypeTranslators.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainSourceModelTypeTranslators.exsd
@@ -70,7 +70,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         WTP JSF 1.0
+         2.0
       </documentation>
    </annotation>
 
@@ -112,17 +112,8 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         /*******************************************************************************
- * Copyright (c) 2007 Oracle Corporation.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Oracle - initial API and implementation
- *    
- ********************************************************************************/
+         Copyright 2007 Oracle
+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
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainSourceModelTypes.exsd b/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainSourceModelTypes.exsd
index 7138df1..4bb747e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainSourceModelTypes.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/schema/DomainSourceModelTypes.exsd
@@ -13,7 +13,7 @@
 
    <element name="extension">
       <complexType>
-         <sequence>
+         <sequence minOccurs="0" maxOccurs="unbounded">
             <element ref="domainSourceModelTypes"/>
          </sequence>
          <attribute name="point" type="string" use="required">
@@ -84,7 +84,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         WTP JSF 1.0
+         2.0
       </documentation>
    </annotation>
 
@@ -93,15 +93,7 @@
          <meta.section type="examples"/>
       </appInfo>
       <documentation>
-      <pre>
-         &lt;extension
-         point=&quot;org.eclipse.jst.jsf.common.domainSourceModelTypes&quot;&gt;
-      &lt;domainSourceModelTypes
-            domainId=&quot;TagLibraryDomain&quot;
-            domainSourceModelTypeId=&quot;DefaultMetaDataTagLibraryHandler&quot;
-            locator=&quot;org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataLocator&quot;
-            ordinal=&quot;10&quot;&gt;
-      &lt;/domainSourceModelTypes&gt;</pre>
+         
       </documentation>
    </annotation>
 
@@ -128,17 +120,8 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         /*******************************************************************************
- * Copyright (c) 2007 Oracle Corporation.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Oracle - initial API and implementation
- *    
- ********************************************************************************/
+         Copyright 2007 Oracle
+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
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/schema/StandardMetaDataFiles.exsd b/jsf/plugins/org.eclipse.jst.jsf.common/schema/StandardMetaDataFiles.exsd
index c6837d3..1ab7d63 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/schema/StandardMetaDataFiles.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/schema/StandardMetaDataFiles.exsd
@@ -7,6 +7,8 @@
       </appInfo>
       <documentation>
          Defines a file of metadata for a given URI in &quot;standard&quot; form loadable by &lt;code&gt;org.eclipse.jst.jsf.common.metadata model&lt;/code&gt;
+
+&lt;p&gt;&lt;b&gt;This extension point is provisional and subject to change&lt;/b&gt;&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -82,7 +84,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         WTP JSF 1.0
+         2.0
       </documentation>
    </annotation>
 
@@ -124,17 +126,8 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         /*******************************************************************************
- * Copyright (c) 2007 Oracle Corporation.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Oracle - initial API and implementation
- *    
- ********************************************************************************/
+         Copyright 2007 Oracle
+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
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/schema/annotationFiles.exsd b/jsf/plugins/org.eclipse.jst.jsf.common/schema/annotationFiles.exsd
index fabf170..4db4fe7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/schema/annotationFiles.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/schema/annotationFiles.exsd
@@ -7,6 +7,8 @@
       </appInfo>
       <documentation>
          Adds annotation meta-data to a content model.  An extending plugin may only create one annotation file for a given URI.
+
+&lt;p&gt;&lt;b&gt;This extension point is provisional and subject to change&lt;/b&gt;&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -92,7 +94,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         WTP 1.5
+         1.5
       </documentation>
    </annotation>
 
@@ -128,7 +130,8 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         
+         Copyright 2006 Oracle
+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
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/JSFCommonPlugin.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/JSFCommonPlugin.java
index 032f4f0..83e0407 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/JSFCommonPlugin.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/JSFCommonPlugin.java
@@ -33,6 +33,7 @@
 /**
  * This is the central singleton for the My edit plugin.
  * <!-- begin-user-doc -->
+ * This class is not API.
  * <!-- end-user-doc -->
  * @generated
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/AttrDOMAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/AttrDOMAdapter.java
new file mode 100644
index 0000000..1d55867
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/AttrDOMAdapter.java
@@ -0,0 +1,82 @@
+package org.eclipse.jst.jsf.common.dom;
+
+import org.w3c.dom.Node;
+
+/**
+ * Generic adapter for DOM attribute structures.
+ * 
+ * @author cbateman
+ * 
+ * <p>
+ * <b>Provisional API - subject to change</b>
+ * </p>
+ */
+public abstract class AttrDOMAdapter extends DOMAdapter
+{
+
+    private AttributeIdentifier     _attributeId; // lazily instantiated.
+    private final ElementDOMAdapter _owner;
+
+    /**
+     * @param owner
+     */
+    protected AttrDOMAdapter(final ElementDOMAdapter owner)
+    {
+        _owner = owner;
+    }
+
+    /**
+     * The default implementation always returns the owner specified in the
+     * constructor.
+     * 
+     * @return the element that owns this attribute
+     */
+    public ElementDOMAdapter getOwningElement()
+    {
+        return _owner;
+    }
+
+    /**
+     * @return the value of the attribute. May return null if the attribute has
+     *         no value.
+     */
+    public abstract String getValue();
+
+    @Override
+    public final short getNodeType()
+    {
+        return Node.ATTRIBUTE_NODE;
+    }
+
+    /**
+     * @return the attribute identifier
+     */
+    public final AttributeIdentifier getAttributeIdentifier()
+    {
+        synchronized (this)
+        {
+            if (_attributeId == null)
+            {
+                _attributeId = new MyAttributeIdentifier();
+            }
+        }
+        return _attributeId;
+    }
+
+    private class MyAttributeIdentifier extends AttributeIdentifier
+    {
+
+        @Override
+        public String getName()
+        {
+            return AttrDOMAdapter.this.getLocalName();
+        }
+
+        @Override
+        public TagIdentifier getTagIdentifier()
+        {
+            return getOwningElement().getTagId();
+        }
+
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/AttributeIdentifier.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/AttributeIdentifier.java
new file mode 100644
index 0000000..017f2b2
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/AttributeIdentifier.java
@@ -0,0 +1,70 @@
+package org.eclipse.jst.jsf.common.dom;
+
+/**
+ * Uniquely identifies a named attribute on a tag usint TagIdentifier as a way
+ * to uniquely identify the host tag.  All instances should be considered 
+ * immutable and idempotent.  Factories may cache copies as transparent 
+ * singletons for unique TagIdentifier/attribute.
+ * 
+ * THIS CLASS IS NOT API AND SHOULD NOT BE USED
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class AttributeIdentifier
+{
+    /**
+     * @return the attribute name (local name, namespace prefix is currently ignored)
+     */
+    public abstract String getName();
+    
+    /**
+     * @return the tag identifier
+     */
+    public abstract TagIdentifier getTagIdentifier();
+    
+    public final boolean equals(Object compareTo)
+    {
+        if (compareTo instanceof AttributeIdentifier)
+        {
+            return isSameAttributeType((AttributeIdentifier) compareTo);
+        }
+        return false;
+    }
+    
+    public final int hashCode()
+    {
+        // use toLowerCase to ensure equals matches
+        int hashCode = getName().toLowerCase().hashCode();
+        
+        int tagCode = getTagIdentifier().hashCode();
+       
+        hashCode = hashCode ^ tagCode;
+        
+        return hashCode;
+    }
+
+    /**
+     * @param attributeId
+     * @return true if attributeId represents the same attribute as this.
+     */
+    public final boolean isSameAttributeType(AttributeIdentifier attributeId)
+    {
+        // if same object, always true
+        if (attributeId == this)
+        {
+            return true;
+        }
+        
+
+        // if tag identifiers not same, then always false.
+        if (!getTagIdentifier().isSameTagType(attributeId.getTagIdentifier()))
+        {
+            return false;
+        }
+
+        // if tag id is the same, the tag name must be too.
+        return getName().toLowerCase().equals(attributeId.getName().toLowerCase());
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/DOMAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/DOMAdapter.java
new file mode 100644
index 0000000..e4abe58
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/DOMAdapter.java
@@ -0,0 +1,33 @@
+package org.eclipse.jst.jsf.common.dom;
+
+/**
+ * A generic adapter that can adapt some non-DOM
+ * things to a dom-like structure like an IRegion to a DOM-like structure.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class DOMAdapter
+{
+    /**
+     * @return the node type.  Conforms to Node.getNodeType.
+     */
+    public abstract short getNodeType();
+    
+    /**
+     * @return the name prefix.  Conforms to W3C Node.getPrefix()
+     */
+    public abstract String getPrefix();
+    
+    /**
+     * @return the local part of the name.  Conforms to W3C Node.getLocalName()
+     */
+    public abstract String getLocalName();
+    
+    /**
+     * @return the name of the node.  Conforms the W3C Node.getNodeName interface
+     */
+    public abstract String getNodeName();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/ElementDOMAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/ElementDOMAdapter.java
new file mode 100644
index 0000000..18ffaa9
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/ElementDOMAdapter.java
@@ -0,0 +1,74 @@
+package org.eclipse.jst.jsf.common.dom;
+
+import java.util.Map;
+
+import org.w3c.dom.Node;
+
+/**
+ * T
+ * @author cbateman
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ *
+ */
+public abstract class ElementDOMAdapter extends DOMAdapter
+{
+    private TagIdentifier       _tagIdentifier; // lazily initialized
+    
+    /**
+     * Map should be considered immutable and may throw exceptions if
+     * mutations are attempted.
+     * 
+     * @return a nodeName keyed map of attributes belonging to this element
+     */
+    public abstract Map<String, ? extends AttrDOMAdapter> getAttributes();
+
+    @Override
+    public final short getNodeType()
+    {
+        return  Node.ELEMENT_NODE;
+    }
+
+    /**
+     * @return the namespace uri for element or null if not applicable (i.e. HTML).
+     */
+    public abstract String getNamespace();
+    
+    /**
+     * @return the tag identifier for this attribute
+     */
+    public final TagIdentifier getTagId()
+    {
+        synchronized(this)
+        {
+            if (_tagIdentifier == null)
+            {
+                _tagIdentifier = new MyTagIdentifier();
+            }
+        }
+        return _tagIdentifier; 
+    }
+    
+    private final class MyTagIdentifier extends TagIdentifier
+    {
+        @Override
+        public String getTagName()
+        {
+            return getLocalName();
+        }
+
+        @Override
+        public String getUri()
+        {
+            return getNamespace();
+        }
+
+        @Override
+        public boolean isJSPTag()
+        {
+            // shouldn't be called
+            throw new UnsupportedOperationException("jsp flag not supported on this identifier");
+        }
+        
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/TagIdentifier.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/TagIdentifier.java
index 2b3d46b..3d675a6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/TagIdentifier.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/dom/TagIdentifier.java
@@ -23,6 +23,8 @@
  * All tag TagIdentifier<i>s</i> should be considered immutable and idempotent.  
  * TagIdentifier instances may be cached by the factory.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
@@ -60,7 +62,8 @@
     
     public final int hashCode()
     {
-        int hashCode = getTagName().hashCode();
+        // use toLowerCase to ensure equals matches
+        int hashCode = getTagName().toLowerCase().hashCode();
         
         String uri = getUri();
         if (uri != null)
@@ -83,24 +86,34 @@
         
         final String uri = tagWrapper.getUri();
         
-        if (uri == null && getUri() != null)
+        if (uri == null)
         {
-            return false;
+            if (getUri() != null)
+            {
+                return false;
+            }
         }
         else if (uri.equals(getUri()))
         {
             final String tagName = tagWrapper.getTagName();
             
-            if (tagName == null && getTagName() != null)
+            if (tagName == null)
             {
-                return false;
+                if(getTagName() != null)
+                {
+                    return false;
+                }
             }
-
-            // uri and tag name must both the same for it to be the same type
-            // TODO: the ignore case thing is dependent on the type of container document
-            if (tagName.equalsIgnoreCase((getTagName())))
+            else
             {
-                return true;
+                // uri and tag name must both the same for it to be the same type
+                // TODO: the ignore case thing is dependent on the type of container document
+                // Use toLower instead of equalsIgnoreCase to ensure that hashCode generates
+                // a hashCode that guarantees x.equals(y) => x.hashCode == y.hashCode
+                if (tagName.toLowerCase().equals((getTagName().toLowerCase())))
+                {
+                    return true;
+                }
             }
         }
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/ITestTracker.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/ITestTracker.java
new file mode 100644
index 0000000..a3369aa
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/ITestTracker.java
@@ -0,0 +1,40 @@
+package org.eclipse.jst.jsf.common.internal;
+
+/**
+ * An injection interface that allows classes to selectively report test progress.
+ * 
+ * @author cbateman
+ *
+ */
+public interface ITestTracker 
+{
+    /**
+     * Event types
+     *
+     */
+    public enum Event
+    {
+        /**
+         * Signals that tracking should begin on the eventLabel
+         * The seqId must be repeated on the STOP_TRACKING event
+         * for the same event.
+         */
+        START_TRACKING,
+        /**
+         * Signals that tracking should stop on the named event
+         * for the seqId that was passed first in the START_TRACKING.
+         * 
+         */
+        STOP_TRACKING
+    }
+    
+    /**
+     * Fires the event of type event, a unique instance tracking seqId
+     * and a label called eventLabel.
+     * 
+     * @param event
+     * @param seqId
+     * @param eventLabel
+     */
+    void fireEvent(Event event, long seqId, String eventLabel);
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/RunOnCompletionPattern.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/RunOnCompletionPattern.java
new file mode 100644
index 0000000..ce26bf3
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/RunOnCompletionPattern.java
@@ -0,0 +1,66 @@
+package org.eclipse.jst.jsf.common.internal;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jst.jsf.common.JSFCommonPlugin;
+
+/**
+ * A pattern that runs a Job and either joins on the job's completion
+ * or runs some completion behaviour.
+ * 
+ * @author cbateman
+ *
+ */
+public class RunOnCompletionPattern implements Runnable
+{
+    private final Job  _job;
+    private final Runnable _runAfter;
+    
+    /**
+     * @param job
+     * @param runAfter
+     */
+    public RunOnCompletionPattern(Job  job, Runnable runAfter)
+    {
+        _job = job;
+        _runAfter = runAfter;
+    }
+
+    public void run()
+    {
+        if (_runAfter != null)
+        {
+            _job.addJobChangeListener(new JobChangeAdapter()
+            {
+
+                @Override
+                public void done(IJobChangeEvent event)
+                {
+                    if (event.getResult().getSeverity() != IStatus.ERROR)
+                    {
+                        _runAfter.run();
+                    }
+                }
+                
+            });
+        }
+
+        _job.schedule();
+        
+        if (_runAfter == null)
+        {
+            try
+            {
+                _job.join();
+            }
+            catch (InterruptedException e)
+            {
+                JSFCommonPlugin.log(e, "Joining on job");
+            }
+        }
+    }
+    
+    
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/AbstractManagedObject.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/AbstractManagedObject.java
new file mode 100644
index 0000000..12f76d8
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/AbstractManagedObject.java
@@ -0,0 +1,14 @@
+package org.eclipse.jst.jsf.common.internal.managedobject;
+
+/**
+ * Sub-class for managed objects.
+ *
+ */
+public abstract class AbstractManagedObject implements IManagedObject 
+{
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.jsf.common.internal.managedobject.IManagedObject#dispose()
+     */
+    public abstract void dispose(); 
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/IManagedObject.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/IManagedObject.java
new file mode 100644
index 0000000..627463b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/managedobject/IManagedObject.java
@@ -0,0 +1,15 @@
+package org.eclipse.jst.jsf.common.internal.managedobject;
+
+/**
+ * Represents an object that wishes to be managed by the framework.
+ * 
+ * Clients should not implement: sub-class AbstractManagedObject instead.
+ *
+ */
+public interface IManagedObject 
+{
+    /**
+     * Called by the object client to indicate is finished with the object
+     */
+    void dispose();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/policy/IIdentifiable.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/policy/IIdentifiable.java
new file mode 100644
index 0000000..a676419
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/policy/IIdentifiable.java
@@ -0,0 +1,15 @@
+package org.eclipse.jst.jsf.common.internal.policy;
+
+/**
+ * An object with an unique identity
+ * @author cbateman
+ * @param <IDTYPE> 
+ *
+ */
+public interface IIdentifiable<IDTYPE>
+{
+    /**
+     * @return the unique identifier
+     */
+    IDTYPE getId();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/policy/IIteratorPolicy.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/policy/IIteratorPolicy.java
new file mode 100644
index 0000000..df28ec1
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/policy/IIteratorPolicy.java
@@ -0,0 +1,23 @@
+package org.eclipse.jst.jsf.common.internal.policy;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * A policy that allows a strategy composite to change the order in which
+ * it queries it's list of strategies.
+ * 
+ * @author cbateman
+ * @param <ITERATORTYPE> 
+ *
+ */
+public interface IIteratorPolicy<ITERATORTYPE>
+{
+    /**
+     * @param forCollection 
+     * @return an iterator that controls the ordering through forCollection
+     * in a policy directed way.  The policy may take a copy of the collection
+     * or may choose to iterate in place.
+     */
+    Iterator<ITERATORTYPE>  getIterator(Collection<ITERATORTYPE> forCollection);
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/policy/IdentifierOrderedIteratorPolicy.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/policy/IdentifierOrderedIteratorPolicy.java
new file mode 100644
index 0000000..838ff80
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/policy/IdentifierOrderedIteratorPolicy.java
@@ -0,0 +1,94 @@
+package org.eclipse.jst.jsf.common.internal.policy;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/**
+ * 
+ * @author cbateman
+ *
+ * @param <ITERATORTYPE>
+ */
+public class IdentifierOrderedIteratorPolicy<ITERATORTYPE> implements
+        IIteratorPolicy<ITERATORTYPE>
+{
+    private final Iterable<ITERATORTYPE>   _policyOrder;
+    
+    /**
+     * @param policyOrder
+     */
+    public IdentifierOrderedIteratorPolicy(final Iterable<ITERATORTYPE> policyOrder)
+    {
+        _policyOrder = policyOrder;
+    }
+    
+    public Iterator<ITERATORTYPE> getIterator(
+            final Collection<ITERATORTYPE> forCollection)
+    {
+        return new MyIterator(forCollection);
+    }
+
+    private class MyIterator implements Iterator
+    {
+        private final List<ITERATORTYPE>         _items;
+        private final Iterator<ITERATORTYPE>    _policyIterator;
+        private ITERATORTYPE                    _next;
+        
+        MyIterator(final Collection<ITERATORTYPE> collection)
+        {
+            _items = new ArrayList();
+            _items.addAll(collection);
+
+            _policyIterator = _policyOrder.iterator();
+            _next = findNext();
+        }
+        
+        public boolean hasNext()
+        {
+            return _next != null;
+        }
+
+        public Object next()
+        {
+            if (_next != null)
+            {
+                Object next = _next;
+                //calculate next one before returning
+                _next = findNext();
+                return next;
+            }
+            
+            throw new NoSuchElementException("No more elements");
+        }
+
+        public void remove()
+        {
+            throw new UnsupportedOperationException();
+        }
+        
+        private ITERATORTYPE findNext()
+        {
+            while (_policyIterator.hasNext())
+            {
+                ITERATORTYPE next = _policyIterator.next();
+                if (_items.contains(next))
+                {
+                    _items.remove(next);
+                    return next;
+                }
+            }
+            
+            // we have exhausted the _items that are in the policy iterator
+            // now return any further _items in the order they are in the list
+            if (_items.size() > 0)
+            {
+                return _items.remove(0);
+            }
+            
+            return null;
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/IResourceLifecycleListener.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/IResourceLifecycleListener.java
new file mode 100644
index 0000000..a3ab30f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/IResourceLifecycleListener.java
@@ -0,0 +1,76 @@
+package org.eclipse.jst.jsf.common.internal.resource;
+
+/**
+ * Listener can register for events ona particular LifecycleListener
+ * 
+ * @author cbateman
+ *
+ */
+public interface IResourceLifecycleListener 
+{
+    /**
+     * Listener accepts the resource lifecycle event
+     * 
+     * @param event
+     * @return the result of accepting the event
+     */
+    EventResult acceptEvent(ResourceLifecycleEvent event);
+
+    /**
+     * @author cbateman
+     *
+     */
+    public static class EventResult
+    {
+        private static EventResult DEFAULT;
+
+        /**
+         * @return an event result with defaults initialized
+         */
+        public static EventResult getDefaultEventResult()
+        {
+            if (DEFAULT == null)
+            {
+                DEFAULT = new EventResult();
+            }
+            return DEFAULT;
+        }
+
+        private static EventResult DISPOSE_AFTER_EVENT;
+
+        /**
+         * @return an event result with default except dispose after
+         * is set
+         */
+        public static EventResult getDisposeAfterEventResult()
+        {
+            if (DISPOSE_AFTER_EVENT == null)
+            {
+                DISPOSE_AFTER_EVENT = new EventResult();
+                DISPOSE_AFTER_EVENT.setDisposeAfterEvent(true);
+            }
+            return DISPOSE_AFTER_EVENT;
+        }
+
+        /**
+         * set to true if after the current event is finished firing, the source
+         * should be disposed. If self-disposal is not applicable, the flag is ignored
+         */
+        protected boolean _disposeAfterEvent;
+
+        /**
+         * @return the remove listener flag
+         */
+        public boolean getDisposeAfterEvent()
+        {
+            return _disposeAfterEvent;
+        }
+
+        /**
+         * @param disposeAfterEvent
+         */
+        protected void setDisposeAfterEvent(boolean disposeAfterEvent) {
+            _disposeAfterEvent = disposeAfterEvent;
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java
new file mode 100644
index 0000000..f55d048
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java
@@ -0,0 +1,348 @@
+package org.eclipse.jst.jsf.common.internal.resource;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jst.jsf.common.internal.ITestTracker;
+import org.eclipse.jst.jsf.common.internal.ITestTracker.Event;
+import org.eclipse.jst.jsf.common.internal.resource.IResourceLifecycleListener.EventResult;
+import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.EventType;
+import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.ReasonType;
+
+/**
+ * Listens to resource changes and fires lifecycle events
+ * 
+ * @author cbateman
+ *
+ */
+public class LifecycleListener implements IResourceChangeListener
+{
+    private final static boolean                            ENABLE_TEST_TRACKING
+                                                                = false;
+    private static long                                     _seqId;
+    
+    private final List<IResource>                           _resources;
+    private final CopyOnWriteArrayList<IResourceLifecycleListener>  _listeners;
+    private boolean                                         _isDisposed = false;
+    private ITestTracker                                    _testTracker; // == null; initialized by setter injection
+
+    /**
+     * Initialize an inactive lifecycle listener.  A workspace listener will not
+     * be installed by this constructor.  The object created using this constructor
+     * will not fire any events until addResource is called at least once to add
+     * a target resource
+     */
+    public LifecycleListener()
+    {
+        _resources = new ArrayList<IResource>();
+        _listeners = new CopyOnWriteArrayList<IResourceLifecycleListener>();
+    }
+
+    /**
+     * Create a new lifecycle listener for the res
+     * @param res
+     */
+    public LifecycleListener(final IResource res)
+    {
+        this();
+        _resources.add(res);
+        ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
+    }
+
+    /**
+     * @param resources
+     */
+    public LifecycleListener(final List<IResource> resources)
+    {
+        this();
+        _resources.addAll(resources);
+        ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
+    }
+    
+
+    /**
+     * @param testTracker
+     */
+    public final void setTestTracker(final ITestTracker testTracker)
+    {
+        _testTracker = testTracker;
+    }
+
+    /**
+     * @param res
+     */
+    public void addResource(final IResource res)
+    {
+        synchronized(_resources)
+        {
+            final int preSize = _resources.size();
+            if (!_resources.contains(res))
+            {
+                _resources.add(res);
+            }
+            
+            // if the size of the array was 0
+            // and is now greater, make sure the listener is added
+            if (preSize == 0
+                    && _resources.size() > 0)
+            {
+                ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
+            }
+        }
+    }
+
+    /**
+     * @param res
+     */
+    public void removeResource(final IResource res)
+    {
+        synchronized(_resources)
+        {
+            _resources.remove(res);
+            
+            // if there are no longer target resources,
+            // remove the workspace listener
+            if (_resources.size() == 0)
+            {
+                ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
+            }
+        }
+    }
+
+    /**
+     * Release the resource change listener
+     */
+    public void dispose()
+    {
+        if (!_isDisposed)
+        {
+            // remove first to minimize the chance that the listener will
+            // be triggered during the remainder of dispose
+            ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
+
+            // don't clear the listener list currently because of 
+            // concurrent change problems.
+
+            _isDisposed = true;
+        }
+    }
+
+    /**
+     * @return true if the listener has been disposed
+     */
+    public boolean isDisposed() {
+        return _isDisposed;
+    }
+
+    /**
+     * Adds listener to the list of objects registered to receive 
+     * lifecycle events for this resource.  Only adds the listener
+     * if it is not already in the list.
+     * 
+     * Method is thread-safe and may block the caller
+     * 
+     * Throws {@link IllegalStateException} if isDisposed() == true
+     * 
+     * @param listener
+     */
+    public void addListener(final IResourceLifecycleListener listener)
+    {
+        if (isDisposed())
+        {
+            throw new IllegalStateException();
+        }
+        _listeners.addIfAbsent(listener);
+    }
+
+    /**
+     * Removes listener from the list of registered listeners
+     * 
+     * Method is thread-safe and may block the caller
+     * 
+     * Throws {@link IllegalStateException} if isDisposed() == true
+     *
+     * @param listener
+     */
+    public void removeListener(final IResourceLifecycleListener listener)
+    {
+        if (isDisposed())
+        {
+            throw new IllegalStateException();
+        }
+        _listeners.remove(listener);
+    }
+
+    public void resourceChanged(final IResourceChangeEvent event) 
+    {
+        final long seqId = _seqId++;
+        
+        if (ENABLE_TEST_TRACKING && _testTracker != null)
+        {
+            _testTracker.fireEvent(Event.START_TRACKING, seqId, "trackMethod_resourceChanged");
+        }
+
+        assert(!isDisposed());
+
+        switch(event.getType())
+        {
+            case IResourceChangeEvent.PRE_CLOSE:
+            {
+                final IProject proj = (IProject) event.getResource();
+
+                synchronized(_resources)
+                {
+                    final List<IResource> resources = copyResourceList();
+                    for (final IResource res : resources)
+                    {
+                        if (proj == res || proj == res.getProject())
+                        {
+                            fireLifecycleEvent(
+                                    new ResourceLifecycleEvent(res, EventType.RESOURCE_INACCESSIBLE, ReasonType.RESOURCE_PROJECT_CLOSED));
+                        }
+                    }
+                }
+            }
+            break;
+
+            case IResourceChangeEvent.PRE_DELETE:
+            {
+                final IProject proj = (IProject) event.getResource();
+
+                synchronized(_resources)
+                {
+                    final List<IResource> resources = copyResourceList();
+                    for (final IResource res : resources)
+                    {
+                        // if the resource being tracked is the resource being deleted,
+                        // then fire a resource delete event
+                        if (proj == res)
+                        {
+                            fireLifecycleEvent(new ResourceLifecycleEvent(res, EventType.RESOURCE_INACCESSIBLE, ReasonType.RESOURCE_DELETED));
+                        }
+                        // if the resource being tracked is a resource in the project being
+                        // deleted, then fire a project deleted event
+                        else if (proj == res.getProject())
+                        {
+                            fireLifecycleEvent(
+                                new ResourceLifecycleEvent(res, EventType.RESOURCE_INACCESSIBLE, ReasonType.RESOURCE_PROJECT_DELETED));
+                        }
+                    }
+                }
+            }
+            break;
+
+            case IResourceChangeEvent.POST_CHANGE:
+            {
+                synchronized(_resources)
+                {
+                    final List<IResource> resources = copyResourceList();
+                    for (final IResource res : resources)
+                    {
+                        // only bother continuing if the resource we are tracking
+                        // is not a project since post-change events on projects 
+                        // that we care about won't occur
+                        if (res.getType() != IResource.PROJECT)
+                        {
+                            IResourceDelta delta = event.getDelta();
+                            
+//                            long seqId2 = _seqId++;
+//                            if (ENABLE_TEST_TRACKING && _testTracker != null)
+//                            {
+//                                _testTracker.fireEvent(Event.START_TRACKING, seqId2, "testFindMember");
+//                            }
+                            // only care about post change events to resources
+                            // that we are tracking
+                            delta = delta.findMember(res.getFullPath());
+
+                            if (delta != null)
+                            {
+                                visit(delta);
+                            }
+
+//                            if (ENABLE_TEST_TRACKING && _testTracker != null)
+//                            {
+//                                _testTracker.fireEvent(Event.STOP_TRACKING, seqId2, "testFindMember");
+//                            }
+                        }
+                    }
+                }
+            }
+            break;
+
+            default:
+            // do nothing
+            // we only handle these three
+        }
+
+        if (ENABLE_TEST_TRACKING && _testTracker != null)
+        {
+            _testTracker.fireEvent(Event.STOP_TRACKING, seqId, "trackMethod_resourceChanged");
+        }
+    }
+
+    private List<IResource> copyResourceList()
+    {
+        synchronized(_resources)
+        {
+            final List<IResource>  resList = new ArrayList<IResource>(_resources.size());
+            resList.addAll(_resources);
+            return resList;
+        }
+    }
+
+    private void fireLifecycleEvent(final ResourceLifecycleEvent event)
+    {
+        boolean  disposeAfter = false;
+
+        // NOTE: must use iterator through _listeners so that 
+        // CopyOnWriteArrayList protects us from concurrent modification
+        for (final IResourceLifecycleListener listener : _listeners)
+        {
+           final EventResult result = listener.acceptEvent(event);
+           disposeAfter |= result.getDisposeAfterEvent();
+        }
+
+        if (disposeAfter)
+        {
+            dispose();
+        }
+    }
+
+    private void visit(final IResourceDelta delta) 
+    {
+        assert(!isDisposed());
+
+        final IResource res = delta.getResource();
+
+        switch (delta.getKind())
+        {
+            case IResourceDelta.CHANGED:
+            {
+                // the contents of the file have changed
+                if ((delta.getFlags() & IResourceDelta.CONTENT) != 0)
+                {
+                    fireLifecycleEvent(
+                        new ResourceLifecycleEvent
+                            (res, EventType.RESOURCE_CHANGED
+                                    , ReasonType.RESOURCE_CHANGED_CONTENTS));
+                }
+            }
+            break;
+            case IResourceDelta.REMOVED:
+            {
+                fireLifecycleEvent(
+                    new ResourceLifecycleEvent
+                        (res, EventType.RESOURCE_INACCESSIBLE
+                                    , ReasonType.RESOURCE_DELETED));
+            }
+            break;
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/ResourceLifecycleEvent.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/ResourceLifecycleEvent.java
new file mode 100644
index 0000000..81f6ff6
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/ResourceLifecycleEvent.java
@@ -0,0 +1,95 @@
+package org.eclipse.jst.jsf.common.internal.resource;
+
+import org.eclipse.core.resources.IResource;
+
+/**
+ * @author cbateman
+ *
+ */
+public class ResourceLifecycleEvent 
+{
+    /**
+     * the type of lifecycle event
+     * this enum is not closed and may add new fields in the future
+     */
+    public enum EventType
+    {
+        /**
+         * Indicates that the resource is no longer accessible (as testable with
+         * IResource.isAccessible).  The reasonType will indicate why.
+         */
+        RESOURCE_INACCESSIBLE,
+        
+        /**
+         * Indicates that the resource being tracked has changed in some
+         * way, use ReasonType to determine specifics
+         */
+        RESOURCE_CHANGED;
+    }
+    
+    /**
+     * encodes the cause of the event if the event type provides one
+     * this enum is not closed and may add new fields in the future
+     */
+    public enum ReasonType
+    {
+        /**
+         * The resource was deleted from the workspace,
+         * this event is pre change if the event is project
+         * and post change otherwise
+         */
+        RESOURCE_DELETED,
+        /**
+         * The resource's project was deleted.  This event is 
+         * pre-change.  Note that if the tracked resource is 
+         * a project, RESOURCE_DELETED will be fired, not this
+         * event.
+         */
+        RESOURCE_PROJECT_DELETED,
+        /**
+         * The resource's project was closed.  This event is pre-change
+         */
+        RESOURCE_PROJECT_CLOSED,
+        /**
+         * Occurs when the contents of a non-project resource has changed 
+         */
+        RESOURCE_CHANGED_CONTENTS
+    }
+
+    private final IResource   _affectedResource;
+    private final EventType   _eventType;
+    private final ReasonType  _reasonType;
+    
+    /**
+     * @param affectedResource
+     * @param eventType
+     * @param reasonType
+     */
+    public ResourceLifecycleEvent(IResource affectedResource, EventType eventType, ReasonType reasonType)
+    {
+        _affectedResource = affectedResource;
+        _eventType = eventType;
+        _reasonType = reasonType;
+    }
+
+    /**
+     * @return the affected resource
+     */
+    public IResource getAffectedResource() {
+        return _affectedResource;
+    }
+
+    /**
+     * @return the event that has occurred
+     */
+    public EventType getEventType() {
+        return _eventType;
+    }
+
+    /**
+     * @return the cause of the event
+     */
+    public ReasonType getReasonType() {
+        return _reasonType;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/IntegerLiteralType.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/IntegerLiteralType.java
index 59feca2..d7a3be8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/IntegerLiteralType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/IntegerLiteralType.java
@@ -43,7 +43,7 @@
     
     protected Number getBoxedValue() 
     {
-        return new Long(_literalValue);
+        return Long.valueOf(_literalValue);
     }
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/NullLiteralType.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/NullLiteralType.java
index 7103f9a..eeb43e6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/NullLiteralType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/NullLiteralType.java
@@ -70,19 +70,19 @@
         }
         else if (T == Long.class || T == Long.TYPE)
         {
-            return new Long(0L);
+            return Long.valueOf(0L);
         }
         else if (T == Integer.class || T == Integer.TYPE)
         {
-            return new Integer(0);
+            return Integer.valueOf(0);
         }
         else if (T == Short.class || T == Short.TYPE)
         {
-            return new Short((short)0);
+            return Short.valueOf((short)0);
         }
         else if (T == Byte.class || T == Byte.TYPE)
         {
-            return new Byte((byte)0);
+            return Byte.valueOf((byte)0);
         }
         else
         {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/NumericTypeLiteral.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/NumericTypeLiteral.java
index 067504a..8b6acbe 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/NumericTypeLiteral.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/NumericTypeLiteral.java
@@ -51,15 +51,15 @@
         }
         else if (T == Integer.class || T == Integer.TYPE)
         {
-            return new Integer(boxedLiteralValue.intValue());
+            return Integer.valueOf(boxedLiteralValue.intValue());
         }
         else if (T == Short.class || T == Short.TYPE)
         {
-            return new Short(boxedLiteralValue.shortValue());
+            return Short.valueOf(boxedLiteralValue.shortValue());
         }
         else if (T == Byte.class || T == Byte.TYPE)
         {
-            return new Byte(boxedLiteralValue.byteValue());
+            return Byte.valueOf(boxedLiteralValue.byteValue());
         }
         else
         {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/StringLiteralType.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/StringLiteralType.java
index bfb586b..2e887fd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/StringLiteralType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/StringLiteralType.java
@@ -74,7 +74,7 @@
             {
                 if ("".equals(_literalValue)) //$NON-NLS-1$
                 {
-                    return new Long(0L);
+                    return Long.valueOf(0L);
                 }
                 return Long.valueOf(_literalValue);
             }
@@ -82,7 +82,7 @@
             {
                 if ("".equals(_literalValue)) //$NON-NLS-1$
                 {
-                    return new Integer(0);
+                    return Integer.valueOf(0);
                 }
                 return Integer.valueOf(_literalValue);
             }
@@ -90,7 +90,7 @@
             {
                 if ("".equals(_literalValue)) //$NON-NLS-1$
                 {
-                    return new Short((short)0);
+                    return Short.valueOf((short)0);
                 }
                 return Short.valueOf(_literalValue);
             }
@@ -98,7 +98,7 @@
             {
                 if ("".equals(_literalValue)) //$NON-NLS-1$
                 {
-                    return new Byte((byte)0);
+                    return Byte.valueOf((byte)0);
                 }
                 return Byte.valueOf(_literalValue);
             }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/TypeComparator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/TypeComparator.java
index 9926224..60b222f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/TypeComparator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/TypeComparator.java
@@ -12,223 +12,292 @@
 
 package org.eclipse.jst.jsf.common.internal.types;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 import org.eclipse.emf.common.util.BasicDiagnostic;
 import org.eclipse.emf.common.util.Diagnostic;
 import org.eclipse.jdt.core.Signature;
+import org.eclipse.osgi.util.NLS;
 
 /**
  * Static utility class used to compare two CompositeTypes for compatability
  * 
  * @author cbateman
- *
+ * 
  */
-public final class TypeComparator
-{
+public final class TypeComparator {
+    private static class SignatureTestResult {
+        /**
+         * the diagnostic
+         */
+        private final Diagnostic diagnostic;
+        /**
+         * Measure of the probability that the tested signatures were meant to
+         * match. Larger value means higher probability.
+         */
+        private final int matchQuality;
+
+        /**
+         * @param diagnostic
+         * @param matchQuality -
+         *            Measure of the probability that the tested signatures were
+         *            meant to match. Larger value means higher probability.
+         */
+        public SignatureTestResult(final Diagnostic diagnostic,
+                final int matchQuality) {
+            super();
+            this.diagnostic = diagnostic;
+            this.matchQuality = matchQuality;
+        }
+    }
+
     /**
      * @param firstType
      * @param secondType
      * @return true if firstType is assignable to secondType or vice-versa,
-     * depending on their assignment and runtime types
+     *         depending on their assignment and runtime types
      */
-    public static Diagnostic calculateTypeCompatibility(final CompositeType firstType,
-                                                        final CompositeType secondType)
-    {
+    public static Diagnostic calculateTypeCompatibility(
+            final CompositeType firstType, final CompositeType secondType) {
         // first, box all primitives
-        final CompositeType boxedFirstType = 
-            TypeTransformer.transformBoxPrimitives(firstType);
-        final CompositeType boxedSecondType =
-            TypeTransformer.transformBoxPrimitives(secondType);
-        
+        final CompositeType boxedFirstType = TypeTransformer
+                .transformBoxPrimitives(firstType);
+        final CompositeType boxedSecondType = TypeTransformer
+                .transformBoxPrimitives(secondType);
+
         final String[] mustBeSatisfied = boxedFirstType.getSignatures();
         final String[] testSignatures = boxedSecondType.getSignatures();
-        // TODO: need better user messages here
-        Diagnostic result = new BasicDiagnostic(Diagnostic.ERROR, "", 0,  //$NON-NLS-1$
-                Messages.getString("TypeComparator.Expression.Doesnt.Match.Expected.Types"), null); //$NON-NLS-1$
-        // now loop through each type in the first type and see
-        // if there is a type satisfying it in the second
-        MAIN_LOOP:
-        for  (int i = 0; i < mustBeSatisfied.length; i++)
-        {
-            final String curSatisfyType = mustBeSatisfied[i];
-
-            CHECK_CANDIDATES:
-            for (int j = 0; j < testSignatures.length; j++)
-            {
-                final String testType = testSignatures[j];
-                
-                // simplest success is an exact match
-                if (curSatisfyType.equals(testType))
-                {
-                    // check assignability mask
-                    // returns Diagnostic.OK if okay
-                    result = checkAssignability(firstType, secondType);
-                    break MAIN_LOOP;
+        List<String> mustbeMethods = Collections.emptyList();
+        List<String> mustbeTypes = Collections.emptyList();
+        for (final String mustbeSignature : mustBeSatisfied) {
+            if (TypeUtil.isMethodSignature(mustbeSignature)) {
+                if (mustbeMethods.isEmpty()) {
+                    mustbeMethods = new ArrayList<String>(mustbeSignature
+                            .length());
                 }
-                
-                // or if both are methods, check to see if the
-                // method signatures match
-                if (TypeUtil.isMethodSignature(curSatisfyType))
-                {
-                    // if the satisfy type is a method,
-                    // the test  type is not, then don't go any
-                    // further, since we know the won't match
-                    if (!TypeUtil.isMethodSignature(testType))
-                    {
-                        continue CHECK_CANDIDATES;
-                    }
-
-                    final Diagnostic test =
-                        methodSignaturesMatch(curSatisfyType, testType);
-                    
-                    if (test.getSeverity() ==  Diagnostic.OK)
-                    {
-                        result = Diagnostic.OK_INSTANCE;
-                        // found a match so break
-                        break MAIN_LOOP;
-                    }
+                mustbeMethods.add(mustbeSignature);
+            } else {
+                if (mustbeTypes.isEmpty()) {
+                    mustbeTypes = new ArrayList<String>(mustbeSignature
+                            .length());
                 }
-                
-                // or, can we coerce testType to curSatisfyType
-                if (canCoerce(testType, curSatisfyType, firstType.isLHS()))
-                {
-                    result = checkAssignability(firstType, secondType);
-                    break MAIN_LOOP;
-                }
+                mustbeTypes.add(mustbeSignature);
             }
         }
-
-        return result;
+        final boolean mustbeWriteable = firstType.isLHS();
+        SignatureTestResult bestResult = null;
+        for (final String isSignature : testSignatures) {
+            SignatureTestResult testResult;
+            if (TypeUtil.isMethodSignature(isSignature)) {
+                testResult = checkMethodSignature(isSignature, mustbeTypes,
+                        mustbeMethods);
+                if (testResult.diagnostic.getSeverity() == Diagnostic.OK) {
+                    return testResult.diagnostic;
+                }
+            } else {
+                testResult = checkTypeSignature(isSignature, mustbeTypes,
+                        mustbeMethods, mustbeWriteable);
+                if (testResult.diagnostic.getSeverity() == Diagnostic.OK) {
+                    return checkAssignability(firstType, secondType);
+                }
+            }
+            if (bestResult == null
+                    || bestResult.matchQuality < testResult.matchQuality) {
+                bestResult = testResult;
+            }
+        }
+        // TODO: bestResult empty? (should not happen, but who knows...
+        return bestResult.diagnostic;
     }
-    
-    private static boolean canCoerce(String testType, String checkType,
-                                                boolean checkTypeIsWritable)
-    {
+
+    private static SignatureTestResult checkTypeSignature(
+            final String isSignature, final List<String> mustbeTypes,
+            final List<String> mustbeMethods, final boolean mustbeWriteable) {
+        if (mustbeTypes.isEmpty()) {
+            final Diagnostic diag = new BasicDiagnostic(
+                    Diagnostic.ERROR,
+                    "", 0, Messages.getString("TypeComparator.Expression.No_Method"), null); //$NON-NLS-1$ //$NON-NLS-2$
+            return new SignatureTestResult(diag, 0);
+        }
+        for (final String mustbeSignature : mustbeTypes) {
+            if (mustbeSignature.equals(isSignature)
+                    || canCoerce(isSignature, mustbeSignature, mustbeWriteable)) {
+                final Diagnostic diag = Diagnostic.OK_INSTANCE;
+                return new SignatureTestResult(diag, 5);
+            }
+        }
+        final String[] params = new String[2];
+        params[0] = readableSignatures(mustbeTypes);
+        params[1] = Signature.toString(isSignature);
+        final Diagnostic diag = new BasicDiagnostic(
+                Diagnostic.WARNING,
+                "", 0, NLS.bind(Messages.getString("TypeComparator.Expression.Incompatible_Value"), params), null); //$NON-NLS-1$ //$NON-NLS-2$
+        return new SignatureTestResult(diag, 1);
+    }
+
+    private static SignatureTestResult checkMethodSignature(
+            final String isSignature, final List<String> mustbeTypes,
+            final List<String> mustbeMethods) {
+        if (mustbeMethods.isEmpty()) {
+            final Diagnostic diag = new BasicDiagnostic(
+                    Diagnostic.ERROR,
+                    "", 0, Messages.getString("TypeComparator.Expression.No_Value"), null); //$NON-NLS-1$ //$NON-NLS-2$
+            return new SignatureTestResult(diag, 0);
+        }
+        for (final String mustbeSignature : mustbeMethods) {
+            if (methodSignaturesMatch(mustbeSignature, isSignature)) {
+                final Diagnostic diag = Diagnostic.OK_INSTANCE;
+                return new SignatureTestResult(diag, 5);
+            }
+        }
+        final String[] params = new String[2];
+        params[0] = readableSignatures(mustbeMethods);
+        params[1] = Signature
+                .toString(isSignature, "method", null, false, true); //$NON-NLS-1$
+        final Diagnostic diag = new BasicDiagnostic(
+                Diagnostic.ERROR,
+                "", 0, NLS.bind(Messages.getString("TypeComparator.Expression.Incompatible_Method"), params), null); //$NON-NLS-1$ //$NON-NLS-2$
+        return new SignatureTestResult(diag, 1);
+    }
+
+    private static String readableSignatures(final List<String> signatures) {
+        StringBuilder res = null;
+        for (final String sig : signatures) {
+            String sigText;
+            if (TypeUtil.isMethodSignature(sig)) {
+                sigText = Signature.toString(sig, "method", null, false, true); //$NON-NLS-1$
+            } else {
+                sigText = Signature.toString(sig);
+            }
+            if (res == null) {
+                res = new StringBuilder(sigText);
+            } else {
+                res.append(", ").append(sigText); //$NON-NLS-1$
+            }
+        }
+        return res != null ? res.toString() : "[no signature]"; //$NON-NLS-1$
+    }
+
+    private static boolean canCoerce(final String testType,
+            final String checkType, final boolean checkTypeIsWritable) {
         boolean canCoerce = canCoerce(testType, checkType);
-        
+
         // if the check type is writable, we need to be sure that the
         // coercion can work in both directions
-        if (canCoerce && checkTypeIsWritable)
-        {
+        if (canCoerce && checkTypeIsWritable) {
             // reverse roles: can checkType assign back to test type?
             canCoerce &= canCoerce(checkType, testType);
         }
-        
+
         return canCoerce;
     }
-    
-    private static boolean canCoerce(String testType, String checkType)
-    {
+
+    private static boolean canCoerce(final String testType,
+            final String checkType) {
         // can always to coerce to string
-        if (TypeCoercer.typeIsString(checkType))
-        {
-            // if check type expects writability, need to ensure that 
+        if (TypeCoercer.typeIsString(checkType)) {
+            // if check type expects writability, need to ensure that
             // coercability is reversible
             return true;
-        }
-        else if (TypeCoercer.typeIsNumeric(checkType))
-        {
+        } else if (TypeCoercer.typeIsNumeric(checkType)) {
             return canCoerceNumeric(testType);
-        }
-        else if (TypeCoercer.typeIsBoolean(checkType))
-        {
+        } else if (TypeCoercer.typeIsBoolean(checkType)) {
             return TypeCoercer.canCoerceToBoolean(testType);
         }
-        
+
         // otherwise, no type coercion available
         return false;
     }
-    
-    private static boolean canCoerceNumeric(String testType)
-    {
-        try
-        {
+
+    private static boolean canCoerceNumeric(final String testType) {
+        try {
             TypeCoercer.coerceToNumber(testType);
             // TODO: there is a case when coerceToNumber returns
             // null meaning "not sure", that we may want to handle
             // differently, with a warning
             return true;
-        }
-        catch (TypeCoercionException tce)
-        {
+        } catch (final TypeCoercionException tce) {
             // outright failure -- can't coerce
             return false;
         }
     }
-    
-    private static Diagnostic methodSignaturesMatch(String firstMethodSig, String secondMethodSig)
-    {
+
+    private static boolean methodSignaturesMatch(final String firstMethodSig,
+            final String secondMethodSig) {
         // TODO: need to account for primitive type coercions
-        final String[]  firstMethodParams = 
-            Signature.getParameterTypes(firstMethodSig);
-        final String[]  secondMethodParams =
-            Signature.getParameterTypes(secondMethodSig);
-        
-        // fail fast if param count doesn't match
-        if (firstMethodParams.length != secondMethodParams.length)
-        {
-            return new BasicDiagnostic(Diagnostic.ERROR, "", 0,  //$NON-NLS-1$
-                    Messages.getString("TypeComparator.Parameter.count.mismatch"), null); //$NON-NLS-1$
+        if (firstMethodSig.equals(secondMethodSig)) {
+            return true;
         }
-        
+        final String[] firstMethodParams = Signature
+                .getParameterTypes(firstMethodSig);
+        final String[] secondMethodParams = Signature
+                .getParameterTypes(secondMethodSig);
+
+        // fail fast if param count doesn't match
+        if (firstMethodParams.length != secondMethodParams.length) {
+            return false;
+        }
+
         // now check each parameter
-        for (int i = 0; i < firstMethodParams.length; i++)
-        {
+        for (int i = 0; i < firstMethodParams.length; i++) {
             // need to box primitives before comparing
-            final String firstMethodParam = 
-                TypeTransformer.transformBoxPrimitives(firstMethodParams[i]);
-            final String secondMethodParam = 
-                TypeTransformer.transformBoxPrimitives(secondMethodParams[i]);
-            
-            if (!firstMethodParam.equals(secondMethodParam))
-            {
-                return new BasicDiagnostic(Diagnostic.ERROR, "", 0, //$NON-NLS-1$
-                        Messages.getString("TypeComparator.Type.mismatch.on.parameter")+i, null); //$NON-NLS-1$
+            final String firstMethodParam = TypeTransformer
+                    .transformBoxPrimitives(firstMethodParams[i]);
+            final String secondMethodParam = TypeTransformer
+                    .transformBoxPrimitives(secondMethodParams[i]);
+
+            if (!firstMethodParam.equals(secondMethodParam)) {
+                return false;
             }
         }
-        
+
         // if we get to here then we need only check the return type
-        final String firstReturn =
-            TypeTransformer.transformBoxPrimitives(Signature.getReturnType(firstMethodSig));
-        final String secondReturn =
-            TypeTransformer.transformBoxPrimitives(Signature.getReturnType(secondMethodSig));
-        
-        if (!firstReturn.equals(secondReturn))
-        {
-            return new BasicDiagnostic(Diagnostic.ERROR, "", 0, //$NON-NLS-1$
-                    Messages.getString("TypeComparator.Return.Types.Dont.Match"), null); //$NON-NLS-1$
+        final String firstReturn = TypeTransformer
+                .transformBoxPrimitives(Signature.getReturnType(firstMethodSig));
+        final String secondReturn = TypeTransformer
+                .transformBoxPrimitives(Signature
+                        .getReturnType(secondMethodSig));
+
+        if (!firstReturn.equals(secondReturn)) {
+            return false;
         }
-        
+
         // if we get to here, then everything checks out
-        return Diagnostic.OK_INSTANCE;
+        return true;
     }
-    
+
     /**
      * Precond: both firstType and secondType must represent value bindings.
      * 
      * @param firstType
      * @param secondType
      * @return a diagnostic validating that the two composite have compatible
-     * assignability
+     *         assignability
      */
-    private static Diagnostic checkAssignability(CompositeType firstType, CompositeType secondType)
-    {
-        if (firstType.isRHS() && !secondType.isRHS())
-        {
-            return new BasicDiagnostic(Diagnostic.ERROR, "", 0,  //$NON-NLS-1$
-                            Messages.getString("TypeComparator.Expression.Not.Gettable"), null); //$NON-NLS-1$
+    private static Diagnostic checkAssignability(final CompositeType firstType,
+            final CompositeType secondType) {
+        if (firstType.isRHS() && !secondType.isRHS()) {
+            return new BasicDiagnostic(
+                    Diagnostic.WARNING,
+                    "", 0, //$NON-NLS-1$
+                    Messages
+                            .getString("TypeComparator.Expression.Not.Gettable"), null); //$NON-NLS-1$
         }
-        
-        if (firstType.isLHS() && !secondType.isLHS())
-        {
-            return new BasicDiagnostic(Diagnostic.WARNING, "", 0, //$NON-NLS-1$
-                            Messages.getString("TypeComparator.Expression.Expected.Settable"), null); //$NON-NLS-1$
+
+        if (firstType.isLHS() && !secondType.isLHS()) {
+            return new BasicDiagnostic(
+                    Diagnostic.WARNING,
+                    "", 0, //$NON-NLS-1$
+                    Messages
+                            .getString("TypeComparator.Expression.Expected.Settable"), null); //$NON-NLS-1$
         }
-        
+
         return Diagnostic.OK_INSTANCE;
     }
-    
-    private TypeComparator()
-    {
+
+    private TypeComparator() {
         // static utility class; not instantiable
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/TypeInfoCache.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/TypeInfoCache.java
index dcd0c29..282c750 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/TypeInfoCache.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/TypeInfoCache.java
@@ -17,12 +17,12 @@
 import org.eclipse.jdt.core.IElementChangedListener;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaElementDelta;
+import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.ITypeHierarchy;
 import org.eclipse.jdt.core.ITypeRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jdt.internal.core.PackageFragment;
 import org.eclipse.jst.jsf.common.JSFCommonPlugin;
 import org.eclipse.jst.jsf.context.symbol.IBeanMethodSymbol;
 import org.eclipse.jst.jsf.context.symbol.IBeanPropertySymbol;
@@ -37,24 +37,71 @@
     
     private static TypeInfoCache instance = null;
     
-    /**Returns the TypeInfoCache instance.
+    /**Returns the TypeInfoCache instance.  This instance is considered
+     * protected and must not be disposded with disposeInstance.
      * 
      * @return the TypeInfoCache instance
      */
     public static synchronized TypeInfoCache getInstance() {
         if (instance == null) {
-            instance = new TypeInfoCache();
-            JavaCore.addElementChangedListener(instance, ElementChangedEvent.POST_CHANGE);
+            instance = createNewInstance();
         }
         return instance;
     }
     
-    private final Map /*<IType, TypeInfo>*/ cachedInfo;
-    private final Map /*<ITypeRoot, Set<IType>>*/ cachedTypesByAffectingTypeRoot;
-    private final Map /*<String, Set<IType>>*/ cachedTypesByMissingSupertypename;
+    /**
+     * Create a new instance of the type cache.
+     * 
+     * @return a new instance of the type info cache.
+     */
+    public static TypeInfoCache createNewInstance()
+    {
+        final TypeInfoCache newCache = new TypeInfoCache();
+        JavaCore.addElementChangedListener(newCache, ElementChangedEvent.POST_CHANGE);
+        return newCache;
+    }
+    
+    /**
+     * If cache is not the singleton instance acquired with {@link #getInstance()}
+     * then the cache will be disposed and should not be used.  If cache is
+     * protected instance, then nothing will happen (the singleton instance
+     * cannot be disposed).
+     * 
+     * @param cache
+     */
+    public static void disposeInstance(final TypeInfoCache cache)
+    {
+        if (cache != null 
+                && cache != instance)        
+        {
+            JavaCore.removeElementChangedListener(cache);
+            
+            synchronized(cache)
+            {
+                if (cache.cachedInfo != null)
+                {
+                    cache.cachedInfo.clear();
+                }
+                
+                if (cache.cachedTypesByAffectingTypeRoot != null)
+                {
+                    cache.cachedTypesByAffectingTypeRoot.clear();
+                }
+                
+                if (cache.cachedTypesByMissingSupertypename != null)
+                {
+                    cache.cachedTypesByMissingSupertypename.clear();
+                }
+            }
+        }
+    }
+    
+    private final Map<IType, TypeInfo> cachedInfo;
+    private final Map<ITypeRoot, Set<IType>> cachedTypesByAffectingTypeRoot;
+    private final Map<String, Set<IType>> cachedTypesByMissingSupertypename;
     
     private TypeInfoCache() {
-        cachedInfo = new HashMap();
+        cachedInfo = new HashMap<IType, TypeInfo>();
         cachedTypesByAffectingTypeRoot = new HashMap();
         cachedTypesByMissingSupertypename = new HashMap(10);
     }
@@ -74,7 +121,7 @@
         TypeInfo info = null;
         if (type != null)
         {
-            info = (TypeInfo) cachedInfo.get(type);
+            info = cachedInfo.get(type);
         }
         return info;
     }
@@ -318,7 +365,7 @@
     }
 
     private void registerTypeForTypeRoot(IType type, ITypeRoot typeRoot) {
-        Set dependentTypes = (Set) cachedTypesByAffectingTypeRoot.get(typeRoot);
+        Set dependentTypes = cachedTypesByAffectingTypeRoot.get(typeRoot);
         if (dependentTypes == null) {
             dependentTypes = new HashSet(5);
             cachedTypesByAffectingTypeRoot.put(typeRoot, dependentTypes);
@@ -327,7 +374,7 @@
     }
 
     private void registerTypeForMissingSupertype(IType type, String supertype) {
-        Set dependentTypes = (Set) cachedTypesByMissingSupertypename.get(supertype);
+        Set dependentTypes = cachedTypesByMissingSupertypename.get(supertype);
         if (dependentTypes == null) {
             dependentTypes = new HashSet(5);
             cachedTypesByMissingSupertypename.put(supertype, dependentTypes);
@@ -354,7 +401,7 @@
     }
 
     private void unregisterTypeForTypeRoot(IType type, ITypeRoot typeRoot) {
-        Set dependentTypes = (Set) cachedTypesByAffectingTypeRoot.get(typeRoot);
+        Set dependentTypes = cachedTypesByAffectingTypeRoot.get(typeRoot);
         if (dependentTypes != null) {
             dependentTypes.remove(type);
             if (dependentTypes.isEmpty()) {
@@ -364,7 +411,7 @@
     }
     
     private void unregisterTypeForMissingSupertype(IType type, String supertype) {
-        Set dependentTypes = (Set) cachedTypesByMissingSupertypename.get(supertype);
+        Set dependentTypes = cachedTypesByMissingSupertypename.get(supertype);
         if (dependentTypes != null) {
             dependentTypes.remove(type);
             if (dependentTypes.isEmpty()) {
@@ -385,12 +432,12 @@
      * @param typeRoot
      */
     protected synchronized void uncacheAffectedTypes(ITypeRoot typeRoot) {
-        Collection affectedTypes = (Collection) cachedTypesByAffectingTypeRoot.get(typeRoot);
+        Collection affectedTypes = cachedTypesByAffectingTypeRoot.get(typeRoot);
         if (affectedTypes != null && !affectedTypes.isEmpty()) {
             List affectedTypesCopy = new ArrayList(affectedTypes);
             for (Iterator it = affectedTypesCopy.iterator(); it.hasNext(); ) {
                 IType cachedType = (IType) it.next();
-                TypeInfo typeInfo = (TypeInfo) cachedInfo.remove(cachedType);
+                TypeInfo typeInfo = cachedInfo.remove(cachedType);
                 unregisterCachedType(cachedType, typeInfo);
             }
         }
@@ -401,12 +448,12 @@
      * @param supertypename - the missing supertype name. May be qualified or not
      */
     protected synchronized void uncacheTypesWithMissingSupertype(String supertypename) {
-        Collection affectedTypes = (Collection) cachedTypesByMissingSupertypename.get(shortTypename(supertypename));
+        Collection affectedTypes = cachedTypesByMissingSupertypename.get(shortTypename(supertypename));
         if (affectedTypes != null && !affectedTypes.isEmpty()) {
             List affectedTypesCopy = new ArrayList(affectedTypes);
             for (Iterator it = affectedTypesCopy.iterator(); it.hasNext(); ) {
                 IType cachedType = (IType) it.next();
-                TypeInfo typeInfo = (TypeInfo) cachedInfo.remove(cachedType);
+                TypeInfo typeInfo = cachedInfo.remove(cachedType);
                 unregisterCachedType(cachedType, typeInfo);
             }
         }
@@ -428,7 +475,7 @@
                 updateChangedPackageFragmentRoot(delta, element);
                 break;
             case IJavaElement.PACKAGE_FRAGMENT:
-                updateChangedPackageFragment(delta, (PackageFragment) element);
+                updateChangedPackageFragment(delta, (IPackageFragment) element);
                 break;
             case IJavaElement.CLASS_FILE:
             case IJavaElement.COMPILATION_UNIT:
@@ -478,7 +525,7 @@
         }
     }
 
-   private void updateChangedPackageFragment(IJavaElementDelta delta, PackageFragment element) {
+   private void updateChangedPackageFragment(IJavaElementDelta delta, IPackageFragment element) {
         switch (delta.getKind()) {
             case IJavaElementDelta.ADDED :
                 // if the package fragment is in the projects being considered, this could
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/messages.properties b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/messages.properties
index b34c98b..3df119b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/messages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/types/messages.properties
@@ -9,8 +9,10 @@
 #     Oracle Corporation - initial API and implementation
 ###############################################################################
 TypeComparator.Expression.Doesnt.Match.Expected.Types=EL expression does not evaluate to expected types for this attribute
-TypeComparator.Parameter.count.mismatch=Parameter count mismatch
-TypeComparator.Type.mismatch.on.parameter=Type mismatch on parameter 
-TypeComparator.Return.Types.Dont.Match=Return types don't match
 TypeComparator.Expression.Not.Gettable=Expression is not gettable
 TypeComparator.Expression.Expected.Settable=Attribute expects settable value, but expression is not settable
+
+TypeComparator.Expression.No_Method=Expression must be a method expression but is a value expression
+TypeComparator.Expression.No_Value=Expression must be a value expression but is a method expression
+TypeComparator.Expression.Incompatible_Method=Method must have signature "{0}" but has signature "{1}"
+TypeComparator.Expression.Incompatible_Value=Cannot coerce type {1} to {0}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/MetadataPackage.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/MetadataPackage.java
index f97e3c8..acc23cb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/MetadataPackage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/MetadataPackage.java
@@ -670,6 +670,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	@SuppressWarnings("hiding")
 	interface Literals {
 		/**
 		 * The meta object literal for the '{@link org.eclipse.jst.jsf.common.metadata.internal.impl.TraitImpl <em>Trait</em>}' class.
@@ -679,7 +680,6 @@
 		 * @see org.eclipse.jst.jsf.common.metadata.internal.impl.MetadataPackageImpl#getTrait()
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EClass TRAIT = eINSTANCE.getTrait();
 
 		/**
@@ -688,7 +688,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EAttribute TRAIT__ID = eINSTANCE.getTrait_Id();
 
 		/**
@@ -697,7 +696,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EReference TRAIT__VALUE = eINSTANCE.getTrait_Value();
 
 		/**
@@ -706,7 +704,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EAttribute TRAIT__SOURCE_MODEL_PROVIDER = eINSTANCE.getTrait_SourceModelProvider();
 
 		/**
@@ -717,7 +714,6 @@
 		 * @see org.eclipse.jst.jsf.common.metadata.internal.impl.MetadataPackageImpl#getIncludeEntityGroup()
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EClass INCLUDE_ENTITY_GROUP = eINSTANCE.getIncludeEntityGroup();
 
 		/**
@@ -726,7 +722,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EAttribute INCLUDE_ENTITY_GROUP__ID = eINSTANCE.getIncludeEntityGroup_Id();
 
 		/**
@@ -735,7 +730,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EAttribute INCLUDE_ENTITY_GROUP__MODEL_URI = eINSTANCE.getIncludeEntityGroup_ModelUri();
 
 		/**
@@ -746,7 +740,6 @@
 		 * @see org.eclipse.jst.jsf.common.metadata.internal.impl.MetadataPackageImpl#getModel()
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EClass MODEL = eINSTANCE.getModel();
 
 		/**
@@ -755,7 +748,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EAttribute MODEL__SOURCE_MODEL_PROVIDER = eINSTANCE.getModel_SourceModelProvider();
 
 		/**
@@ -764,7 +756,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EAttribute MODEL__CURRENT_MODEL_CONTEXT = eINSTANCE.getModel_CurrentModelContext();
 
 		/**
@@ -773,7 +764,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EReference MODEL__ENTITY_GROUPS = eINSTANCE.getModel_EntityGroups();
 
 		/**
@@ -784,7 +774,6 @@
 		 * @see org.eclipse.jst.jsf.common.metadata.internal.impl.MetadataPackageImpl#getEntity()
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EClass ENTITY = eINSTANCE.getEntity();
 
 		/**
@@ -793,7 +782,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EReference ENTITY__CHILD_ENTITIES = eINSTANCE.getEntity_ChildEntities();
 
 		/**
@@ -802,7 +790,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EReference ENTITY__TRAITS = eINSTANCE.getEntity_Traits();
 
 		/**
@@ -811,7 +798,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EAttribute ENTITY__ID = eINSTANCE.getEntity_Id();
 
 		/**
@@ -820,7 +806,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EAttribute ENTITY__TYPE = eINSTANCE.getEntity_Type();
 
 		/**
@@ -829,7 +814,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EReference ENTITY__INCLUDE_GROUPS = eINSTANCE.getEntity_IncludeGroups();
 
 		/**
@@ -840,7 +824,6 @@
 		 * @see org.eclipse.jst.jsf.common.metadata.internal.impl.MetadataPackageImpl#getEntityGroup()
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EClass ENTITY_GROUP = eINSTANCE.getEntityGroup();
 
 		/**
@@ -851,7 +834,6 @@
 		 * @see org.eclipse.jst.jsf.common.metadata.internal.impl.MetadataPackageImpl#getITraitVisitor()
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EDataType ITRAIT_VISITOR = eINSTANCE.getITraitVisitor();
 
 		/**
@@ -862,7 +844,6 @@
 		 * @see org.eclipse.jst.jsf.common.metadata.internal.impl.MetadataPackageImpl#getIEntityVisitor()
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EDataType IENTITY_VISITOR = eINSTANCE.getIEntityVisitor();
 
 		/**
@@ -873,7 +854,6 @@
 		 * @see org.eclipse.jst.jsf.common.metadata.internal.impl.MetadataPackageImpl#getIMetaDataSourceModelProvider()
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EDataType IMETA_DATA_SOURCE_MODEL_PROVIDER = eINSTANCE.getIMetaDataSourceModelProvider();
 
 		/**
@@ -884,7 +864,6 @@
 		 * @see org.eclipse.jst.jsf.common.metadata.internal.impl.MetadataPackageImpl#getModelContext()
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EDataType MODEL_CONTEXT = eINSTANCE.getModelContext();
 
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/AbstractTagLibDomainContentModelMetaDataTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/AbstractTagLibDomainContentModelMetaDataTranslator.java
index c1f2f9e..99a06bb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/AbstractTagLibDomainContentModelMetaDataTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/AbstractTagLibDomainContentModelMetaDataTranslator.java
@@ -20,6 +20,7 @@
 import org.eclipse.jst.jsf.common.metadata.MetadataPackage;
 import org.eclipse.jst.jsf.common.metadata.Model;
 import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
 
@@ -134,6 +135,19 @@
 	}
 
 	/**
+	 * @param tag
+	 * @param attributeName
+	 * @return Attribute entity for supplied attribute name and given Tag entity.  Will return null if not found.
+	 */
+	protected Entity findAttributeEntityForTagEntity(final Entity tag, final String attributeName) {
+		for (Iterator it=tag.getChildEntities().iterator();it.hasNext();){
+			Entity attr = (Entity)it.next();
+			if (attributeName.equals(attr.getId()))
+				return attr;
+		}
+		return null;
+	}
+	/**
 	 * Create entities for tags
 	 * @param doc
 	 */
@@ -143,7 +157,7 @@
 			Entity entity = findTagEntity(tag.getNodeName());
 			if (entity == null){
 				entity = MetadataFactory.eINSTANCE.createEntity();
-				entity.setId(tag.getNodeName());
+				entity.setId(getTagNodeName(tag));
 				entity.setType("tag");
 				getMergedModel().getChildEntities().add(entity);
 			}
@@ -153,6 +167,14 @@
 	}
 	
 	/**
+	 * @param tag
+	 * @return tag node name
+	 */
+	protected String getTagNodeName(CMElementDeclaration tag) {
+		return tag.getNodeName();
+	}
+
+	/**
 	 * Sets the standard traits for a tag entity from the element declaration
 	 * @param tag
 	 * @param entity
@@ -165,10 +187,61 @@
 		createSimpleBooleanObjectEntityTraitIfNecessary(entity, "expert", getTagIsExpert(tag));
 		createSimpleBooleanObjectEntityTraitIfNecessary(entity, "hidden", getTagIsHidden(tag));
 		
-//		createRequiredAttrTraits(entity, tag);
+		createAttributeEntities(entity, tag);
 	}
 	
 	/**
+	 * @param tagEntity
+	 * @param tag
+	 */
+	protected void createAttributeEntities(Entity tagEntity,
+			CMElementDeclaration tag) {
+		
+		for (Iterator it=tag.getAttributes().iterator();it.hasNext();){
+			CMAttributeDeclaration cmAttr = (CMAttributeDeclaration)it.next();			
+			Entity attr = findAttributeEntityForTagEntity(tagEntity, cmAttr.getAttrName());
+			if (attr == null) {
+				attr = MetadataFactory.eINSTANCE.createEntity();
+				attr.setId(cmAttr.getAttrName());
+				tagEntity.getChildEntities().add(attr);
+			}
+			createAttributeTraits(attr, cmAttr);
+		}
+			
+		
+	}
+
+	/**
+	 * @param attr
+	 * @param cmAttr
+	 */
+	protected void createAttributeTraits(Entity attr,
+			CMAttributeDeclaration cmAttr) {
+		
+		createSimpleStringEntityTraitIfNecessary(attr, "description", getTagAttributeDescription(cmAttr));	
+		createSimpleBooleanObjectEntityTraitIfNecessary(attr, "required", getTagAttributeIsRequired(cmAttr));
+		createSimpleStringEntityTraitIfNecessary(attr, "default-value", getTagAttributeDefaultValue(cmAttr));
+	}
+	
+	/**
+	 * @param cmAttr
+	 * @return null.   subclass should override if CMAttributeDeclaration has the metadata.
+	 */
+	protected String getTagAttributeDescription(CMAttributeDeclaration cmAttr) {return null;}
+	
+	/**
+	 * @param cmAttr
+	 * @return false.   subclass should override if CMAttributeDeclaration has the metadata.
+	 */
+	protected boolean getTagAttributeIsRequired(CMAttributeDeclaration cmAttr) {return cmAttr.getUsage() == CMAttributeDeclaration.REQUIRED;}
+
+	/**
+	 * @param cmAttr
+	 * @return null.   subclass should override if CMAttributeDeclaration has the metadata.
+	 */
+	protected String getTagAttributeDefaultValue(CMAttributeDeclaration cmAttr) {return null;}
+
+	/**
 	 * @param tag
 	 * @return false.   subclass should override if CMElementDeclaration has the metadata.
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainLoadingStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainLoadingStrategy.java
index ad81c3d..c15e2bc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainLoadingStrategy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainLoadingStrategy.java
@@ -68,20 +68,21 @@
 	/**
 	 * Responsible for iterating through the sorted list of <code>IMetaDataSourceModelProvider</code>
 	 * and merging the models after first translating the source model as required, into a single mreged model of
-	 * standatd metadata Entities and Traits.
+	 * standard metadata Entities and Traits.
 	 * @param model 
 	 * @param sources
 	 */
 	protected void mergeModel(MetaDataModel model, List/*<IMetaDataSourceModelProvider>*/ sources) {		
 		IMetaDataModelMergeAssistant assistant = createModelMergeAssistant(model);
 		for (Iterator/*<IMetaDataSourceModelProvider>*/ it = sources.iterator();it.hasNext();){
-			IMetaDataSourceModelProvider mds = (IMetaDataSourceModelProvider)it.next();
-//			assistant.setSourceModel(mds.getSourceModel());
-			assistant.setSourceModelProvider(mds);
+			IMetaDataSourceModelProvider mds = (IMetaDataSourceModelProvider)it.next();		
 			Iterator translators = mds.getLocator().getDomainSourceModelType().getTranslators().iterator();
 			while (translators.hasNext()){
 				IMetaDataTranslator translator = (IMetaDataTranslator)translators.next();
-				translator.translate(assistant);
+				if (translator.canTranslate(mds)){
+					assistant.setSourceModelProvider(mds);
+					translator.translate(assistant);
+				}				
 			}
 		}
 		assistant.setMergeComplete();
@@ -166,10 +167,14 @@
 		if (_sources != null){
 			for (Iterator it= _sources.iterator();it.hasNext();){				
 				IMetaDataSourceModelProvider provider = (IMetaDataSourceModelProvider)it.next();
-				IMetaDataLocator locator = provider.getLocator();
-				locator.removeObserver(this);		
-				locator.setDomainSourceModelType(null);
-				provider.setLocator(null);
+				if (provider != null) {
+					IMetaDataLocator locator = provider.getLocator();
+					if (locator != null){
+						locator.removeObserver(this);		
+						locator.setDomainSourceModelType(null);
+						provider.setLocator(null);
+					}
+				}
 			}
 		}
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainLoadingStrategyRegistry.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainLoadingStrategyRegistry.java
index 6d180b5..f0acd69 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainLoadingStrategyRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainLoadingStrategyRegistry.java
@@ -57,7 +57,7 @@
 	/**
 	 * Loads registry with descriptors from the domainLoadingStrategies ext-pt.    
 	 */
-	synchronized void  init(){
+	synchronized final void  init(){
 		IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
 		IExtensionPoint point = extensionRegistry.getExtensionPoint(JSFCommonPlugin.PLUGIN_ID, EXTENSION_POINT_ID );
 		if (point != null) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainSourceModelTypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainSourceModelTypeDescriptor.java
index 36183ef..bcd9338 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainSourceModelTypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/DomainSourceModelTypeDescriptor.java
@@ -29,7 +29,7 @@
  */
 public class DomainSourceModelTypeDescriptor {
 	private static final String TRANSLATORS_EXTENSION_POINT_ID = "domainSourceModelTypeTranslators";
-	private static final String STANDARD_FILE_NULL_TRANSLATOR = "org.eclipse.jst.jsf.common.metadata.internal.StandardAnnotationFilesTranslator";
+	private static final String STANDARD_FILE_NULL_TRANSLATOR = "org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataFilesTranslator";
 	private String domain = "DEFAULT";
 	private String domainSourceModelTypeId;
 	private String locatorClassName = "org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataLocator";
@@ -59,11 +59,11 @@
 	 * Default model type descriptor that will load only standard metadata files
 	 */
 	public DomainSourceModelTypeDescriptor(){
-		translatorDescriptors = new HashSet();
+//		getTranslatorDescriptors();
+		//createTranslatorInstances() will add the standard null translator 
 	}
 	
 	private synchronized void init() {
-		translatorDescriptors = new HashSet();
 		IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry();
 		IExtensionPoint point = extensionRegistry.getExtensionPoint(JSFCommonPlugin.PLUGIN_ID, TRANSLATORS_EXTENSION_POINT_ID );
 		if (point != null) {
@@ -176,24 +176,26 @@
 		
 		private Set createTranslatorInstances() {
 			translators = new HashSet/*<IMetaDataTranslator>*/();
-			if (translatorDescriptors.size() == 0){
+			if (getTranslatorDescriptors().size() == 0){// for TagLibDomain, we are adding null translator via extension (as of 7/16/07)
+				//would get here if a domain and source type was defined without a domain translator.  Should not happen, but 
 				//add Null Translator for now....
-				//we could/should raise exception
+				//we could/should raise exception.  
+				//Developers should add a STANDARD_FILE_NULL_TRANSLATOR if using standard metadata format.
 				Class klass = JSFCommonPlugin.loadClass(STANDARD_FILE_NULL_TRANSLATOR, JSFCommonPlugin.PLUGIN_ID);
 				try {
 					translators.add(klass.newInstance());
 					return translators;
 				} catch (InstantiationException e) {
                     // TODO: other error handling?
-					JSFCommonPlugin.log(e, "Error in createTranslatorInstances");
+					JSFCommonPlugin.log(e, "Error in createTranslatorInstances(STANDARD_FILE_NULL_TRANSLATOR)");
 				} catch (IllegalAccessException e) {
                     // TODO: other error handling?
-                    JSFCommonPlugin.log(e, "Error in createTranslatorInstances");
+                    JSFCommonPlugin.log(e, "Error in createTranslatorInstances(STANDARD_FILE_NULL_TRANSLATOR)");
 				}
 
 			}
 			
-			Iterator/*<DomainSourceModelTranslatorDescriptor>*/it = translatorDescriptors.iterator();
+			Iterator/*<DomainSourceModelTranslatorDescriptor>*/it = getTranslatorDescriptors().iterator();
 			while (it.hasNext()){
 				DomainSourceModelTranslatorDescriptor d = (DomainSourceModelTranslatorDescriptor)it.next();
 				Class klass = JSFCommonPlugin.loadClass(d.getTranslator(), d.getBundleId());
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataChangeNotificationEvent.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataChangeNotificationEvent.java
index d14e19c..29c6ce1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataChangeNotificationEvent.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataChangeNotificationEvent.java
@@ -17,11 +17,29 @@
  */
 public interface IMetaDataChangeNotificationEvent {
 	//change to enums if we do Java5
+	/**
+	 *  TODO:
+	 */
 	public static final int ADDED = 1;
+	/**
+	 * TODO:
+	 */
 	public static final int REMOVED = 2;
+	/**
+	 * TODO:
+	 */
 	public static final int CHANGED = 3;
 	
+	/**
+	 * @return the uri
+	 */
 	public String getURI();
+	/**
+	 * @return when to the event types above
+	 */
 	public int getEventType();
+	/**
+	 * @return the meta-data locator
+	 */
 	public IMetaDataLocator getLocator();
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataLocator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataLocator.java
index 4bb67fe..ffdbd62 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataLocator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataLocator.java
@@ -29,7 +29,7 @@
 	 */
 	public void startLocating();
 	/**
-	 * Stop looking for instances of metadata model sources.  An opporttunity to cleanup. 
+	 * Stop looking for instances of metadata model sources.  An opportunity to cleanup. 
 	 */
 	public void stopLocating();
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataModelMergeAssistant.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataModelMergeAssistant.java
index e7ebc01..d579a63 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataModelMergeAssistant.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataModelMergeAssistant.java
@@ -17,7 +17,7 @@
 
 
 /**
- * Helper class to merge source models into a single merged model.
+ * Helper class interface to merge source models into a single merged model.
  * Not intended to be implemented by clients
  *
  */
@@ -35,10 +35,10 @@
 	 */
 	public boolean addEntity(Entity entity);
 	/**
-	 * Method will add an entity if not already exsiting in the merged model, and then check for an exisiting trait by id on the merged model's entity.
+	 * Method will add an entity if not already existing in the merged model, and then check for an existing trait by id on the merged model's entity.
 	 * @param entity
 	 * @param trait
-	 * @return flag indicating whether or not the trais was new and therefore added to the merged model's entity
+	 * @return flag indicating whether or not the traits was new and therefore added to the merged model's entity
 	 */
 	public boolean addTrait(Entity entity, Trait trait);
 	
@@ -50,6 +50,7 @@
 	/**
 	 * Signal that the merge is complete so that any post-processing may occur.  
 	 * This should be the last call made on the merge assistant and should be done before client calls for the merged model result.
+	 * This should signal that entityGroups processing should begin.
 	 */
 	public void setMergeComplete();
 
@@ -61,6 +62,12 @@
 	 * @return {@link IMetaDataSourceModelProvider} for current operation
 	 */
 	public IMetaDataSourceModelProvider getSourceModelProvider();
-	
 
+	/**
+	 * @param queryRoot
+	 * @param entityKey - key relative to queryRoot
+	 * @return entity - will return null if not found
+	 */
+	public Entity getMergedEntity(Entity queryRoot, String entityKey);
+	
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataObservable.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataObservable.java
index 89c0624..69152d3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataObservable.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataObservable.java
@@ -17,6 +17,19 @@
  *
  */
 public interface IMetaDataObservable {
+	/**
+	 * Add the observer to the set of observers.  Has no effect if
+	 * the same observer is already registered
+	 * 
+	 * @param observer
+	 */
 	public void addObserver(IMetaDataObserver observer);
+
+	/**
+	 * Remove the observer from the set of observers.  Has no effect
+	 * if observer was not already registered.
+	 * 
+	 * @param observer must not be null
+	 */
 	public void removeObserver(IMetaDataObserver observer);
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataTranslator.java
index eaa159b..2a7f6e2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IMetaDataTranslator.java
@@ -20,4 +20,9 @@
 	 * @param assistant perform translation using the IMetaDataModelMergeAssistant
 	 */
 	public void translate(IMetaDataModelMergeAssistant assistant);
+	/**
+	 * @param modelProvider - cannot be null
+	 * @return true if this translator can translate this model source
+	 */
+	public boolean canTranslate(IMetaDataSourceModelProvider modelProvider);
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IResourceURLProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IResourceURLProvider.java
new file mode 100644
index 0000000..f82d0fb
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/IResourceURLProvider.java
@@ -0,0 +1,32 @@
+/**
+ * Copyright (c) 2008 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle Corporation - initial API and implementation
+ */
+package org.eclipse.jst.jsf.common.metadata.internal;
+
+import java.net.URL;
+
+/**
+ * Provides absolute URLs from resource path, which is relative to the plug-in
+ * with the metadata that specified the resource path.
+ *  
+ * @author Ian Trimble - Oracle
+ */
+public interface IResourceURLProvider {
+
+	/**
+	 * Get absolute URL for resource path, which is relative to the plug-in that
+	 * specified the resource metadata.
+	 * 
+	 * @param resourcePath Path to resource, relative to metadata plug-in.
+	 * @return Absolute URL for resource path.
+	 */
+	public URL getResourceURL(String resourcePath);
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModel.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModel.java
index 5554ab7..9e5c4a6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModel.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModel.java
@@ -113,5 +113,11 @@
 		root = null;
 		modelKeyDescriptor = null;
 	}
+	
+	public String toString() {
+		StringBuffer buf = new StringBuffer("MetaDataModel: ");
+		buf.append(getModelKey());
+		return buf.toString();
+	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManager.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManager.java
index 1568552..342e1c2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManager.java
@@ -85,7 +85,7 @@
 		MetaDataModelManager repo = null;
 		try {
 			Object obj = project.getSessionProperty(KEY_SESSIONPROPERTY);
-			if (obj != null && obj instanceof MetaDataModelManager) {
+			if (obj instanceof MetaDataModelManager) {
 				repo = (MetaDataModelManager)obj;
 			}
 		} catch(CoreException ce) {
@@ -114,6 +114,7 @@
 	 */
 	protected void removeAsSessionProperty(IProject aProject){
 		try {
+			ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
 			aProject.setSessionProperty(KEY_SESSIONPROPERTY, null);
 		} catch (CoreException e) {
             JSFCommonPlugin.log(e, "Error removing session property"); //$NON-NLS-1$
@@ -178,6 +179,7 @@
 					public void run() throws Exception {
 						for (Iterator it=models.getModels().iterator();it.hasNext();){
 							MetaDataModel model = (MetaDataModel)it.next();
+//							System.out.println("kill mmModel: "+model.toString());
 							models.remove(model);
 							model.cleanup();					
 						}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelMergeAssistantImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelMergeAssistantImpl.java
index 0320a94..f24b0cb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelMergeAssistantImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelMergeAssistantImpl.java
@@ -36,6 +36,7 @@
  * entities and traits added to it.   
  * 
  * TODO - make locating of existing entities and traits in the merged model more efficient
+ * TODO - refactor out Taglibdomain-only aspects of include-group processing 
  *
  */
 public class MetaDataModelMergeAssistantImpl implements
@@ -54,7 +55,8 @@
 	public MetaDataModelMergeAssistantImpl(MetaDataModel model) {
 		this.mergedModel = model;
 		copier = new Copier();
-		entityVisitor = new SimpleEntityQueryVisitorImpl(new HierarchicalSearchControl(1, HierarchicalSearchControl.SCOPE_ALL_LEVELS));
+		entityVisitor = new SimpleEntityQueryVisitorImpl(new HierarchicalSearchControl(1, 
+			HierarchicalSearchControl.SCOPE_ALL_LEVELS));
 		traitVisitor = new SimpleTraitQueryVisitorImpl(new SearchControl(1));
 	}
 
@@ -100,6 +102,18 @@
 		return false;
 	}
 
+	public Entity getMergedEntity(Entity queryRoot, String entityKey){		
+		Entity ret = null;
+		SimpleResultSet rs = (SimpleResultSet)entityVisitor.findEntities(queryRoot, entityKey);
+		try {
+			if (! rs.getResults().isEmpty()) 
+				ret = (Entity)rs.getResults().get(0);				
+			rs.close();
+		} catch (MetaDataException e) {
+			JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedEntity()", e);
+		}
+		return ret;
+	}
 	private void addIncludeGroupsAsNecessary(final Entity mmEntity, final Entity entity) {
 		for (Iterator it=entity.getIncludeGroups().iterator();it.hasNext();){
 			IncludeEntityGroup grp = (IncludeEntityGroup)it.next();
@@ -121,8 +135,6 @@
 	 * Checks to see if the entity (by id) is present in the mergedModel or not.
 	 * If not, it will perform a copy of the entity and it's attributes using
 	 * EcoreUtil.Copier.  
-	 *  
-	 * TODO - check: do we need to copy?   Why not use source entity?
 	 * 
 	 * @param parent
 	 * @param entity
@@ -153,25 +165,16 @@
 		return found;
 	}
 
-	private boolean isExistingChildEntity(final Entity parent, final Entity entity) {
-		boolean found = false;
+	private Entity getExistingChildEntity(final Entity parent, final Entity entity) {
 		for(Iterator it=parent.getChildEntities().iterator();it.hasNext();){
-			if (entity.getId().equals(((Entity)it.next()).getId()))
-				return true;			
+			Entity foundEntity = (Entity)it.next();
+			if (entity.getId().equals(foundEntity.getId()))
+				return foundEntity;			
 		}
-		return found;
-	}
-	
-	private boolean isExistingTrait(final Entity entity, final Trait trait) {
-		boolean found = false;
-		for(Iterator it=entity.getTraits().iterator();it.hasNext();){
-			if (trait.getId().equals(((Trait)it.next()).getId()))
-				return true;			
-		}
-		return found;
+		return null;
 	}
 
-	private synchronized Entity addEntityInternal(final Entity parent, final Entity entity) {
+	private /*synchronized*/ Entity addEntityInternal(final Entity parent, final Entity entity) {
 		Entity mmEntity =(Entity)copier.copy(entity);
 		copier.copyReferences();
 		parent.getChildEntities().add(mmEntity);
@@ -229,12 +232,12 @@
 
 	/**
 	 * Locates the entity in the merged model matching by id only. 
-	 * If not loacted, this method returns null;
+	 * If not located, this method returns null;
 	 * 
 	 * @param entity
 	 * @return merged entity
 	 */
-	public Entity getMergedEntity(Entity entity){
+	private Entity getMergedEntity(Entity entity){
 		if (entity instanceof Model)
 			return (Entity)mergedModel.getRoot();
 		
@@ -246,7 +249,7 @@
 				ret = (Entity)rs.getResults().get(0);				
 			rs.close();
 		} catch (MetaDataException e) {
-			JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedEntity()", e);			
+			JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedEntity()", e);
 		}
 		return ret;
 	}
@@ -300,7 +303,10 @@
 			IncludeEntityGroup include = (IncludeEntityGroup)entity.getIncludeGroups().get(j);				
 			if (include.getId() != null){
 				//is this a local merge?
-				if (include.getModelUri() == null|| (include.getModelUri().equals(getMergedModel().getModelKey().getUri())) ){
+				if (include.getModelUri() == null||
+						(include.getModelUri()
+							.equals(getMergedModel()
+								.getModelKey().getUri())) ){
 					EntityGroup eg = ((Model)getMergedModel().getRoot()).findIncludeGroup(include.getId());
 					addIncludeRefs(entity, eg);
 				} else //external model include
@@ -321,9 +327,14 @@
 		);
 		
 		Model externalModel = TaglibDomainMetaDataQueryHelper.getModel(modelContext);
-		EntityGroup entityGroup = externalModel.findIncludeGroup(include.getId());
-		
-		addIncludeRefs(entity, entityGroup);
+		if (externalModel != null){
+			EntityGroup entityGroup = externalModel.findIncludeGroup(include.getId());		
+			addIncludeRefs(entity, entityGroup);
+		}
+		else {
+			JSFCommonPlugin.log(IStatus.ERROR, "Unable to load external metadata model refs for "+modelContext.getURI()
+					+ " into "+ entity.getModel().getCurrentModelContext().getUri());
+		}
 	}
 
 	/*
@@ -337,34 +348,43 @@
 			return;
 	
 		for (int i=0, size=entityGroup.getTraits().size();i<size;i++){
-			addIncludedTraitAsNecessary(entity, (Trait)entityGroup.getTraits().get(i));
+			addTrait(entity, (Trait)entityGroup.getTraits().get(i));
 		}
 		
 		for (int i=0, size=entityGroup.getChildEntities().size();i<size;i++){
-			addIncludedEntityAsNecessary(entity, (Entity)entityGroup.getChildEntities().get(i));
-		}
-	}
-
-
-	private void addIncludedTraitAsNecessary(final Entity entity, final Trait trait) {		
-		if (!(isExistingTrait(entity, trait))){
-			addTraitInternal(entity, trait);
+			traverseAndAddIncludes(entity, (Entity)entityGroup.getChildEntities().get(i));
 		}
 	}
 	
+	private void traverseAndAddIncludes(final Entity parent, final Entity entity){
+		Entity mergedEntity = addIncludedEntityAsNecessary(parent, entity);
+		
+		for (final Iterator/*<Trait>*/ it=entity.getTraits().iterator();it.hasNext();){
+			Trait trait = (Trait)it.next();
+			addTraitAsNecessary(mergedEntity, trait);
+		}
+		
+		for (final Iterator/*<EntityKey>*/ it=entity.getChildEntities().iterator();it.hasNext();){
+			Entity e = (Entity)it.next();
+			traverseAndAddIncludes(mergedEntity, e);//add as normal
+		}
+		
+	}
+		
 	/*
 	 * Checks to see if the entity (by id) is present as a child entity in the parent or not.
-	 * If not, it will add the entity to the childEntities <u>without</u> copying.
+	 * If not, it will add the entity to the childEntities without copying.
 	 * 
 	 * @param parent
 	 * @param entity
-	 * @return
+	 * @return Entity
 	 */
-	private void addIncludedEntityAsNecessary(final Entity parent, final Entity entity) {		
-		if (!(isExistingChildEntity(parent, entity))){
-			addEntityInternal(parent, entity);
+	private Entity addIncludedEntityAsNecessary(final Entity parent, final Entity entity) {		
+		Entity mergedEntity = getExistingChildEntity(parent, entity);
+		if (mergedEntity == null){
+			mergedEntity = addEntityInternal(parent, entity);
 		}
+		return mergedEntity;
 	}
 
-
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/PluginRelativeStandardMetaDataSourceFileLocator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/PluginRelativeStandardMetaDataSourceFileLocator.java
index 8c5ca81..f406605 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/PluginRelativeStandardMetaDataSourceFileLocator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/PluginRelativeStandardMetaDataSourceFileLocator.java
@@ -39,13 +39,20 @@
 	 * 	 
 	 */
 	public InputStream getInputStream() throws IOException {
-		URL url = FileLocator.find(Platform.getBundle(fileInfo.getBundleId()), Path.fromOSString(fileInfo.getLocation()), null);
+		URL url = getURL();
 		if (url != null) 
 			return url.openStream();
 		
         String  fileName = Path.fromOSString(fileInfo.getLocation()).toString() + " (Plugin: " + fileInfo.getBundleId()+")" ;
         throw new FileNotFoundException("Metadata file not found: "+ fileName);
 	}
+	
+	/**
+	 * @return URL to metadata source.   Must not be null.
+	 */
+	public URL getURL() {
+		return FileLocator.find(Platform.getBundle(fileInfo.getBundleId()), Path.fromOSString(fileInfo.getLocation()), null);
+	}
 
 	
 	/* 
@@ -53,7 +60,6 @@
 	 * This implementation assumes that the basename of the bundle is the same 
 	 * as the source file name and in the same directory.
 	 * 
-	 * @see org.eclipse.jst.jsf.contentmodel.annotation.ICMAnnotationSourceFileLocator#getResourceBundle()
 	 */
 	public ResourceBundle getResourceBundle() throws IOException, MalformedURLException {
 		if (resourceBundle == null){
@@ -61,7 +67,7 @@
 			if (bundleURL == null)
 				return null;
 			
-			resourceBundle = ResourceBundleHelper.getResourceBundle(getBaseNameURL(bundleURL));
+			resourceBundle = ResourceBundleHelper.getResourceBundle(bundleURL);
 		}
 		return resourceBundle;
 	}
@@ -70,7 +76,7 @@
 		IPath annotationPath = Path.fromOSString(fileInfo.getLocation()); 
 		IPath annotationFolder = annotationPath.removeLastSegments(1);
 		IPath propertiesLocation = annotationPath.removeFirstSegments(annotationPath.segmentCount() - 1).removeFileExtension();
-		// append location of propertiles file
+		// append location of properties file
 		IPath propertiesFile = annotationFolder.append(propertiesLocation);
 	
 		// append .properties extension if needed
@@ -81,48 +87,4 @@
 				propertiesFile, null);
 	}
 
-	
-	private String getBaseNameURL(URL bundleURL) {
-		IPath url = new Path(bundleURL.toExternalForm());
-		if (url.getFileExtension() != null)
-			url = url.removeFileExtension();
-		return url.toString();
-	}
-	
-
-//	/* 
-//	 * Returns property resource bundle if it exists.  May return null.
-//	 * This implementation assumes that the basename of the bundle is the same 
-//	 * as the source file name and in the same directory.
-//	 * 
-//	 * @see org.eclipse.jst.jsf.contentmodel.annotation.ICMAnnotationSourceFileLocator#getResourceBundle()
-//	 */
-//	public ResourceBundle getResourceBundle() throws IOException, MalformedURLException {
-//		URL bundleURL = getAnnotationPropertiesFileBasenameURL();
-//		ResourceBundle resourceBundle = ResourceBundleHelper.getResourceBundle(getBaseNameURL(bundleURL));
-//		return resourceBundle;
-//	}
-//	
-//	private URL getAnnotationPropertiesFileBasenameURL()  {
-//		IPath annotationPath = Path.fromOSString(fileInfo.getAnnotationFileLocation()); 
-//		IPath annotationFolder = annotationPath.removeLastSegments(1);
-//		IPath propertiesLocation = annotationPath.removeFirstSegments(annotationPath.segmentCount() - 1).removeFileExtension();
-//		// append location of propertiles file
-//		IPath propertiesFile = annotationFolder.append(propertiesLocation);
-//	
-//		// append .properties extension if needed
-//		if (propertiesFile.getFileExtension() == null)
-//			propertiesFile = propertiesFile.addFileExtension("properties"); //$NON-NLS-1$
-//		// create a URL out of the properties file location
-//		return FileLocator.find(Platform.getBundle(fileInfo.getBundleId()),
-//				propertiesFile, null);
-//	}
-//
-//	
-//	private String getBaseNameURL(URL bundleURL) {
-//		IPath url = new Path(bundleURL.toExternalForm());
-//		if (url.getFileExtension() != null)
-//			url = url.removeFileExtension();
-//		return url.toString();
-//	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/ResourceBundleHelper.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/ResourceBundleHelper.java
index 229bc7d..58788dc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/ResourceBundleHelper.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/ResourceBundleHelper.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Jens Lukowski/Innoopract - initial renaming/restructuring
- *     Gerry Kessler/Oracle - copied from org.eclipse.wst.sse.core.internal.encoding.util and modified
+ *     Gerry Kessler/Oracle - copied from org.eclipse.wst.sse.core.internal.encoding.util and modified heavily
  *******************************************************************************/
 package org.eclipse.jst.jsf.common.metadata.internal;
 
@@ -20,6 +20,8 @@
 import java.util.ResourceBundle;
 
 import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
 
 /**
  * ResourceBundleHelper
@@ -28,49 +30,43 @@
 public class ResourceBundleHelper {
 
 	/**
-	 * @param resourceURI
+	 * @param resourceURL
 	 * @return ResourceBundle
 	 * @throws MalformedURLException - may return null
 	 * @throws IOException
 	 */
-	public static ResourceBundle getResourceBundle(String resourceURI) throws MalformedURLException, IOException {
-		return getResourceBundle(resourceURI, Locale.getDefault());
+	public static ResourceBundle getResourceBundle(URL resourceURL) throws MalformedURLException, IOException {
+		return getResourceBundle(resourceURL, Locale.getDefault());
 	}
 
 	/**
-	 * @param resourceURI
+	 * @param resourceURL
 	 * @param targetLocale
 	 * @return ResourceBundle - may return null
 	 * @throws MalformedURLException
 	 * @throws IOException
 	 */
-	public static ResourceBundle getResourceBundle(String resourceURI, Locale targetLocale) throws MalformedURLException, IOException {
-		// try to load bundle from the location specified in the resourceURI
-		// we make the assumption that the resourceURI points to the local
-		// file system
-
-		int index = resourceURI.lastIndexOf("/"); //$NON-NLS-1$
-		if (index == -1) {
-			throw new IllegalArgumentException("Invalid resourceURI"); //$NON-NLS-1$
-		}
-
-		// Below we set 'resourceDirectory' so that it ends with a '/'.
-		// Here's an excerpt from the ClassLoader Javadoc ...
-		// Any URL that ends with a '/' is assumed to refer to a directory.
-		// Otherwise, the URL is assumed
-		// to refer to a JAR file which will be opened as needed.
+	public static ResourceBundle getResourceBundle(URL resourceURL, Locale targetLocale) throws MalformedURLException, IOException {
+		// try to load bundle from the location specified in the resourceURL
 		//
-		String resourceDirectory = resourceURI.substring(0, index + 1);
-		String resourceBundleName = resourceURI.substring(index + 1);
-
+		String protocol	= resourceURL.getProtocol();
+		String host		= resourceURL.getHost();
+		String file		= resourceURL.getFile();
+		IPath path 		= new Path(file);
+		
+		String dir = "./";
+		String bundleName = path.removeFileExtension().segment(path.segmentCount() - 1);
+		if (path.segmentCount() > 1)
+			dir = path.removeLastSegments(1).toString();
+		
 		// create a class loader with a class path that points to the resource
 		// bundle's location
 		//         
 		URL[] classpath = new URL[1];
-		classpath[0] = FileLocator.resolve(new URL(resourceDirectory));
+		classpath[0] = FileLocator.resolve(new URL(protocol, host, dir));
 		ClassLoader resourceLoader = new URLClassLoader(classpath, null);
 
-		return ResourceBundle.getBundle(resourceBundleName, targetLocale, resourceLoader);
+		return ResourceBundle.getBundle(bundleName, targetLocale, resourceLoader);
 	}
 }
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileRegistry.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileRegistry.java
index c7e0d23..1bc90c0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFileRegistry.java
@@ -16,6 +16,7 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -29,6 +30,7 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jst.jsf.common.JSFCommonPlugin;
 import org.eclipse.jst.jsf.common.metadata.Model;
@@ -46,7 +48,7 @@
 	private static StandardMetaDataFileRegistry reg;
 	
 	/**
-	 * @return the singelton instance of the registry
+	 * @return the singleton instance of the registry
 	 */
 	public static StandardMetaDataFileRegistry getInstance() {
 		if (reg == null){
@@ -80,7 +82,7 @@
 			providers = new ArrayList/*<IStandardMetaDataSourceInfo>*/();
 			mdFilesMap.put(uri, providers);
 		}
-		providers.add(new StandardMetaDataFilesProvider(fileInfo, uri));
+		providers.add(new StandardMetaDataFilesProvider(fileInfo));
 	}	
 	
 /**
@@ -97,9 +99,8 @@
 	/**
 	 * Constructor
 	 * @param info
-	 * @param uri
 	 */
-	StandardMetaDataFilesProvider(IStandardMetaDataSourceInfo info, String uri){
+	StandardMetaDataFilesProvider(IStandardMetaDataSourceInfo info){
 		this.info = info;
 	}
 	
@@ -131,6 +132,15 @@
 		return null;
 		
 	}
+	
+	private URI getMDFileURI(){
+		try {
+			return URI.createURI(getFileLocator().getURL().toURI().toString());
+		} catch (URISyntaxException e) {
+			JSFCommonPlugin.log(IStatus.ERROR, "Metadata File Load Error: "+getFileLocator().getFileInfo().toString()+": URISyntaxException: "+e.getMessage());
+		}
+		return null;
+	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider#getSourceModel()
@@ -141,11 +151,13 @@
 		
 		InputStream inputStream = null;
 		try {
+			URI uri = getMDFileURI();
 			inputStream = getInputStream();
 			if (inputStream != null){
-				EList contents = StandardModelFactory.getInstance().loadStandardFileResource(inputStream, this);
+				EList contents = StandardModelFactory.getInstance().loadStandardFileResource(inputStream, this, uri);
 				//check to see if this is a Model
-				if (contents != null && contents.get(0) instanceof Model){				
+				if (contents != null && !contents.isEmpty() &&
+						contents.get(0) instanceof Model){				
 					model = contents.get(0);
 					((Model)model).setSourceModelProvider(this);
 				}
@@ -153,19 +165,23 @@
 		} catch (FileNotFoundException e){
 			JSFCommonPlugin.log(IStatus.ERROR, e.getLocalizedMessage());
 		} catch (IOException e) {
-			JSFCommonPlugin.log(IStatus.ERROR,"IOException(1): StandardMetaDataFilesProvider.getSourceModel()", e); //$NON-NLS-1$
+			JSFCommonPlugin.log(IStatus.ERROR,"IOException(1): StandardMetaDataFilesProvider.getSourceModel():"+getModelName(), e); //$NON-NLS-1$			
 		} finally {
 			if (inputStream != null){
 				try {
 					inputStream.close();
 				} catch (IOException e) {
-					JSFCommonPlugin.log( IStatus.ERROR,"IOException (2): StandardMetaDataFilesProvider.getSourceModel()", e); //$NON-NLS-1$
+					JSFCommonPlugin.log( IStatus.ERROR,"IOException (2): StandardMetaDataFilesProvider.getSourceModel():"+getModelName(), e); //$NON-NLS-1$
 				}
 			}
 		}
 		return model;
 	}
 
+	private String getModelName() {
+		return info.toString();
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider#getLocator()
 	 */
@@ -188,9 +204,9 @@
 			try {
 				return fileLocator.getResourceBundle();
 			} catch (MissingResourceException e) {
-				//eat it
+				JSFCommonPlugin.log(IStatus.ERROR, "InternalGetResourceBundle1", e);
 			} catch (IOException e) {
-				//eat it			
+				JSFCommonPlugin.log(IStatus.ERROR, "InternalGetResourceBundle2", e);			
 			}
 		}
 		return null;
@@ -251,6 +267,21 @@
 				}
 				
 			};
+		} else if (klass == IResourceURLProvider.class) {
+			return new IResourceURLProvider() {
+
+				public URL getResourceURL(String resourcePath) {
+					URL resourceURL = null;
+					String bundleID = mdp.getFileLocator().getFileInfo().getBundleId();
+					try {
+						resourceURL = FileLocator.resolve(Platform.getBundle(bundleID).getResource(resourcePath));
+					} catch (IOException ioe) {
+						//do nothing, will return null resourceURL
+					}
+					return resourceURL;
+				}
+
+			};
 		}
 		return null;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardAnnotationFilesTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFilesTranslator.java
similarity index 86%
rename from jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardAnnotationFilesTranslator.java
rename to jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFilesTranslator.java
index 79c9c71..92ae691 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardAnnotationFilesTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFilesTranslator.java
@@ -17,14 +17,21 @@
 import org.eclipse.jst.jsf.common.metadata.EntityGroup;
 import org.eclipse.jst.jsf.common.metadata.Model;
 import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataFileRegistry.StandardMetaDataFilesProvider;
 
 
 /**
  * A 'null' translation of a metadata file.  Entities and traits are not transformed.
  *
  */
-public class StandardAnnotationFilesTranslator implements IMetaDataTranslator {
+public class StandardMetaDataFilesTranslator implements IMetaDataTranslator {
 
+	public boolean canTranslate(IMetaDataSourceModelProvider modelProvider) {
+		if (modelProvider instanceof StandardMetaDataFilesProvider)
+			return true;
+		return false;
+	}
+	
 	public void translate(IMetaDataModelMergeAssistant assistant) {//TODO: throw proper errors
 		//null translate - sourceModel object are already Entities and traits
 		//traverse the tree and add to model
@@ -70,4 +77,5 @@
 		}
 		
 	}
+
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataSourceFileLocator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataSourceFileLocator.java
index 418b240..a6a5e04 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataSourceFileLocator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataSourceFileLocator.java
@@ -14,6 +14,7 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
@@ -23,6 +24,8 @@
  * meta-data file and the URL to the resource bundle for a properties file, if any.
  * 
  * Implementors must provide a zero-argument constructor.
+ * 
+ * CURRENTLY INTERNAL... WILL BE MADE API AT SOME POINT
  *
  */ 
 public abstract class StandardMetaDataSourceFileLocator {
@@ -47,13 +50,20 @@
 	}
 	/**
 	 * Return InputStream to the meta-data source file.  
-	 * Callers are responsble for closing the stream.
+	 * Callers are responsible for closing the stream.
 	 * @return InputStream
 	 * @throws IOException
 	 */
 	public abstract InputStream getInputStream() throws IOException;
 	
 	/**
+	 * Return URL to the meta-data source file.  
+	 * Must not be null.
+	 * @return URL
+	 */
+	public abstract URL getURL();
+	
+	/**
 	 * Return ResourceBundle for the property files if there are any.  Return null if not.
 	 * 
 	 * @return java.util.ResourceBundle
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardModelFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardModelFactory.java
index 53b99a1..a2cddc7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardModelFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/StandardModelFactory.java
@@ -13,30 +13,41 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Iterator;
 import java.util.Map;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.emf.ecore.util.BasicExtendedMetaData;
 import org.eclipse.emf.ecore.util.ExtendedMetaData;
+import org.eclipse.emf.ecore.xmi.ClassNotFoundException;
+import org.eclipse.emf.ecore.xmi.FeatureNotFoundException;
+import org.eclipse.emf.ecore.xmi.IllegalValueException;
+import org.eclipse.emf.ecore.xmi.PackageNotFoundException;
+import org.eclipse.emf.ecore.xmi.UnresolvedReferenceException;
+import org.eclipse.emf.ecore.xmi.XMIException;
 import org.eclipse.emf.ecore.xmi.XMLResource;
 import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
+import org.eclipse.jst.jsf.common.JSFCommonPlugin;
 import org.eclipse.jst.jsf.common.metadata.internal.util.MetadataResourceImpl;
 import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
 
 /**
- * Singelton that produces and loads standard metadata models.  
+ * Singleton that produces and loads standard metadata models.  
  * All models are loaded into the same ResourceSet 
  *
  * see Model
  */
 public class StandardModelFactory {
 	private static StandardModelFactory INSTANCE;
+	private static boolean DEBUG_MD_LOAD = false;
 	private ExtendedMetaData extendedMetaData;
 	private ResourceSet resourceSet;
-	
+
 	
 	/**
 	 * @return singleton instance of the metadata model factory
@@ -44,17 +55,21 @@
 	public synchronized static StandardModelFactory getInstance(){
 		if (INSTANCE == null){
 			INSTANCE = new StandardModelFactory();
-			INSTANCE.init();			
+			INSTANCE.init();	
+			
+			if (JSFCommonPlugin.getPlugin().isDebugging()){
+				DEBUG_MD_LOAD = Boolean.valueOf(Platform.getDebugOption(JSFCommonPlugin.PLUGIN_ID+"/debug/metadataload")).booleanValue();
+			}
 		}
 		return INSTANCE;
 	}
-
+	
 	private void init() {
 		resourceSet = new ResourceSetImpl();
 		
 	    extendedMetaData = new BasicExtendedMetaData(resourceSet.getPackageRegistry());
 		
-		// Register the appropriate resource factory to handle all file extentions.
+		// Register the appropriate resource factory to handle all file extensions.
 		//
 		resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put
 			(Resource.Factory.Registry.DEFAULT_EXTENSION, 
@@ -63,13 +78,6 @@
 		//relying on the org.eclipse.emf.ecore.generated_package ext-pt to register traits
 	}
 
-//	private void registerTraitTypes(Registry packageRegistry) {
-//		for(Iterator/*<EPackage>*/ it=TraitTypeRegistry.getInstance().getEPackages().iterator();it.hasNext();){
-//			EPackage pkg = (EPackage)it.next();
-//			packageRegistry.put(pkg.getNsURI(), pkg);
-//		}
-//	}
-
 	private StandardModelFactory() {		
 		super();
 	}
@@ -96,32 +104,87 @@
 	/**
 	 * @param inputStream
 	 * @param provider
+	 * @param uri 
 	 * @return the root of the standard model from the resource as an EList
 	 * @throws IOException
 	 */
-	public EList loadStandardFileResource(InputStream inputStream, IMetaDataSourceModelProvider provider) throws IOException {
-		XMLResource res = new MetadataResourceImpl(provider); 
+	public EList loadStandardFileResource(final InputStream inputStream, final IMetaDataSourceModelProvider provider, final org.eclipse.emf.common.util.URI uri) throws IOException {
+		final XMLResource res = new MetadataResourceImpl(provider); 		
+		res.setURI(uri);
 		resourceSet.getResources().add(res);
 		setLoadOptions(res);
 		res.load(inputStream, null);
-		EList root = res.getContents();		
+		if (DEBUG_MD_LOAD)
+			reportErrors(res);
+		final EList root = res.getContents();		
 		return root;	
 	}
 
+	private void reportErrors(Resource res) {
+		EList<Resource.Diagnostic> errs = res.getErrors();
+		if (! errs.isEmpty()){
+			for (Iterator<Resource.Diagnostic> it= errs.iterator();it.hasNext();){				
+				StandardModelErrorMessageFactory.logErrorMessage(it.next());
+			}		
+		}
+	}
 	/**
 	 * Sets default load options for the resource
 	 * @param resource 
 	 */
 	protected void setLoadOptions(XMLResource resource) {
 		Map options = resource.getDefaultLoadOptions();
-//		options.put(XMLResource.OPTION_SAVE_TYPE_INFORMATION, true);				
+//		options.put(XMLResource.OPTION_SAVE_TYPE_INFORMATION, true);
 		options.put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
 		options.put(XMLResource.OPTION_EXTENDED_META_DATA, extendedMetaData);
 		options.put(XMLResource.OPTION_RESOURCE_HANDLER, resource);
 		options.put(XMLResource.OPTION_LAX_FEATURE_PROCESSING, Boolean.TRUE);
-		options.put(XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.TRUE);
+		options.put(XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.FALSE);//turning this off so that res.getErrors() has values to check!  bizarre that I should need to do this.
 //		options.put(XMLResource.OPTION_DOM_USE_NAMESPACES_IN_SCOPE, Boolean.TRUE);
 	}
 
 
+	static class StandardModelErrorMessageFactory {
+		
+		/**
+		 * Simply logs all messages against JSFCommonPlugin, for now.
+		 * @param diagnostic
+		 */
+		public static void logErrorMessage(Resource.Diagnostic diagnostic) {	
+			//should be XMIException
+			if (diagnostic instanceof XMIException) {
+				XMIException ex = (XMIException)diagnostic;				
+				String msg = createMessage(ex);
+				JSFCommonPlugin.log(IStatus.ERROR, msg);
+//				System.out.println(msg);
+			}
+			else {
+				JSFCommonPlugin.log(IStatus.ERROR, diagnostic.toString());//do better???
+//				System.out.println(diagnostic.toString());	
+			}
+		}
+
+		private static String createMessage(XMIException ex) {
+			
+			StringBuffer buf = new StringBuffer("Metadata Load Error: ")
+				.append(ex.getClass().getSimpleName()).append(": ");
+			
+			if (ex instanceof PackageNotFoundException)
+				buf.append(((PackageNotFoundException)ex).uri());			
+			else if (ex instanceof ClassNotFoundException)
+				buf.append(((ClassNotFoundException)ex).getName());
+			else if (ex instanceof FeatureNotFoundException)
+				buf.append(((FeatureNotFoundException)ex).getName());
+			else if (ex instanceof IllegalValueException)
+				buf.append(((IllegalValueException)ex).getValue().toString());
+			else if (ex instanceof UnresolvedReferenceException)
+				buf.append(((UnresolvedReferenceException)ex).getReference());	
+			else
+				buf.append(ex.getMessage());
+			
+			buf.append(" in ").append(ex.getLocation()).append(": Line = ")
+				.append(ex.getLine()).append(": Column = ").append(ex.getColumn());
+			return buf.toString();
+		}
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/TraitValueHelper.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/TraitValueHelper.java
index 7b863b7..804e368 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/TraitValueHelper.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/TraitValueHelper.java
@@ -28,7 +28,8 @@
 import org.eclipse.osgi.util.NLS;
 
 /**
- * Experimental/prototype class to assist with decoding trait values
+ * Experimental/prototype class to assist with decoding trait values.
+ * This could/should be made API at some point after "hardening". (https://bugs.eclipse.org/bugs/show_bug.cgi?id=192052) 
  */
 public class TraitValueHelper {
 	private static final String KEY_NOT_FOUND = Messages.Key_not_found;
@@ -37,6 +38,8 @@
 	 * @return EClass of trait value
 	 */
 	public static EClass getValueType(Trait trait){
+		if (trait == null)
+			return null;
 		if (trait.getValue() != null)
 			return trait.getValue().eClass();
 		return null;
@@ -44,7 +47,7 @@
 	
 	/**
 	 * @param trait
-	 * @return value of trait as Object
+	 * @return value of trait as String Object.  
 	 */
 	public static Object getValue(Trait trait){
 		if (trait == null)
@@ -82,7 +85,7 @@
 	 */
 	public static String getValueAsString(Trait trait){
 		Object val = getValue(trait);
-		if (val != null && val instanceof String){			
+		if (val instanceof String){			
 			String result = getNLSValue(trait, (String)val);
 			return result;
 		}
@@ -95,7 +98,7 @@
 	 * @return List of Strings.  If externalized, will resolve from resource bundle 
 	 * using getNLSValue(Trait trait, String rawValue)
 	 */
-	public static List getValueAsListOfStrings(Trait trait){
+	public synchronized static List getValueAsListOfStrings(Trait trait){
 		//PROTO ONLY!!! Need to make WAY more robust!
 		List ret = new ArrayList();
 		if (trait.getValue() instanceof ListOfValues) {
@@ -163,7 +166,7 @@
 
 	/**
 	 * Will take get the value as a String and attempt to coerce to boolean.
-	 * Will return 'false' if coercion fails.
+	 * Will return 'false' if coercion fails, or value was null.
 	 * @param trait
 	 * @return true or false 
 	 */
@@ -174,5 +177,25 @@
 		
 		return Boolean.valueOf(val).booleanValue();
 	}
+	
+//	/**
+//	 * @param trait
+//	 * @return name of class or primitive datatype that the value is defined as.   
+//	 * For SimpleAnyTypes, the getInstanceType().getInstanceClassName() is returned.
+//	 * For AnyType, java.lang.String is always returned.
+//	 * For all others, the class.getName() is returned.
+//	 */
+//	public static String getValueInstanceClassName(Trait trait) {String.class.getName();
+//		if (trait.getValue() instanceof SimpleAnyType) {
+//			return ((SimpleAnyType)trait.getValue()).getInstanceType().getInstanceClassName();
+//		}
+//		else if (trait.getValue() instanceof AnyType) {
+//			return String.class.getName();
+//		}
+//		else {
+//			return trait.getValue().getClass().getName();
+//		}
+//		
+//	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/EntityGroupImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/EntityGroupImpl.java
index 9343b62..f9fc4de 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/EntityGroupImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/EntityGroupImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: EntityGroupImpl.java,v 1.4 2007/05/11 17:54:55 gkessler Exp $
+ * $Id: EntityGroupImpl.java,v 1.5 2008/02/01 20:20:47 gkessler Exp $
  */
 package org.eclipse.jst.jsf.common.metadata.internal.impl;
 
@@ -19,13 +19,13 @@
  *
  * @generated
  */
+@SuppressWarnings("hiding")
 public class EntityGroupImpl extends EntityImpl implements EntityGroup {
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2007 Oracle Corporation";
 
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/ModelImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/ModelImpl.java
index 764e9a2..4c5db28 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/ModelImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/ModelImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: ModelImpl.java,v 1.5 2007/05/16 23:51:15 gkessler Exp $
+ * $Id: ModelImpl.java,v 1.6 2008/02/01 20:20:47 gkessler Exp $
  */
 package org.eclipse.jst.jsf.common.metadata.internal.impl;
 
@@ -35,13 +35,13 @@
  *
  * @generated
  */
+@SuppressWarnings("hiding")
 public class ModelImpl extends EntityImpl implements Model {
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2007 Oracle Corporation";
 
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/TraitImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/TraitImpl.java
index 01f3d1f..616aaf0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/TraitImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/impl/TraitImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: TraitImpl.java,v 1.5 2007/06/11 20:55:58 gkessler Exp $
+ * $Id: TraitImpl.java,v 1.7 2008/02/01 22:16:42 gkessler Exp $
  */
 package org.eclipse.jst.jsf.common.metadata.internal.impl;
 
@@ -26,17 +26,12 @@
  * <p>
  * The following features are implemented:
  * <ul>
- *   <li>{@link com.foo.model.metadata.impl.TraitImpl#getType <em>Type</em>}</li>
- *   <li>{@link com.foo.model.metadata.impl.TraitImpl#getValue <em>Value</em>}</li>
+ *   <li>{@link TraitImpl#getValue <em>Value</em>}</li>
  * </ul>
  * </p>
  *
  * @generated
  */
-/**
- * @author Owner
- *
- */
 public class TraitImpl extends EObjectImpl implements Trait {
 	/**
 	 * <!-- begin-user-doc -->
@@ -315,7 +310,7 @@
 		return result.toString();
 	}
 
-	public boolean equals(@SuppressWarnings("hiding")Object value){
+	public boolean equals(@SuppressWarnings("hiding") Object value){
 		if (!(value instanceof String))
 			return super.equals(value);
 		
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/util/MetadataResourceImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/util/MetadataResourceImpl.java
index a82e0da..7af2b51 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/util/MetadataResourceImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/util/MetadataResourceImpl.java
@@ -2,10 +2,11 @@
  * <copyright>
  * </copyright>
  *
- * $Id: MetadataResourceImpl.java,v 1.7 2007/05/11 17:54:56 gkessler Exp $
+ * $Id: MetadataResourceImpl.java,v 1.9 2008/02/01 20:20:47 gkessler Exp $
  */
 package org.eclipse.jst.jsf.common.metadata.internal.util;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Map;
@@ -13,8 +14,10 @@
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.xmi.XMLHelper;
+import org.eclipse.emf.ecore.xmi.XMLLoad;
 import org.eclipse.emf.ecore.xmi.XMLResource;
 import org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl;
+import org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl;
 import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
 import org.eclipse.jst.jsf.common.metadata.Entity;
 import org.eclipse.jst.jsf.common.metadata.MetadataPackage;
@@ -69,12 +72,20 @@
 		super();
 		_provider = provider;
 	}
+	
+	/**
+	 * @generated NOT
+	 */
+	protected XMLLoad createXMLLoad() {
+		return new MetadataXMLLoad(createXMLHelper());
+	}
 	/**
 	* Override createXMLHelper so that MetadataPackage.eINSTANCE is used for the NoNamespace package
 	* @generated NOT
 	*/
 	protected XMLHelper createXMLHelper() {
 		return new XMLHelperImpl(){
+			@Override
 			public EPackage getNoNamespacePackage() {
 				return MetadataPackage.eINSTANCE;
 			}
@@ -84,7 +95,7 @@
 	public void postLoad(XMLResource resource, InputStream inputStream,
 			Map options) {
 		Object aRoot = resource.getContents().get(0);
-		if (aRoot != null && aRoot instanceof Model){			
+		if (aRoot instanceof Model){			
 			setModelKeyInTraits((Model)aRoot, (Model)aRoot);
 		}
 	}
@@ -109,20 +120,34 @@
 
 	public void postSave(XMLResource resource, OutputStream outputStream,
 			Map options) {
-		// TODO Auto-generated method stub
-		
+		// do nothing		
 	}
 
 	public void preLoad(XMLResource resource, InputStream inputStream,
 			Map options) {
-		// TODO Auto-generated method stub
-		
+		// do nothing		
 	}
 
 	public void preSave(XMLResource resource, OutputStream outputStream,
 			Map options) {
-		// TODO Auto-generated method stub
-		
+		// do nothing		
 	}
 
+	/**
+	 * Override the handleErrors() method so that resource will load gracefully, and errors reported later
+	 * when appropriate
+	 *
+	 */
+	private class MetadataXMLLoad extends XMLLoadImpl {
+
+		public MetadataXMLLoad(XMLHelper helper) {
+			super(helper);
+		}
+
+		@Override
+		protected void handleErrors() throws IOException {
+			//by doing nothing here, this allows the list of non-fatal errors (res.getErrors()) to be returned
+		}
+		
+	}
 } //MetadataResourceImpl
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/util/MetadataSwitch.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/util/MetadataSwitch.java
index 39efb15..4812ac4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/util/MetadataSwitch.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/internal/util/MetadataSwitch.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: MetadataSwitch.java,v 1.5 2007/05/11 17:54:56 gkessler Exp $
+ * $Id: MetadataSwitch.java,v 1.6 2007/10/01 04:29:45 cbateman Exp $
  */
 package org.eclipse.jst.jsf.common.metadata.internal.util;
 
@@ -86,13 +86,11 @@
 		if (theEClass.eContainer() == modelPackage) {
 			return doSwitch(theEClass.getClassifierID(), theEObject);
 		}
-		else {
-			List eSuperTypes = theEClass.getESuperTypes();
-			return
-				eSuperTypes.isEmpty() ?
-					defaultCase(theEObject) :
-					doSwitch((EClass)eSuperTypes.get(0), theEObject);
-		}
+		List eSuperTypes = theEClass.getESuperTypes();
+		return
+			eSuperTypes.isEmpty() ?
+				defaultCase(theEObject) :
+				doSwitch((EClass)eSuperTypes.get(0), theEObject);
 	}
 
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/AbstractResultSet.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/AbstractResultSet.java
index e459d7c..32b4982 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/AbstractResultSet.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/AbstractResultSet.java
@@ -39,7 +39,6 @@
 	 * Overridable method to close resultset.  This is called by close()
 	 * @throws MetaDataException
 	 */
-	@SuppressWarnings("unused")
 	protected void doClose() throws MetaDataException {
 		//subclasses to provide override
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/EmptyResultSet.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/EmptyResultSet.java
index 6b4c62e..0c6539e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/EmptyResultSet.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/EmptyResultSet.java
@@ -20,28 +20,20 @@
  * <p><b>Provisional API - subject to change</b></p>
  */
 public final class EmptyResultSet implements IResultSet {
-
-	public void close() {//
+	private boolean _isClosed = false;
+	public void close() {
+		_isClosed = true;
 	}
 	
-	public List getResults(){
+	public List getResults() throws MetaDataException{
+		if (_isClosed)
+			throw new MetaDataException("Resultset is closed");
+		
 		return Collections.EMPTY_LIST;		
 	}
-//
-//	public int getSize() throws MetaDataException {
-//		return 0;
-//	}
-//
-//	public boolean hasNext() throws MetaDataException {				
-//		return false;
-//	}
-//
-//	public Object next() throws MetaDataException {
-//		return null;
-//	}
 
 	public boolean isClosed() {
-		return false;
+		return _isClosed;
 	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/TaglibDomainMetaDataQueryHelper.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/TaglibDomainMetaDataQueryHelper.java
index 582db6d..341e4c8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/TaglibDomainMetaDataQueryHelper.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/TaglibDomainMetaDataQueryHelper.java
@@ -11,7 +11,10 @@
  ********************************************************************************/
 package org.eclipse.jst.jsf.common.metadata.query;
 
+import javax.xml.namespace.QName;
+
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jst.jsf.common.JSFCommonPlugin;
 import org.eclipse.jst.jsf.common.metadata.Entity;
@@ -208,4 +211,13 @@
 		}
 		return t;
 	}	
+	
+	/**
+	 * @param tagEntity
+	 * @return QName for tag entity
+	 */
+	public static QName getQNameForTagEntity(Entity tagEntity) {
+		Assert.isTrue(tagEntity != null);
+		return new QName(tagEntity.getModel().getCurrentModelContext().getUri(), tagEntity.getId());
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleEntityQueryVisitorImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleEntityQueryVisitorImpl.java
index 0e260ef..0748095 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleEntityQueryVisitorImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleEntityQueryVisitorImpl.java
@@ -18,15 +18,15 @@
 import org.eclipse.jst.jsf.common.metadata.Entity;
 import org.eclipse.jst.jsf.common.metadata.EntityGroup;
 import org.eclipse.jst.jsf.common.metadata.query.AbstractEntityQueryVisitor;
-import org.eclipse.jst.jsf.common.metadata.query.IEntityQueryVisitor;
 import org.eclipse.jst.jsf.common.metadata.query.IResultSet;
-import org.eclipse.jst.jsf.common.metadata.query.ITraitQueryVisitor;
 
 
 /**
- * A simple metadata query visitor implementing {@link IEntityQueryVisitor} and {@link ITraitQueryVisitor}.
+ * A simple metadata query visitor implementing {@link org.eclipse.jst.jsf.common.metadata.query.IEntityQueryVisitor} and {@link org.eclipse.jst.jsf.common.metadata.query.ITraitQueryVisitor}.
  * - simple find entity and traits by id only 	
  * - Does not allow for wild card searchs
+ * 
+ * 	TODO - fix for case-sensitivity   https://bugs.eclipse.org/bugs/show_bug.cgi?id=212794
  */
 public class SimpleEntityQueryVisitorImpl extends AbstractEntityQueryVisitor  {
 	private HierarchicalSearchControl control;
@@ -115,7 +115,9 @@
 	}
 
 	/**
-	 * Simple comparator that compares that an entity's id for with another
+	 * Simple comparator that compares that an entity's id for with another.
+	 * Case-insensitive compare
+	 *
 	 */
 	private class EntityQueryComparator implements Comparable/*<Entity>*/{
 
@@ -127,13 +129,13 @@
 		 * @param entityKey
 		 */
 		public EntityQueryComparator(String entityKey){
-			this.entityKey = entityKey;		
+			this.entityKey = entityKey.toUpperCase();		
 			stack = new EntityStack();
 		}
 		
 		public int compareTo(Object entity) {			
 			stack.push(entity);
-			return entityKey.compareTo(getRelativeId());			
+			return entityKey.compareTo(getRelativeId().toUpperCase());			
 		}
 		
 		/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleResultSet.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleResultSet.java
index 7759589..a3b2f2a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleResultSet.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleResultSet.java
@@ -16,10 +16,9 @@
 import java.util.List;
 
 import org.eclipse.jst.jsf.common.metadata.query.AbstractResultSet;
-import org.eclipse.jst.jsf.common.metadata.query.IResultSet;
 
 /**
- * Simple implementation of {@link IResultSet} by extending AbstractResultSet
+ * Simple implementation of {@link org.eclipse.jst.jsf.common.metadata.query.IResultSet} by extending AbstractResultSet
  *
  */
 public final class SimpleResultSet/*<T>*/ extends AbstractResultSet/*<T>*/ {	
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleTraitQueryVisitorImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleTraitQueryVisitorImpl.java
index 41b0e56..0042364 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleTraitQueryVisitorImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/query/internal/SimpleTraitQueryVisitorImpl.java
@@ -19,11 +19,10 @@
 import org.eclipse.jst.jsf.common.metadata.Trait;
 import org.eclipse.jst.jsf.common.metadata.query.AbstractTraitQueryVisitor;
 import org.eclipse.jst.jsf.common.metadata.query.IResultSet;
-import org.eclipse.jst.jsf.common.metadata.query.ITraitQueryVisitor;
 
 
 /**
- * A simple metadata query visitor implementing {@link ITraitQueryVisitor}.
+ * A simple metadata query visitor implementing {@link org.eclipse.jst.jsf.common.metadata.query.ITraitQueryVisitor}.
  * - simple find traits by id only 	
  * - Does not allow for wild card searchs
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/ListOfValues.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/ListOfValues.java
index a608cda..52b3382 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/ListOfValues.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/ListOfValues.java
@@ -12,6 +12,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>List Of Values</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  * <p>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/SetGenerator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/SetGenerator.java
index 1a88834..9c4fea7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/SetGenerator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/SetGenerator.java
@@ -11,6 +11,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Set Generator</b></em>'.
+ *
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  *
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/TraitTypesFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/TraitTypesFactory.java
index 83d5af6..6e76eed 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/TraitTypesFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/TraitTypesFactory.java
@@ -12,6 +12,8 @@
  * <!-- begin-user-doc -->
  * The <b>Factory</b> for the model.
  * It provides a create method for each non-abstract class of the model.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  * @see org.eclipse.jst.jsf.common.metadata.traittypes.traittypes.TraitTypesPackage
  * @generated
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/TraitTypesPackage.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/TraitTypesPackage.java
index f511e1a..5ea095d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/TraitTypesPackage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/TraitTypesPackage.java
@@ -21,11 +21,14 @@
  *   <li>each enum,</li>
  *   <li>and each data type</li>
  * </ul>
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  * @see org.eclipse.jst.jsf.common.metadata.traittypes.traittypes.TraitTypesFactory
  * @model kind="package"
  * @generated
  */
+@SuppressWarnings("hiding")
 public interface TraitTypesPackage extends EPackage {
 	/**
 	 * <!-- begin-user-doc -->
@@ -216,7 +219,6 @@
 		 * @see org.eclipse.jst.jsf.common.metadata.traittypes.traittypes.internal.impl.TraitTypesPackageImpl#getListOfValues()
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EClass LIST_OF_VALUES = eINSTANCE.getListOfValues();
 
 		/**
@@ -225,7 +227,6 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
 		EReference LIST_OF_VALUES__ENTRIES = eINSTANCE.getListOfValues_Entries();
 
         /**
@@ -236,7 +237,6 @@
          * @see org.eclipse.jst.jsf.common.metadata.traittypes.traittypes.internal.impl.TraitTypesPackageImpl#getSetGenerator()
          * @generated
          */
-        @SuppressWarnings("hiding")
 		EClass SET_GENERATOR = eINSTANCE.getSetGenerator();
 
         /**
@@ -245,7 +245,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
 		EAttribute SET_GENERATOR__ALGORITHM = eINSTANCE.getSetGenerator_Algorithm();
 
         /**
@@ -254,7 +253,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
 		EAttribute SET_GENERATOR__EXPRESSION = eINSTANCE.getSetGenerator_Expression();
 
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/internal/util/TraitTypesSwitch.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/internal/util/TraitTypesSwitch.java
index aeedcd7..e3dc79d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/internal/util/TraitTypesSwitch.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/metadata/traittypes/traittypes/internal/util/TraitTypesSwitch.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: TraitTypesSwitch.java,v 1.5 2007/05/11 17:54:56 gkessler Exp $
+ * $Id: TraitTypesSwitch.java,v 1.6 2007/10/01 04:29:44 cbateman Exp $
  */
 package org.eclipse.jst.jsf.common.metadata.traittypes.traittypes.internal.util;
 
@@ -79,13 +79,11 @@
         if (theEClass.eContainer() == modelPackage) {
             return doSwitch(theEClass.getClassifierID(), theEObject);
         }
-        else {
-            List eSuperTypes = theEClass.getESuperTypes();
-            return
-                eSuperTypes.isEmpty() ?
-                    defaultCase(theEObject) :
-                    doSwitch((EClass)eSuperTypes.get(0), theEObject);
-        }
+		List eSuperTypes = theEClass.getESuperTypes();
+		return
+		    eSuperTypes.isEmpty() ?
+		        defaultCase(theEObject) :
+		        doSwitch((EClass)eSuperTypes.get(0), theEObject);
     }
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/AxiomaticSet.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/AxiomaticSet.java
index 7ad5d24..8bc2881 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/AxiomaticSet.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/AxiomaticSet.java
@@ -17,6 +17,8 @@
  * extensionality (equality), union, intersection, 
  * relative complement (set subtraction) and empty (already 
  * supported by Set).
+ *
+ * <p><b>Provisional API - subject to change</b></p>
  * 
  * @author cbateman
  *
@@ -25,7 +27,7 @@
 {
     /**
      * Implementations should aim to provide O(mn) time cost
-     * where n is the number of elements in this set.  And
+     * where n is the number of elements in this set and
      * m is the cost to check membership of an element in this
      * set in toSet.  When a set is itself a member of a set,
      * the implementation must call isEquivalent on those subsets
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/AxiomaticSetUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/AxiomaticSetUtil.java
index c5aa87f..baf9f8d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/AxiomaticSetUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/AxiomaticSetUtil.java
@@ -16,6 +16,8 @@
 /**
  * Generic (unoptimized) utilities for doing set operations.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
@@ -41,7 +43,7 @@
      */
     public static void intersect(AxiomaticSet newSet, AxiomaticSet firstSet, AxiomaticSet secondSet)
     {
-        // minor optimization: always iterator through the smaller of the
+        // minor optimization: always iterate through the smaller of the
         // two sets.  This way we iterate through the smallest number
         // of elements
         Iterator it = null;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/ConcreteAxiomaticSet.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/ConcreteAxiomaticSet.java
index 5bdeb11..b82c03f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/ConcreteAxiomaticSet.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/ConcreteAxiomaticSet.java
@@ -14,6 +14,9 @@
 
 /**
  * Implements a simple axiomatic set based on a hashset
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/NodeSet.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/NodeSet.java
index 9eb753f..146b833 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/NodeSet.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/NodeSet.java
@@ -24,6 +24,8 @@
  * 
  * This set is immutable (mutation methods throw exceptions)
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/constraint/AbstractMemberConstraint.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/constraint/AbstractMemberConstraint.java
index 6cc2f6d..d71ebf0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/constraint/AbstractMemberConstraint.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/constraint/AbstractMemberConstraint.java
@@ -15,6 +15,9 @@
 
 /**
  * A set constraint that is specific to members of the set.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/constraint/AbstractSetConstraint.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/constraint/AbstractSetConstraint.java
index 2bcbd34..f176a37 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/constraint/AbstractSetConstraint.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/constraint/AbstractSetConstraint.java
@@ -20,6 +20,8 @@
  * and returns a diagnostic that flags whether or not the set
  * satisfies that constraint or not.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/AbstractObjectInjectiveSetMapping.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/AbstractObjectInjectiveSetMapping.java
index 44118d2..8c2d5b5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/AbstractObjectInjectiveSetMapping.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/AbstractObjectInjectiveSetMapping.java
@@ -18,6 +18,8 @@
 /**
  * Super-class of all ObjectInjectiveSetMapping.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/AxiomaticSetMapping.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/AxiomaticSetMapping.java
index 0258150..d6ab1ff 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/AxiomaticSetMapping.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/AxiomaticSetMapping.java
@@ -20,6 +20,8 @@
  * 
  * AxiomaticSetMapping: set -> map(set)
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/ObjectInjectiveSetMapping.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/ObjectInjectiveSetMapping.java
index eae7155..ce33eec 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/ObjectInjectiveSetMapping.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/sets/mapping/ObjectInjectiveSetMapping.java
@@ -15,7 +15,7 @@
 import org.eclipse.jst.jsf.common.sets.AxiomaticSet;
 
 /**
- * A type of axiomatic set mapping that operates injectively on the output
+ * A type of axiomatic set mapping that operates injectively on the input
  * set to create its result set.  Note that the injection (one-to-oneness)
  * of the mapping is based on Java objects and not on the value of the object.
  * Therefore, the result set is not guaranteed to be injective on the basis
@@ -41,6 +41,8 @@
  * This interface should not be implemented by clients. Clients should
  * sub-class AbstractObjectInjectiveSetMapping to avoid future API breakage.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanIntrospector.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanIntrospector.java
index 29922c16..e584233 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanIntrospector.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanIntrospector.java
@@ -15,9 +15,9 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jdt.core.Flags;
@@ -37,6 +37,8 @@
  * error handling of bean instantiation out of context) way
  * to determine a bean's properties at design time.
  * 
+ * This class may not be sub-classed by clients.
+ * 
  * @author cbateman
  *
  */
@@ -84,11 +86,10 @@
 
         final Map properties = new HashMap();
         
-        for (final Iterator it = propertiesWorkingCopy.keySet().iterator(); it.hasNext();)
+        for (Entry<String, JDTBeanProperty> entry : propertiesWorkingCopy.entrySet())
         {
-            final String key = (String) it.next();
-            JDTBeanPropertyWorkingCopy  wcopy = 
-                (JDTBeanPropertyWorkingCopy) propertiesWorkingCopy.get(key);
+            final String key = entry.getKey();
+            JDTBeanPropertyWorkingCopy  wcopy = (JDTBeanPropertyWorkingCopy) entry.getValue();
             properties.put(key, wcopy.toValueObject());
         }
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanProperty.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanProperty.java
index e9da9cf..3f92f83 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanProperty.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanProperty.java
@@ -23,6 +23,8 @@
 /**
  * Represents a single bean property backed by JDT data
  * 
+ * This class may not be sub-classed by clients.
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanPropertyWorkingCopy.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanPropertyWorkingCopy.java
index df1baf3..f3bdf14 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanPropertyWorkingCopy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/JDTBeanPropertyWorkingCopy.java
@@ -22,6 +22,8 @@
 /**
  * A writable version of the JDTBeanProperty object
  * 
+ * This class may not be sub-classed by clients
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/TypeUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/TypeUtil.java
index d26fac4..50034cd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/TypeUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/util/TypeUtil.java
@@ -15,6 +15,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IJavaProject;
@@ -29,6 +30,8 @@
 /**
  * Utility for handling IType's and type signatures
  * 
+ * Class is static and cannot be extended or instantiated.
+ * 
  * @author cbateman
  *
  */
@@ -38,6 +41,7 @@
     {
         // if type signature is already resolved then simply look it up
         if (typeSignature.charAt(0) == Signature.C_RESOLVED
+        		|| (Signature.getTypeSignatureKind(typeSignature) == Signature.BASE_TYPE_SIGNATURE)
         		|| (Signature.getTypeSignatureKind(typeSignature) == Signature.ARRAY_TYPE_SIGNATURE
         			&& Signature.getElementType(typeSignature).charAt(0) == Signature.C_RESOLVED))
         {
@@ -139,12 +143,28 @@
                 
                 return resultType+resolvedElementType;
             }
+
+            case Signature.TYPE_VARIABLE_SIGNATURE:
+            	return resolveSignatureRelative(owningType, typeSignature, eraseTypeParameters);
             
             case Signature.CLASS_TYPE_SIGNATURE:
                 return resolveSignatureRelative(owningType, typeSignature, eraseTypeParameters);
-    
-            case Signature.TYPE_VARIABLE_SIGNATURE:
-                resolveSignatureRelative(owningType, typeSignature, eraseTypeParameters);
+
+            case Signature.WILDCARD_TYPE_SIGNATURE:
+                // strip the wildcard and try again.  Too bad Signature doesn't seem to have a method
+                // for this
+                if (typeSignature.charAt(0) == Signature.C_STAR)
+                {
+                    return TypeConstants.TYPE_JAVAOBJECT;
+                }
+                return resolveTypeSignature(owningType, typeSignature.substring(1), eraseTypeParameters);
+            
+            case Signature.CAPTURE_TYPE_SIGNATURE:
+                // strip the capture and try again
+                return resolveTypeSignature(owningType, Signature.removeCapture(typeSignature), eraseTypeParameters);
+//            case Signature.TYPE_VARIABLE_SIGNATURE:
+//                resolveSignatureRelative(owningType, typeSignature, eraseTypeParameters);
+
             default:
                 return typeSignature;
         }
@@ -174,11 +194,31 @@
                 // ensure that type parameters are resolved recursively
                 for (String typeParam : Signature.getTypeArguments(typeSignature))
                 {
-                    typeParameters.add(resolveSignatureRelative(owningType, //use the enclosing type, *not* the resolved type because we need to resolve in that context
-                            typeParam, eraseTypeParameters));
+                    typeParam = Signature.removeCapture(typeParam);
+                    // check and remove bound wildcarding (extends/super/?)
+                    if (Signature.getTypeSignatureKind(typeParam) == Signature.WILDCARD_TYPE_SIGNATURE)
+                    {
+                        // convert ? to Object, strip extends/super
+                        if (typeParam.charAt(0) == Signature.C_STAR)
+                        {
+                            typeParam = TypeConstants.TYPE_JAVAOBJECT;
+                        }
+                        else
+                        {
+                            typeParam = typeParam.substring(1);
+                        }
+                    }
+                    final String resolvedParameter = 
+                    	resolveSignatureRelative(
+                    			// use the enclosing type, 
+                    			// *not* the resolved type because 
+                    			// we need to resolve in that context
+                    			owningType, 
+                    				typeParam, eraseTypeParameters);
+                    typeParameters.add(resolvedParameter);
                 }
             }
-            
+
             final String  resolvedTypeSignature = 
                 Signature.createTypeSignature
                     (resolvedType.getFullyQualifiedName(), true);
@@ -327,7 +367,19 @@
             for (int i = 0; i < superTypes.length; i++)
         {
             IType type = superTypes[i];
-            resolved = type.resolveType(fullyQualifiedName);
+            
+            // XXX: this is a partial workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=212225
+            // In certain cases, unresolved type names may cause resolveType to
+            // throw array out of bounds.
+            try
+            {
+            	resolved = type.resolveType(fullyQualifiedName);
+            }
+            catch (ArrayIndexOutOfBoundsException ae)
+            {
+            	resolved = null;
+            	JSFCommonPlugin.log(IStatus.WARNING, "Known issue detected.  See https://bugs.eclipse.org/bugs/show_bug.cgi?id=212225");
+            }
             
             if (resolved != null && resolved.length > 0)
             {
@@ -364,10 +416,11 @@
     
     /**
      * @param type
-     * @param typeParamSignature
+     * @param typeParamSignature -- must be a Type Variable Signature
      * @param typeArguments
      * @return the signature for the type argument in typeArguments that matches the
      * named typeParamSignature in type.
+     * @throws IllegalArgumentException if typeParamSignature is not valid
      * 
      * For example, given type for java.util.Map, typeParamSignature == "V" and
      * typeArguments = {Ljava.util.String;, Lcom.test.Blah;}, the result would be
@@ -377,6 +430,11 @@
      */
     public static String matchTypeParameterToArgument(final IType type, final String typeParamSignature, final List<String> typeArguments)
     {
+    	if (Signature.getTypeSignatureKind(typeParamSignature) != Signature.TYPE_VARIABLE_SIGNATURE)
+    	{
+    		throw new IllegalArgumentException();
+    	}
+    	
         try
         {
             ITypeParameter[] typeParams = type.getTypeParameters();
@@ -539,4 +597,9 @@
         // if unresolved assume false
         return false;
     }
+    
+    private TypeUtil()
+    {
+        // no external instantiation
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationHelper.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationHelper.java
index c16363d..506ee47 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationHelper.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationHelper.java
@@ -40,7 +40,7 @@
  * 
  * also see org.eclipse.jst.jsf.contentmodel.annotations.annotationFiles extension-point
  * 
- * @deprecated see common.metadata package
+ * @deprecated see <code>org.eclipse.jst.jsf.common.metadata</code>  package
  */
 public class CMAnnotationHelper {
 	private static List EMPTY_LIST = new ArrayList(0);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationPropertyValue.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationPropertyValue.java
index fc326b6..4147572 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationPropertyValue.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationPropertyValue.java
@@ -19,7 +19,7 @@
  * 
  * @author Gerry Kessler - Oracle
  *
- * @deprecated see common.metadata package
+ * @deprecated see <code>org.eclipse.jst.jsf.common.metadata</code>  package
  */
 public class CMAnnotationPropertyValue {
 	private ICMAnnotationSourceFileInfo fileInfo;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationSourceFileLocator.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationSourceFileLocator.java
index 45a1cd2..71abc4b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationSourceFileLocator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/CMAnnotationSourceFileLocator.java
@@ -25,7 +25,7 @@
  * Implementors must provide a zero-argument constructor.
  * 
  * @author Gerry Kessler - Oracle
- * @deprecated see common.metadata package
+ * @deprecated see <code>org.eclipse.jst.jsf.common.metadata</code>  package
  */ 
 public abstract class CMAnnotationSourceFileLocator{
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/ICMAnnotationFileParser.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/ICMAnnotationFileParser.java
index 1633405..ebf214f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/ICMAnnotationFileParser.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/ICMAnnotationFileParser.java
@@ -23,7 +23,7 @@
  * @see org.eclipse.jst.jsf.contentmodel.annotation.internal.ICMAnnotationAdvisor
  * @see org.eclipse.jst.jsf.contentmodel.annotation.CMAnnotationSourceFileLocator
  * 
- * @deprecated see common.metadata package
+ * @deprecated see <code>org.eclipse.jst.jsf.common.metadata</code>  package
  */
 public interface ICMAnnotationFileParser {
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/ICMAnnotationSourceFileInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/ICMAnnotationSourceFileInfo.java
index 5cf4976..8b9ca6a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/ICMAnnotationSourceFileInfo.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/ICMAnnotationSourceFileInfo.java
@@ -18,7 +18,7 @@
  * Not intended to be implemented by clients.
  * @author Gerry Kessler - Oracle
  * 
- * @deprecated see common.metadata package
+ * @deprecated see <code>org.eclipse.jst.jsf.common.metadata</code>  package
  */
 public interface ICMAnnotationSourceFileInfo {
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotation.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotation.java
index f625b77..5fa5d3d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotation.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotation.java
@@ -24,8 +24,11 @@
  */
 public abstract class CMAnnotation {
 	private String _name;	
-	protected Hashtable props = new Hashtable(3);
+	private Hashtable props = new Hashtable(3);
 
+	/**
+	 * @param name
+	 */
 	public CMAnnotation(String name) {
 		setName(name.trim());
 	}
@@ -34,10 +37,17 @@
 		_name = name;
 	}
 
+	/**
+	 * @return the name
+	 */
 	public String getName() {
 		return _name;
 	}
 
+	/**
+	 * @param propertyName
+	 * @param propertyValue
+	 */
 	public void setProperty(String propertyName, String propertyValue) {
 		CMAnnotationProperty prop = getAnnotationProperty(propertyName);
 		if (prop == null){
@@ -49,6 +59,10 @@
 		}		
 	}
 
+	/**
+	 * @param propertyName
+	 * @return the annotation property
+	 */
 	public CMAnnotationProperty getAnnotationProperty(String propertyName){
 		if (props.containsKey(propertyName))
 			return (CMAnnotationProperty)props.get(propertyName);
@@ -59,23 +73,39 @@
 		private String propName;
 		private List propValues = new ArrayList(2);
 		
+		/**
+		 * @param propertyName
+		 */
 		public CMAnnotationProperty(String propertyName){
 			propName = propertyName;
 		}
 
+		/**
+		 * @param propertyName
+		 * @param propertyValue
+		 */
 		public CMAnnotationProperty(String propertyName, String propertyValue){
 			propName = propertyName;
 			propValues.add(propertyValue);
 		}
 		
+		/**
+		 * @param propertyValue
+		 */
 		public void setValue(String propertyValue) {
 			propValues.add(propertyValue);
 		}
 		
+		/**
+		 * @return the property name
+		 */
 		public String getPropertyName(){
 			return propName;
 		}
 		
+		/**
+		 * @return the property value
+		 */
 		public List getPropertyValues(){
 			return propValues;
 		}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationAdvisor.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationAdvisor.java
index fc8bce1..87359c8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationAdvisor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationAdvisor.java
@@ -25,6 +25,9 @@
 
 	private CMAnnotationMap map;
 
+	/**
+	 * @param map
+	 */
 	public CMAnnotationAdvisor(CMAnnotationMap map) {
 		this.map = map;
 		setCaseSensitive(true);// default to case sensitive
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileInfo.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileInfo.java
index c9526c0..8388dac 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileInfo.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileInfo.java
@@ -26,6 +26,12 @@
 	private String bundleId;
 	private String parserClassname;
 
+	/**
+	 * @param annotationFileLocation
+	 * @param bundleId
+	 * @param parserClassname
+	 * @param annotationFileLocatorClassname
+	 */
 	public CMAnnotationFileInfo(String annotationFileLocation, String bundleId, String parserClassname, String annotationFileLocatorClassname) {
 		this.annotationFileLocation = annotationFileLocation.trim();
 		this.bundleId = bundleId.trim();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileParser.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileParser.java
index 1fa3ec9..81369d3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileParser.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileParser.java
@@ -38,11 +38,11 @@
  */
 public class CMAnnotationFileParser implements ICMAnnotationFileParser {
 	
-	public static final String TAG_ID_ANNOTATIONS = "grammar-annotations"; //$NON-NLS-1$
-	public static final String TAG_ID_ELEMENT = "cm-element"; //$NON-NLS-1$
-	public static final String TAG_ID_ATTRIBUTE = "cm-attribute"; //$NON-NLS-1$
-	public static final String TAG_ID_PROPERTY = "property"; //$NON-NLS-1$
-	public static final String TAG_ID_PROPERTY_VALUE = "value"; //$NON-NLS-1$
+	private static final String TAG_ID_ANNOTATIONS = "grammar-annotations"; //$NON-NLS-1$
+	private static final String TAG_ID_ELEMENT = "cm-element"; //$NON-NLS-1$
+	private static final String TAG_ID_ATTRIBUTE = "cm-attribute"; //$NON-NLS-1$
+	private static final String TAG_ID_PROPERTY = "property"; //$NON-NLS-1$
+	private static final String TAG_ID_PROPERTY_VALUE = "value"; //$NON-NLS-1$
 
 	/**
 	 * This method is called to parse an annotation file and store the contents
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileParserHelper.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileParserHelper.java
index d5114ad..6736001 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileParserHelper.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileParserHelper.java
@@ -32,10 +32,16 @@
 	private static final String DEFAULT_PARSER_NAME = "org.eclipse.jst.jsf.contentmodel.annotation.internal.CMAnnotationFileParser"; //$NON-NLS-1$
 	private static final String DEFAULT_LOCATOR_NAME = "org.eclipse.jst.jsf.contentmodel.annotation.internal.CMPluginRelativeSourceFileLocator"; //$NON-NLS-1$
 	
+	/**
+	 * default constructor
+	 */
 	public CMAnnotationFileParserHelper() {
 		super();
 	}
 	
+	/**
+	 * @param map
+	 */
 	public void parse(CMAnnotationMap map){
 		ICMAnnotationFileParser parser = getParser(map.getFileInfo());
 		ICMAnnotationAdvisor advisor = new CMAnnotationAdvisor(map);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileRegistry.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileRegistry.java
index 50f093e..58d8ed6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileRegistry.java
@@ -54,6 +54,9 @@
 	
 	private static final boolean DISABLED = true;
 	
+	/**
+	 * @return return the singleton instance of the registry
+	 */
 	public static CMAnnotationFileRegistry getInstance() {
 		if (reg == null){
 			reg = new CMAnnotationFileRegistry();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileRegistryReader.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileRegistryReader.java
index 46f0a7a..ce5bcc0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileRegistryReader.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationFileRegistryReader.java
@@ -30,15 +30,18 @@
  * @deprecated see common.metadata package
  */
 public class CMAnnotationFileRegistryReader {
-	protected static final String EXTENSION_POINT_ID = "annotationFiles"; //$NON-NLS-1$
-	protected static final String TAG_NAME = "annotationFile"; //$NON-NLS-1$
-	protected static final String ATT_URI = "uri"; //$NON-NLS-1$
-	protected static final String ATT_LOCATION = "location"; //$NON-NLS-1$
-	protected static final String ATT_LOCATOR = "locator"; //$NON-NLS-1$
-	protected static final String ATT_PARSER = "parser"; //$NON-NLS-1$
+	private static final String EXTENSION_POINT_ID = "annotationFiles"; //$NON-NLS-1$
+	private static final String TAG_NAME = "annotationFile"; //$NON-NLS-1$
+	private static final String ATT_URI = "uri"; //$NON-NLS-1$
+	private static final String ATT_LOCATION = "location"; //$NON-NLS-1$
+	private static final String ATT_LOCATOR = "locator"; //$NON-NLS-1$
+	private static final String ATT_PARSER = "parser"; //$NON-NLS-1$
 
 	private CMAnnotationFileRegistry annotationFileRegistry;
 
+	/**
+	 * @param annotationFileRegistry
+	 */
 	public CMAnnotationFileRegistryReader(CMAnnotationFileRegistry annotationFileRegistry) {
 		this.annotationFileRegistry = annotationFileRegistry;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationMap.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationMap.java
index f777eb3..47d258f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationMap.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMAnnotationMap.java
@@ -42,10 +42,12 @@
  * @deprecated see common.metadata package
  */
 public class CMAnnotationMap {
-	//map of tag-element annotations keyed by tag name
+	/**
+	 * map of tag-element annotations keyed by tag name
+	 */
 	protected Map cmNodeToAnnotationMap = new Hashtable();
-	protected boolean isCaseSensitive = true;
-	protected ICMAnnotationSourceFileInfo fileInfo;
+	private boolean isCaseSensitive = true;
+	private ICMAnnotationSourceFileInfo fileInfo;
 	private ResourceBundle resourceBundle;
 	private CMAnnotationSourceFileLocator locator;
 
@@ -159,10 +161,12 @@
 	 * Returns list of NLS fixed String values for a given property name of an attribute of a particular element.
 	 * 
 	 * @param elementName
+	 * @param attributeName 
 	 * @param propertyName
 	 * @return List of Strings - can be null
 	 */
 	public List getCMAttributePropertyValues(String elementName, String attributeName, String propertyName) {
+		
 		List result = null;
 		String key = getStringValueForCaseSensitivity(elementName);
 		String attrName = getStringValueForCaseSensitivity(attributeName);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMElementAnnotation.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMElementAnnotation.java
index a9fac73..72048fe 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMElementAnnotation.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/CMElementAnnotation.java
@@ -25,7 +25,7 @@
  * @deprecated see common.metadata package
  */
 public class CMElementAnnotation extends CMAnnotation {
-	protected Hashtable attributes = new Hashtable();
+	private final Hashtable attributes = new Hashtable();
 
 	/**
 	 * Constructor
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/ICMAnnotationAdvisor.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/ICMAnnotationAdvisor.java
index eff8f55..ac34828 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/ICMAnnotationAdvisor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/ICMAnnotationAdvisor.java
@@ -53,6 +53,7 @@
 	 * to an attribute of an element in a particular content model defined by the ICMAnnotationSourceFileInfo.
 	 * 
 	 * @param elementName
+	 * @param attributeName 
 	 * @param propertyName
 	 * @param propertyValue
 	 * 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/Messages.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/Messages.java
index 4d0bacc..58d1ab9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/Messages.java
@@ -20,30 +20,61 @@
 public class Messages extends NLS {
 	private static final String BUNDLE_NAME = "org.eclipse.jst.jsf.contentmodel.annotation.internal.messages"; //$NON-NLS-1$
 
-	public static String CMAnnotationFileParserHelper_class_not_found;
-
-	public static String CMAnnotationFileParserHelper_illegal_access_exception;
-
-	public static String CMAnnotationFileParserHelper_instantiation_exception;
-
-	public static String CMAnnotationFileParserHelper_unable_to_find_bundleid;
-
-	public static String CMAnnotationFileParserHelper_unable_to_parse;
-
-	public static String CMAnnotationFileRegistry_load_error;
-
-	public static String CMAnnotationFileRegistryReader_problem;
-
-	public static String CMAnnotationMap_IOException;
-
-	public static String CMAnnotationMap_key_not_found;
-
-	public static String CMAnnotationMap_MissingResource_exception;
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
 	}
 
+	/**
+	 * see message.properties
+	 */
+	public static String CMAnnotationFileParserHelper_class_not_found;
+
+	/**
+	 * see message.properties
+	 */
+	public static String CMAnnotationFileParserHelper_illegal_access_exception;
+
+	/**
+	 * see message.properties
+	 */
+	public static String CMAnnotationFileParserHelper_instantiation_exception;
+
+	/**
+	 * see message.properties
+	 */
+	public static String CMAnnotationFileParserHelper_unable_to_find_bundleid;
+
+	/**
+	 * see message.properties
+	 */
+	public static String CMAnnotationFileParserHelper_unable_to_parse;
+
+	/**
+	 * see message.properties
+	 */
+	public static String CMAnnotationFileRegistry_load_error;
+
+	/**
+	 * see message.properties
+	 */
+	public static String CMAnnotationFileRegistryReader_problem;
+
+	/**
+	 * see message.properties
+	 */
+	public static String CMAnnotationMap_IOException;
+
+	/**
+	 * see message.properties
+	 */
+	public static String CMAnnotationMap_key_not_found;
+
+	/**
+	 * see message.properties
+	 */
+	public static String CMAnnotationMap_MissingResource_exception;
+
 	private Messages() {
         // no external instantiation
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/ResourceBundleHelper.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/ResourceBundleHelper.java
index a44e413..4140748 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/ResourceBundleHelper.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/internal/ResourceBundleHelper.java
@@ -27,10 +27,23 @@
  */
 public class ResourceBundleHelper {
 
+	/**
+	 * @param resourceURI
+	 * @return the resource bundle in resourceURI using the default locale
+	 * @throws MalformedURLException
+	 * @throws IOException
+	 */
 	public static ResourceBundle getResourceBundle(String resourceURI) throws MalformedURLException, IOException {
 		return getResourceBundle(resourceURI, Locale.getDefault());
 	}
 
+	/**
+	 * @param resourceURI
+	 * @param targetLocale
+	 * @return the resource bundle in resourceURI using the target locale
+	 * @throws MalformedURLException
+	 * @throws IOException
+	 */
 	public static ResourceBundle getResourceBundle(String resourceURI, Locale targetLocale) throws MalformedURLException, IOException {
 		// try to load bundle from the location specified in the resourceURI
 		// we make the assumption that the resourceURI points to the local
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/package-info.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/package-info.java
new file mode 100644
index 0000000..88f5236
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/contentmodel/annotation/package-info.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+
+/**
+ * Design-time metadata framework.
+ * <p><b>Provisional API - subject to change</b></p>
+ */
+package org.eclipse.jst.jsf.contentmodel.annotation;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/IMetadataContextResolver.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/IMetadataContextResolver.java
index aa44326..12e9987 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/IMetadataContextResolver.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/IMetadataContextResolver.java
@@ -28,9 +28,6 @@
 {
     /**
      * @param key 
-     * @param uri
-     * @param elementName
-     * @param attribute
      * @return a list of one or more String values associated with key
      * for the current context location. 
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/ResolverUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/ResolverUtil.java
new file mode 100644
index 0000000..4a62e17
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/ResolverUtil.java
@@ -0,0 +1,56 @@
+package org.eclipse.jst.jsf.context.resolver.structureddocument.internal;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+
+/**
+ * Internal convenience class to simplify regularly repeated tasks
+ * @author cbateman
+ *
+ */
+public final class ResolverUtil
+{
+    /**
+     * This method will generally only work if the document is an
+     * IStructuredDocument.
+     * 
+     * @param document
+     * @return the IFile corresponding to document or null if not applicable.
+     * 
+     */
+    public static IFile getFileForDocument(final IDocument document)
+    {
+        final IStructuredDocumentContext context =
+            IStructuredDocumentContextFactory.INSTANCE.getContext(document,
+                    -1);
+
+        if (context != null)
+        {
+            final IWorkspaceContextResolver wkResolver =
+                IStructuredDocumentContextResolverFactory.INSTANCE
+                .getWorkspaceContextResolver(context);
+
+            if (wkResolver != null)
+            {
+                final IResource res = wkResolver.getResource();
+
+                if (res instanceof IFile)
+                {
+                    return (IFile) res;
+                }
+            }
+        }
+        return null;
+    }
+
+    private ResolverUtil()
+    {
+        // no instantiation
+        throw new UnsupportedOperationException();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/impl/MetadataContextResolver.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/impl/MetadataContextResolver.java
index b623100..495589f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/impl/MetadataContextResolver.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/impl/MetadataContextResolver.java
@@ -63,13 +63,10 @@
             
             final ITaglibDomainMetaDataModelContext mdContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(project, uri);
             Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(mdContext, element.getLocalName()+"/"+attribute.getLocalName(), key); //$NON-NLS-1$
-            return TraitValueHelper.getValueAsListOfStrings(trait);
-//            return
-//                CMAnnotationHelper.
-//                    getCMAttributeProperties(uri, 
-//                                             element.getLocalName(), 
-//                                             attribute.getLocalName(),
-//                                             key);
+            if( trait != null )
+            {
+            	return TraitValueHelper.getValueAsListOfStrings(trait);
+            }
             
         }
         else if (curNode instanceof Element)
@@ -80,12 +77,10 @@
             
             final ITaglibDomainMetaDataModelContext mdContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(project, uri);
             Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(mdContext, element.getLocalName(), key);
-            return TraitValueHelper.getValueAsListOfStrings(trait);
-//            return
-//                CMAnnotationHelper.
-//                    getCMElementProperties(uri, 
-//                             element.getLocalName(), 
-//                             key);
+            if( trait != null )
+            {
+            	return TraitValueHelper.getValueAsListOfStrings(trait);
+            }
         }
         
         return Collections.EMPTY_LIST;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/impl/StructuredDocumentContextResolverFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/impl/StructuredDocumentContextResolverFactory.java
index 84d8a98..74f741f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/impl/StructuredDocumentContextResolverFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/resolver/structureddocument/internal/impl/StructuredDocumentContextResolverFactory.java
@@ -7,12 +7,11 @@
  *
  * Contributors:
  *    Cameron Bateman/Oracle - initial API and implementation
- *    
+ * 
  ********************************************************************************/
 
 package org.eclipse.jst.jsf.context.resolver.structureddocument.internal.impl;
 
-import java.util.Iterator;
 
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jst.jsf.context.AbstractDelegatingFactory;
@@ -23,7 +22,6 @@
 import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
 import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.ITextRegionContextResolver;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
-import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 
 /**
@@ -31,245 +29,282 @@
  * contexts.
  * 
  * @author cbateman
- *
+ * 
  */
 public class StructuredDocumentContextResolverFactory extends
-		AbstractDelegatingFactory implements
-		IStructuredDocumentContextResolverFactory 
+AbstractDelegatingFactory implements
+IStructuredDocumentContextResolverFactory
 {
-	/* static attributes */
-	private static StructuredDocumentContextResolverFactory  INSTANCE;
+    /* static attributes */
+    private static StructuredDocumentContextResolverFactory INSTANCE;
 
-	/**
-	 * @return an instance (possibly shared) of the this factory
-	 */
-	public synchronized static StructuredDocumentContextResolverFactory getInstance()
-	{
-		if (INSTANCE == null)
-		{
-			INSTANCE = new StructuredDocumentContextResolverFactory();
-		}
-		
-		return INSTANCE;
-	}
+    /**
+     * @return an instance (possibly shared) of the this factory
+     */
+    public synchronized static StructuredDocumentContextResolverFactory getInstance()
+    {
+        if (INSTANCE == null)
+        {
+            INSTANCE = new StructuredDocumentContextResolverFactory();
+        }
 
-	/**
-	 * Constructor
-	 */
-	protected StructuredDocumentContextResolverFactory() 
-	{
-		super(new Class[] {IStructuredDocumentContextResolverFactory.class});
-	}
+        return INSTANCE;
+    }
 
-	/**
-	 * @see org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory#getDOMContextResolver(org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext)
-	 */
-	public IDOMContextResolver getDOMContextResolver(IStructuredDocumentContext context) 
-	{
-        IDOMContextResolver  resolver = internalGetDOMResolver(context);
-        
+    /**
+     * Constructor
+     */
+    protected StructuredDocumentContextResolverFactory()
+    {
+        super(new Class[]
+                        { IStructuredDocumentContextResolverFactory.class });
+    }
+
+    /**
+     * @see org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory#getDOMContextResolver(org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext)
+     */
+    public IDOMContextResolver getDOMContextResolver(
+            final IStructuredDocumentContext context)
+    {
+        IDOMContextResolver resolver = internalGetDOMResolver(context);
+
         if (resolver == null)
         {
             resolver = delegateGetDOMResolver(context);
         }
-        
+
         return resolver;
     }
-    private IDOMContextResolver internalGetDOMResolver(IStructuredDocumentContext context)
+
+    private IDOMContextResolver internalGetDOMResolver(
+            final IStructuredDocumentContext context)
     {
         if (context.getStructuredDocument() instanceof IStructuredDocument)
         {
             return new DOMContextResolver(context);
         }
-        
+
         return null;
     }
-    
-    private IDOMContextResolver delegateGetDOMResolver(IStructuredDocumentContext context)
+
+    private IDOMContextResolver delegateGetDOMResolver(
+            final IStructuredDocumentContext context)
     {
-        synchronized(_delegates)
+        synchronized (_delegates)
         {
-            for (final Iterator it = _delegates.iterator(); it.hasNext();)
+            for (final IAdaptable adaptable : _delegates)
             {
-                IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) it.next()).getAdapter(IStructuredDocumentContextFactory.class);
-                IDOMContextResolver contextResolver = delegateFactory.getDOMContextResolver(context);
-                
+
+                final IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) adaptable
+                .getAdapter(IStructuredDocumentContextResolverFactory.class);
+
+                if (delegateFactory != null)
+                {
+                    final IDOMContextResolver contextResolver = delegateFactory
+                    .getDOMContextResolver(context);
+
+                    if (contextResolver != null)
+                    {
+                        return contextResolver;
+                    }
+                }
+            }
+
+            return null;
+        }
+    }
+
+    /**
+     * @see org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory#getTextRegionResolver(org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext)
+     */
+    public ITextRegionContextResolver getTextRegionResolver(
+            final IStructuredDocumentContext context)
+    {
+        ITextRegionContextResolver resolver = internalGetTextRegionResolver(context);
+
+        if (resolver == null)
+        {
+            resolver = delegateGetTextRegionResolver(context);
+        }
+
+        return resolver;
+    }
+
+    private ITextRegionContextResolver internalGetTextRegionResolver(
+            final IStructuredDocumentContext context)
+    {
+        if (context.getStructuredDocument() instanceof IStructuredDocument)
+        {
+            return new TextRegionContextResolver(context);
+        }
+
+        return null;
+    }
+
+    private ITextRegionContextResolver delegateGetTextRegionResolver(
+            final IStructuredDocumentContext context)
+    {
+        synchronized (_delegates)
+        {
+            for (final Object element : _delegates)
+            {
+                final IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) element)
+                .getAdapter(IStructuredDocumentContextResolverFactory.class);
+                final ITextRegionContextResolver contextResolver = delegateFactory
+                .getTextRegionResolver(context);
+
                 if (contextResolver != null)
                 {
                     return contextResolver;
                 }
             }
-            
+
             return null;
         }
     }
 
-    
-	/**
-	 * @see org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory#getTextRegionResolver(org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext)
-	 */
-	public ITextRegionContextResolver getTextRegionResolver(IStructuredDocumentContext context) 	
-	{
-		ITextRegionContextResolver  resolver = internalGetTextRegionResolver(context);
-		
-		if (resolver == null)
-		{
-			resolver = delegateGetTextRegionResolver(context);
-		}
-		
-		return resolver;
-	}
-	private ITextRegionContextResolver internalGetTextRegionResolver(IStructuredDocumentContext context)
-	{
-		if (context.getStructuredDocument() instanceof IStructuredDocument)
-		{
-			return new TextRegionContextResolver(context);
-		}
-		
-		return null;
-	}
-	
-	private ITextRegionContextResolver delegateGetTextRegionResolver(IStructuredDocumentContext context)
-	{
-		synchronized(_delegates)
-		{
-			for (final Iterator it = _delegates.iterator(); it.hasNext();)
-			{
-				IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) it.next()).getAdapter(IStructuredDocumentContextFactory.class);
-				ITextRegionContextResolver contextResolver = delegateFactory.getTextRegionResolver(context);
-				
-				if (contextResolver != null)
-				{
-					return contextResolver;
-				}
-			}
-			
-			return null;
-		}
-	}
-	
-	public IWorkspaceContextResolver getWorkspaceContextResolver(IStructuredDocumentContext context)
-	{
-		IWorkspaceContextResolver  resolver = internalGetWorkspaceContextResolver(context);
-		
-		if (resolver == null)
-		{
-			resolver = delegateGetWorkspaceContextResolver(context);
-		}
-		
-		return resolver;
+    public IWorkspaceContextResolver getWorkspaceContextResolver(
+            final IStructuredDocumentContext context)
+    {
+        IWorkspaceContextResolver resolver = internalGetWorkspaceContextResolver(context);
 
-	}
-	
-	private IWorkspaceContextResolver internalGetWorkspaceContextResolver(IStructuredDocumentContext context)
-	{
-		if (context.getStructuredDocument() instanceof IStructuredDocument)
-		{
-			return new WorkspaceContextResolver(context);
-		}
-		
-		return null;
-	}
-	
-	private IWorkspaceContextResolver delegateGetWorkspaceContextResolver(IStructuredDocumentContext context)
-	{
-		synchronized(_delegates)
-		{
-			for (final Iterator it = _delegates.iterator(); it.hasNext();)
-			{
-				IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) it.next()).getAdapter(IStructuredDocumentContextFactory.class);
-				IWorkspaceContextResolver contextResolver = delegateFactory.getWorkspaceContextResolver(context);
-				
-				if (contextResolver != null)
-				{
-					return contextResolver;
-				}
-			}
-			
-			return null;
-		}
-	}
-
-    public ITaglibContextResolver getTaglibContextResolver(IStructuredDocumentContext context) {
-        ITaglibContextResolver  resolver = internalGetTaglibContextResolver(context);
-        
         if (resolver == null)
         {
-            resolver = delegateGetTaglibContextResolver(context);
+            resolver = delegateGetWorkspaceContextResolver(context);
         }
-        
+
+        return resolver;
+
+    }
+
+    private IWorkspaceContextResolver internalGetWorkspaceContextResolver(
+            final IStructuredDocumentContext context)
+    {
+        if (context.getStructuredDocument() instanceof IStructuredDocument)
+        {
+            return new WorkspaceContextResolver(context);
+        }
+
+        return null;
+    }
+
+    private IWorkspaceContextResolver delegateGetWorkspaceContextResolver(
+            final IStructuredDocumentContext context)
+    {
+        synchronized (_delegates)
+        {
+            for (final Object element : _delegates)
+            {
+                final IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) element)
+                .getAdapter(IStructuredDocumentContextResolverFactory.class);
+                final IWorkspaceContextResolver contextResolver = delegateFactory
+                .getWorkspaceContextResolver(context);
+
+                if (contextResolver != null)
+                {
+                    return contextResolver;
+                }
+            }
+
+            return null;
+        }
+    }
+
+    public ITaglibContextResolver getTaglibContextResolver(
+            final IStructuredDocumentContext context)
+    {
+        // check the delegats first
+        ITaglibContextResolver resolver = delegateGetTaglibContextResolver(context);
+
+        if (resolver == null)
+        {
+            resolver = internalGetTaglibContextResolver(context);
+        }
+
         return resolver;
     }
-    
-    private ITaglibContextResolver internalGetTaglibContextResolver(IStructuredDocumentContext context)
+
+    private ITaglibContextResolver internalGetTaglibContextResolver(
+            final IStructuredDocumentContext context)
     {
         if (context.getStructuredDocument() instanceof IStructuredDocument)
         {
             return new TaglibContextResolver(context);
         }
-        
+
         return null;
     }
-    
-    private ITaglibContextResolver delegateGetTaglibContextResolver(IStructuredDocumentContext context)
+
+    private ITaglibContextResolver delegateGetTaglibContextResolver(
+            final IStructuredDocumentContext context)
     {
-        synchronized(_delegates)
+        synchronized (_delegates)
         {
-            for (final Iterator it = _delegates.iterator(); it.hasNext();)
+            for (final IAdaptable adapter : _delegates)
             {
-                IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) it.next()).getAdapter(IStructuredDocumentContextFactory.class);
-                ITaglibContextResolver contextResolver = delegateFactory.getTaglibContextResolver(context);
-                
-                if (contextResolver != null)
+                final IStructuredDocumentContextResolverFactory delegateFactory =
+                    (IStructuredDocumentContextResolverFactory) adapter
+                    .getAdapter(IStructuredDocumentContextResolverFactory.class);
+
+                if (delegateFactory != null)
                 {
-                    return contextResolver;
+                    final ITaglibContextResolver contextResolver = delegateFactory
+                    .getTaglibContextResolver(context);
+
+                    if (contextResolver != null)
+                    {
+                        return contextResolver;
+                    }
+
                 }
             }
-            
+
             return null;
         }
     }
 
-    public IMetadataContextResolver getMetadataContextResolver(IStructuredDocumentContext context) {
-        IMetadataContextResolver  resolver = internalGetMetadataContextResolver(context);
-        
+    public IMetadataContextResolver getMetadataContextResolver(
+            final IStructuredDocumentContext context)
+    {
+        IMetadataContextResolver resolver = internalGetMetadataContextResolver(context);
+
         if (resolver == null)
         {
             resolver = delegateGetMetadataContextResolver(context);
         }
-        
+
         return resolver;
     }
-    
-    private IMetadataContextResolver internalGetMetadataContextResolver(IStructuredDocumentContext context)
+
+    private IMetadataContextResolver internalGetMetadataContextResolver(
+            final IStructuredDocumentContext context)
     {
         if (context.getStructuredDocument() instanceof IStructuredDocument)
         {
             return new MetadataContextResolver(context);
         }
-        
+
         return null;
     }
-    
-    private IMetadataContextResolver delegateGetMetadataContextResolver(IStructuredDocumentContext context)
+
+    private IMetadataContextResolver delegateGetMetadataContextResolver(
+            final IStructuredDocumentContext context)
     {
-        synchronized(_delegates)
+        synchronized (_delegates)
         {
-            for (final Iterator it = _delegates.iterator(); it.hasNext();)
+            for (final Object element : _delegates)
             {
-                final IStructuredDocumentContextResolverFactory delegateFactory = 
-                    (IStructuredDocumentContextResolverFactory) 
-                        ((IAdaptable) it.next()).getAdapter
-                            (IStructuredDocumentContextFactory.class);
-                final IMetadataContextResolver contextResolver = 
-                    delegateFactory.getMetadataContextResolver(context);
-                
+                final IStructuredDocumentContextResolverFactory delegateFactory = (IStructuredDocumentContextResolverFactory) ((IAdaptable) element)
+                .getAdapter(IStructuredDocumentContextResolverFactory.class);
+                final IMetadataContextResolver contextResolver = delegateFactory
+                .getMetadataContextResolver(context);
+
                 if (contextResolver != null)
                 {
                     return contextResolver;
                 }
             }
-            
+
             return null;
         }
     }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/structureddocument/IStructuredDocumentContextFactory2.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/structureddocument/IStructuredDocumentContextFactory2.java
new file mode 100644
index 0000000..6e77741
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/structureddocument/IStructuredDocumentContextFactory2.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.context.structureddocument;
+
+import org.eclipse.jst.jsf.context.structureddocument.internal.impl.StructuredDocumentContextFactory;
+import org.w3c.dom.Element;
+
+/**
+ * A factory method for constructing context objects related to
+ * SSE structured documents.  
+ *
+ * May be sub-classed or implemented by clients
+ * 
+ */
+public interface IStructuredDocumentContextFactory2 extends
+		IStructuredDocumentContextFactory {
+	
+	/**
+	 * The default singleton instance of the factory
+	 */
+	public static final IStructuredDocumentContextFactory2  INSTANCE = 
+        StructuredDocumentContextFactory.getInstance();
+	
+	/**
+	 * @param element -- org.w3c.Element 
+	 * @return a context for the element or if null if one cannot be determined.
+	 */
+	IStructuredDocumentContext getContext(Element element);
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/structureddocument/internal/impl/StructuredDocumentContextFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/structureddocument/internal/impl/StructuredDocumentContextFactory.java
index 618eabd..89f24f6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/structureddocument/internal/impl/StructuredDocumentContextFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/structureddocument/internal/impl/StructuredDocumentContextFactory.java
@@ -20,10 +20,13 @@
 import org.eclipse.jst.jsf.context.structureddocument.AbstractStructuredDocumentContextFactory;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory2;
 import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 import org.eclipse.wst.sse.ui.internal.StructuredTextViewer;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
 /**
@@ -31,7 +34,7 @@
  *
  */
 public class StructuredDocumentContextFactory extends AbstractStructuredDocumentContextFactory
-			 implements IStructuredDocumentContextFactory
+			 implements IStructuredDocumentContextFactory, IStructuredDocumentContextFactory2
 {
 	/* static attributes */
 	private static StructuredDocumentContextFactory  INSTANCE;
@@ -173,7 +176,9 @@
 
     }
     
-    private IStructuredDocumentContext internalGetContext(IDocument document, Node node)
+
+
+	private IStructuredDocumentContext internalGetContext(IDocument document, Node node)
     {
         if (document instanceof IStructuredDocument)
         {
@@ -212,4 +217,54 @@
             return null;
         }
     }
+    
+    public IStructuredDocumentContext getContext(Element element) 
+    {
+        // first see if I know how to make one
+        IStructuredDocumentContext  context = internalGetContext(element);
+        
+        // if I don't know, ask my delegates
+        if (context == null)
+        {
+            context = delegateGetContext(element);
+        }
+        
+        return context;
+
+    }
+    
+	private IStructuredDocumentContext internalGetContext(Element element) {
+		if (element instanceof IDOMNode){
+			final IDOMNode node = (IDOMNode)element;
+			final IStructuredDocument sDoc = node.getStructuredDocument();
+            final int position = node.getStartOffset();
+            
+            return new DefaultStructuredDocumentContext(sDoc, position);            
+        }
+		
+		return null;
+	}
+	
+    private IStructuredDocumentContext delegateGetContext(Element element) {
+        synchronized(_delegates)
+        {
+            for (final Iterator it = _delegates.iterator(); it.hasNext();)
+            {
+                IStructuredDocumentContextFactory2 delegateFactory = (IStructuredDocumentContextFactory2) ((IAdaptable) it.next()).getAdapter(IStructuredDocumentContextFactory2.class);
+                if (delegateFactory != null)
+                {
+	                IStructuredDocumentContext context = delegateFactory.getContext(element);
+	                
+	                if (context != null)
+	                {
+	                    return context;
+	                }
+                }
+            }
+            
+            return null;
+        }
+	}
+
+
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ERuntimeSource.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ERuntimeSource.java
index 5fcc6a1..902e20d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ERuntimeSource.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ERuntimeSource.java
@@ -26,6 +26,9 @@
  * is provided to allow the VariableResolver to resolve
  * conflicts when instance symbols come from more than one
  * source. 
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * <!-- end-user-doc -->
  * @see org.eclipse.jst.jsf.context.symbol.SymbolPackage#getERuntimeSource()
  * @model
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanInstanceSymbol.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanInstanceSymbol.java
index 4ea5cbf..a1ddd36 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanInstanceSymbol.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanInstanceSymbol.java
@@ -15,8 +15,12 @@
 import org.eclipse.emf.common.util.EList;
 
 /**
+ * <!-- begin-user-doc -->
  * An instance of a java bean
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * <!-- end-user-doc -->
+ * 
  * @author cbateman
  * @model
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanMethodSymbol.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanMethodSymbol.java
index 75719a8..271a936 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanMethodSymbol.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanMethodSymbol.java
@@ -15,6 +15,7 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IBean Method Symbol</b></em>'.
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  * <p>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanPropertySymbol.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanPropertySymbol.java
index cc02b99..3fb6f88 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanPropertySymbol.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBeanPropertySymbol.java
@@ -13,8 +13,13 @@
 package org.eclipse.jst.jsf.context.symbol;
 
 /**
+ * 
+ * <!-- begin-user-doc -->
  * A property of a bean
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * <!-- end-user-doc -->
+ * 
  * @author cbateman
  * @model
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedJavaTypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedJavaTypeDescriptor.java
index 61538a6..7340267 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedJavaTypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedJavaTypeDescriptor.java
@@ -10,6 +10,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IBounded Java Type Descriptor</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  *
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedListTypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedListTypeDescriptor.java
index 1288d7d..ebd153c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedListTypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedListTypeDescriptor.java
@@ -10,6 +10,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IBounded List Type Descriptor</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  *
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedMapTypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedMapTypeDescriptor.java
index 95a4354..f54c12e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedMapTypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedMapTypeDescriptor.java
@@ -13,6 +13,8 @@
  * unbounded for some set of possible value types.  For example, a managed
  * bean that implements Map, is unconstrained for all values in Java 1.4 and
  * for whatever the template value type is in Java5.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  *
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedTypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedTypeDescriptor.java
index 9ff581e..ea92d5a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedTypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IBoundedTypeDescriptor.java
@@ -7,10 +7,11 @@
 package org.eclipse.jst.jsf.context.symbol;
 
 
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IBounded Type Descriptor</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  *
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IComponentSymbol.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IComponentSymbol.java
index 74a1f5a..7cad1c9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IComponentSymbol.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IComponentSymbol.java
@@ -15,6 +15,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IComponent Symbol</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  *
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IDescribedInDetail.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IDescribedInDetail.java
index 4ccfec3..9fb2818 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IDescribedInDetail.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IDescribedInDetail.java
@@ -15,6 +15,9 @@
 
 /** 
  * Tags a symbol that has a detailed, user-readable description
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IInstanceSymbol.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IInstanceSymbol.java
index c449429..d1e883d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IInstanceSymbol.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IInstanceSymbol.java
@@ -13,9 +13,12 @@
 package org.eclipse.jst.jsf.context.symbol;
 
 /**
+ * <!-- begin-user-doc -->
  * A symbol that represents an instance of something, typically
  * a variable.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * <!-- end-user-doc -->
  * @author cbateman
  * @model
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IJavaSymbol.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IJavaSymbol.java
index 6be9d68..fa167ad 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IJavaSymbol.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IJavaSymbol.java
@@ -15,9 +15,12 @@
 import org.eclipse.jdt.core.IJavaElement;
 
 /**
+ * <!-- begin-user-doc -->
  * Represents a symbol that has meaning within Java's context.  This may
  * be the name of a type, an instance, method etc.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * <!-- end-user-doc -->
  * @author cbateman
  * @model
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IJavaTypeDescriptor2.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IJavaTypeDescriptor2.java
index 1a6c5d4..1919289 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IJavaTypeDescriptor2.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IJavaTypeDescriptor2.java
@@ -17,6 +17,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IJava Type Descriptor2</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  * <p>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IListTypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IListTypeDescriptor.java
index dd0a4b1..c4b4586 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IListTypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IListTypeDescriptor.java
@@ -11,6 +11,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IList Type Descriptor</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  * <p>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IMapTypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IMapTypeDescriptor.java
index 42c5ed9..d991b72 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IMapTypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IMapTypeDescriptor.java
@@ -16,6 +16,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IMap Type Descriptor</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  * <p>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IMethodSymbol.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IMethodSymbol.java
index c03b6d7..45ee82c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IMethodSymbol.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IMethodSymbol.java
@@ -15,6 +15,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IMethod Symbol</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  * <p>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IObjectSymbol.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IObjectSymbol.java
index 590ceda..34fee43 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IObjectSymbol.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IObjectSymbol.java
@@ -17,6 +17,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IObject Symbol</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  * <p>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IPropertySymbol.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IPropertySymbol.java
index e030745..ea757ee 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IPropertySymbol.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/IPropertySymbol.java
@@ -15,6 +15,8 @@
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>IProperty Symbol</b></em>'.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  *
  * <p>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ISymbol.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ISymbol.java
index 37eb0cb..20a56c4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ISymbol.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ISymbol.java
@@ -15,9 +15,12 @@
 import org.eclipse.emf.ecore.EObject;
 
 /**
+ * <!-- begin-user-doc -->
  * An entity that represents a meaningful named value in some context. 
  * Typically these represent programming language variables, properties and methods.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * <!-- end-user-doc -->
  * @author cbateman
  * @model
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ITypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ITypeDescriptor.java
index 945bd3c..4be180f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ITypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/ITypeDescriptor.java
@@ -19,8 +19,11 @@
 import org.eclipse.jdt.core.IType;
 
 /**
+ * <!-- begin-user-doc -->
  * A generic descriptor for symbol information
- * 
+ *
+ * <p><b>Provisional API - subject to change</b></p>
+ * <!-- end-user-doc -->
  * @author cbateman
  * @model
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/SymbolFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/SymbolFactory.java
index 8bc9a9f..830b296 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/SymbolFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/SymbolFactory.java
@@ -17,6 +17,8 @@
  * <!-- begin-user-doc -->
  * The <b>Factory</b> for the model.
  * It provides a create method for each non-abstract class of the model.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  * @see org.eclipse.jst.jsf.context.symbol.SymbolPackage
  * @generated
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/SymbolPackage.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/SymbolPackage.java
index 5c0eb4a..89df71e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/SymbolPackage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/SymbolPackage.java
@@ -1,7 +1,7 @@
 /**
  * Copyright 2006 Oracle
  *
- * $Id: SymbolPackage.java,v 1.7 2007/05/15 22:00:28 cbateman Exp $
+ * $Id: SymbolPackage.java,v 1.9 2007/10/01 04:29:43 cbateman Exp $
  */
 package org.eclipse.jst.jsf.context.symbol;
 
@@ -22,6 +22,8 @@
  *   <li>each enum,</li>
  *   <li>and each data type</li>
  * </ul>
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * <!-- end-user-doc -->
  * @see org.eclipse.jst.jsf.context.symbol.SymbolFactory
  * @model kind="package"
@@ -2203,6 +2205,7 @@
      * <!-- end-user-doc -->
      * @generated
      */
+    @SuppressWarnings("hiding")
     interface Literals {
         /**
          * The meta object literal for the '{@link org.eclipse.jst.jsf.context.symbol.internal.impl.IBeanInstanceSymbolImpl <em>IBean Instance Symbol</em>}' class.
@@ -2220,7 +2223,7 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        EReference IBEAN_INSTANCE_SYMBOL__PROPERTIES = eINSTANCE.getIBeanInstanceSymbol_Properties();
+		EReference IBEAN_INSTANCE_SYMBOL__PROPERTIES = eINSTANCE.getIBeanInstanceSymbol_Properties();
 
         /**
          * The meta object literal for the '<em><b>Methods</b></em>' reference list feature.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBeanInstanceSymbolImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBeanInstanceSymbolImpl.java
index 3872020..4124126 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBeanInstanceSymbolImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBeanInstanceSymbolImpl.java
@@ -46,7 +46,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
 	/**
 	 * A detailed description (human readable) about this instance symbol
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBeanPropertySymbolImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBeanPropertySymbolImpl.java
index 3204c5d..07468c0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBeanPropertySymbolImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBeanPropertySymbolImpl.java
@@ -49,7 +49,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedJavaTypeDescriptorImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedJavaTypeDescriptorImpl.java
index ecc18ca..af1f404 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedJavaTypeDescriptorImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedJavaTypeDescriptorImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: IBoundedJavaTypeDescriptorImpl.java,v 1.7 2007/05/07 17:30:20 cbateman Exp $
+ * $Id: IBoundedJavaTypeDescriptorImpl.java,v 1.8 2007/10/01 04:29:44 cbateman Exp $
  */
 package org.eclipse.jst.jsf.context.symbol.internal.impl;
 
@@ -31,7 +31,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedListTypeDescriptorImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedListTypeDescriptorImpl.java
index 4dd73dc..e6cb34b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedListTypeDescriptorImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedListTypeDescriptorImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: IBoundedListTypeDescriptorImpl.java,v 1.4 2007/05/07 17:30:20 cbateman Exp $
+ * $Id: IBoundedListTypeDescriptorImpl.java,v 1.6 2007/10/01 04:29:44 cbateman Exp $
  */
 package org.eclipse.jst.jsf.context.symbol.internal.impl;
 
@@ -44,7 +44,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle";  //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle";  //$NON-NLS-1$
 
     /**
      * <!-- begin-user-doc -->
@@ -110,6 +111,10 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param methodName 
+     * @param methodArguments 
+     * @param symbolName 
+     * @return a symbol representing the return value of the method 
      * <!-- end-user-doc -->
      * @generated NOT
      */
@@ -139,7 +144,7 @@
                         SymbolFactory.eINSTANCE.createIPropertySymbol();
 
                     // TODO: there is a possible problem here for non-string keyed maps
-                    propSymbol.setName(symbolName.toString());
+                    propSymbol.setName(symbolName);
                     propSymbol.setReadable(true);
                     IJavaTypeDescriptor2 typeDesc = 
                         SymbolFactory.eINSTANCE.createIJavaTypeDescriptor2();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedMapTypeDescriptorImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedMapTypeDescriptorImpl.java
index fd71c5a..1989995 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedMapTypeDescriptorImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IBoundedMapTypeDescriptorImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: IBoundedMapTypeDescriptorImpl.java,v 1.6 2007/05/07 17:30:20 cbateman Exp $
+ * $Id: IBoundedMapTypeDescriptorImpl.java,v 1.7 2007/10/01 04:29:44 cbateman Exp $
  */
 package org.eclipse.jst.jsf.context.symbol.internal.impl;
 
@@ -35,7 +35,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle";  //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle";  //$NON-NLS-1$
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IComponentSymbolImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IComponentSymbolImpl.java
index 1a57a39..15a592e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IComponentSymbolImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IComponentSymbolImpl.java
@@ -32,7 +32,8 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle";  //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle";  //$NON-NLS-1$
 
     /**
      * A human readable description of this symbol
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IJavaTypeDescriptor2Impl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IJavaTypeDescriptor2Impl.java
index 60fcf9d..dde647c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IJavaTypeDescriptor2Impl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IJavaTypeDescriptor2Impl.java
@@ -67,7 +67,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle";  //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle";  //$NON-NLS-1$
 
     /**
      * The default value of the '{@link #getType() <em>Type</em>}' attribute.
@@ -121,7 +122,8 @@
      * @generated
      * @ordered
      */
-    protected static final IJavaElement JDT_CONTEXT_EDEFAULT = null;
+    @SuppressWarnings("hiding")
+	protected static final IJavaElement JDT_CONTEXT_EDEFAULT = null;
 
     /**
      * The cached value of the '{@link #getJdtContext() <em>Jdt Context</em>}' attribute.
@@ -131,7 +133,8 @@
      * @generated
      * @ordered
      */
-    protected IJavaElement jdtContext = JDT_CONTEXT_EDEFAULT;
+    @SuppressWarnings("hiding")
+	protected IJavaElement jdtContext = JDT_CONTEXT_EDEFAULT;
 
     /**
      * <!-- begin-user-doc -->
@@ -269,7 +272,7 @@
 	    else 
 	    {
             propertyColl = new ArrayList(properties.length);
-            Collections.addAll(propertyColl, properties);
+            Collections.addAll(propertyColl, (Object[])properties);
 	    }
 	    BasicEList list = new BasicEList(propertyColl);
 	    return list;
@@ -292,7 +295,7 @@
 	        typeInfoCache.cacheMethodSymbols(type, methods);
 	    } else {
 	        methodColl = new ArrayList(methods.length);
-	        Collections.addAll(methodColl, methods);
+	        Collections.addAll(methodColl, (Object[])methods);
 	    }
 	    BasicEList list = new BasicEList(methodColl);
 		return list;
@@ -402,7 +405,7 @@
             case SymbolPackage.IJAVA_TYPE_DESCRIPTOR2__BEAN_METHODS:
                 return getBeanMethods();
             case SymbolPackage.IJAVA_TYPE_DESCRIPTOR2__ARRAY_COUNT:
-                return new Integer(getArrayCount());
+                return Integer.valueOf(getArrayCount());
         }
         return super.eGet(featureID, resolve, coreType);
     }
@@ -566,15 +569,16 @@
         final JDTBeanIntrospector  introspector = 
             new JDTBeanIntrospector(getType());
         
-		final Map properties = introspector.getProperties();
+		final Map<String, JDTBeanProperty> properties = introspector.getProperties();
+		
 		final Collection calculatedProps = new ArrayList(properties.size());
         
-		for (final Iterator it = properties.keySet().iterator(); it.hasNext();)
+		for (final Iterator<Map.Entry<String, JDTBeanProperty>> it = properties.entrySet().iterator(); it.hasNext();)
 		{
-		    final String propertyName = (String) it.next();
-            final JDTBeanProperty property = 
-                (JDTBeanProperty) properties.get(propertyName);
-			
+		    Map.Entry<String, JDTBeanProperty> entry = it.next();
+		    final String propertyName = entry.getKey();
+            final JDTBeanProperty property = entry.getValue();
+
 			final IBeanPropertySymbol workingCopy =
 			    SymbolFactory.eINSTANCE.createIBeanPropertySymbol();
 			workingCopy.setName(propertyName);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IListTypeDescriptorImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IListTypeDescriptorImpl.java
index 4148df9..7046cee 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IListTypeDescriptorImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IListTypeDescriptorImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: IListTypeDescriptorImpl.java,v 1.4 2007/05/07 17:30:20 cbateman Exp $
+ * $Id: IListTypeDescriptorImpl.java,v 1.5 2007/10/01 04:29:44 cbateman Exp $
  */
 package org.eclipse.jst.jsf.context.symbol.internal.impl;
 
@@ -39,7 +39,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle";  //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle";  //$NON-NLS-1$
 
     /**
      * The default value of the '{@link #getListSource() <em>List Source</em>}' attribute.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IMapTypeDescriptorImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IMapTypeDescriptorImpl.java
index 31e6171..462d0cb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IMapTypeDescriptorImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/IMapTypeDescriptorImpl.java
@@ -54,7 +54,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
     /**
      * The default value of the '{@link #getMapSource() <em>Map Source</em>}' attribute.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/JavaUtil.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/JavaUtil.java
new file mode 100644
index 0000000..40c1b35
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/JavaUtil.java
@@ -0,0 +1,94 @@
+package org.eclipse.jst.jsf.context.symbol.internal.impl;
+
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.ui.JavadocContentAccess;
+import org.eclipse.jst.jsf.common.JSFCommonPlugin;
+import org.eclipse.jst.jsf.common.util.JDTBeanIntrospector;
+import org.eclipse.jst.jsf.common.util.JDTBeanProperty;
+import org.eclipse.jst.jsf.common.util.TypeUtil;
+import org.eclipse.jst.jsf.context.symbol.IBeanMethodSymbol;
+import org.eclipse.jst.jsf.context.symbol.IBeanPropertySymbol;
+
+/**
+ * Utility class for accessing jdt elements for jsf el symbols
+ */
+public class JavaUtil {
+
+    private JavaUtil() {
+        // utility class
+    }
+
+    /**
+     * @param method
+     * @return the javadoc text for the given method. Will return null if no javadoc is found
+     */
+    public static String getMethodJavadoc(final IMethod method) {
+        try {
+            final Reader contentReader = JavadocContentAccess.getHTMLContentReader(method, true, true);
+            if (contentReader != null) {
+                return read(contentReader);
+            }
+        } catch (final JavaModelException e) {
+            JSFCommonPlugin.log(IStatus.WARNING, "error reading javadoc for method '" + method.getElementName() + "'.", e); //$NON-NLS-1$ //$NON-NLS-2$
+        }
+        return null;
+    }
+
+    private static String read(final Reader rd) {
+        final StringBuffer buffer= new StringBuffer();
+        final char[] readBuffer= new char[2048];
+
+        try {
+            int n= rd.read(readBuffer);
+            while (n > 0) {
+                buffer.append(readBuffer, 0, n);
+                n= rd.read(readBuffer);
+            }
+            return buffer.toString();
+        } catch (final IOException x) {
+            // should not happen, but otherwise simply ignore
+        }
+
+        return null;
+    }
+
+    /**
+     * @param symbol - the method symbol to look for
+     * @return the IMethod for the given method symbol. Will return <code>null</code>, if none is found.
+     */
+    public static IMethod findCorrespondingMethod(final IBeanMethodSymbol symbol) {
+        final IType type = symbol.getOwner().getType();
+        final JDTBeanIntrospector introspector = new JDTBeanIntrospector(type);
+        final IMethod[] methods = introspector.getAllMethods();
+        for (final IMethod method : methods) {
+            if (method.getElementName().equals(symbol.getName())) {
+                try {
+                    final String currentMethodsSignature = TypeUtil.resolveMethodSignature(method.getDeclaringType(),
+                            method.getSignature());
+                    if (currentMethodsSignature.equals(symbol.getSignature())) {
+                        return method;
+                    }
+                } catch (final JavaModelException e) {
+                    JSFCommonPlugin.log(IStatus.WARNING, "error determining for method '" //$NON-NLS-1$
+                            + method.getElementName() + "'.", e); //$NON-NLS-1$
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @param propertySymbol - the property symbol to look for
+     * @return a JDTBeanProperty for the given property symbol
+     */
+    public static JDTBeanProperty findCorrespondingJDTProperty(final IBeanPropertySymbol propertySymbol) {
+        final JDTBeanIntrospector introspector = new JDTBeanIntrospector(propertySymbol.getOwner().getType());
+        return introspector.getProperties().get(propertySymbol.getName());
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/SymbolFactoryImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/SymbolFactoryImpl.java
index 83453e7..75c59b8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/SymbolFactoryImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/SymbolFactoryImpl.java
@@ -379,6 +379,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param eDataType 
+     * @param initialValue 
+     * @return the value type for the data type 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -388,6 +391,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param eDataType 
+     * @param instanceValue 
+     * @return the string for the value type 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/SymbolPackageImpl.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/SymbolPackageImpl.java
index f72c71c..707b176 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/SymbolPackageImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/SymbolPackageImpl.java
@@ -1,7 +1,7 @@
 /**
  * Copyright 2006 Oracle
  *
- * $Id: SymbolPackageImpl.java,v 1.6 2007/05/15 22:00:27 cbateman Exp $
+ * $Id: SymbolPackageImpl.java,v 1.7 2007/09/24 23:25:39 cbateman Exp $
  */
 package org.eclipse.jst.jsf.context.symbol.internal.impl;
 
@@ -260,6 +260,7 @@
      * <p>Invocation of this method will not affect any packages that have
      * already been initialized.
      * <!-- begin-user-doc -->
+     * @return the symbols package 
      * <!-- end-user-doc -->
      * @see #eNS_URI
      * @see #createPackageContents()
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/Util.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/Util.java
index d2fa682..0c2f288 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/Util.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/impl/Util.java
@@ -55,10 +55,9 @@
                 try 
                 {
                     // resolve the method's return type; don't erase parameters
-                    String retTypeSignature = 
-                        TypeUtil.resolveTypeSignature
-                            (type, callMethod.getReturnType(), false);
-
+                    String retTypeSignature = callMethod.getReturnType();
+                        
+                    // if we have a type variable, try to parameter match it
                     if (Signature.getTypeSignatureKind(retTypeSignature) == Signature.TYPE_VARIABLE_SIGNATURE)
                     {
                         retTypeSignature = TypeUtil.matchTypeParameterToArgument
@@ -70,12 +69,18 @@
                             retTypeSignature = TypeConstants.TYPE_JAVAOBJECT;
                         }
                     }
+                    // otherwise, try and resolve it in type
+                    else
+                    {
+                    	retTypeSignature = TypeUtil.resolveTypeSignature
+                    		(type, callMethod.getReturnType(), false);
+                    }
 
                     final IPropertySymbol  propSymbol = 
                         SymbolFactory.eINSTANCE.createIPropertySymbol();
 
                     // TODO: there is a possible problem here for non-string keyed maps
-                    propSymbol.setName(symbolName.toString());
+                    propSymbol.setName(symbolName);
                     propSymbol.setReadable(true);
                     
                     {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBeanInstanceSymbolItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBeanInstanceSymbolItemProvider.java
index a268898..ee8e4b9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBeanInstanceSymbolItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBeanInstanceSymbolItemProvider.java
@@ -49,7 +49,8 @@
      * <!-- end-user-doc -->
 	 * @generated
 	 */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
 	/**
 	 * This constructs an instance from a factory and a notifier.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBeanPropertySymbolItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBeanPropertySymbolItemProvider.java
index d083574..ff28485 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBeanPropertySymbolItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBeanPropertySymbolItemProvider.java
@@ -46,7 +46,8 @@
      * <!-- end-user-doc -->
 	 * @generated
 	 */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
 	/**
 	 * This constructs an instance from a factory and a notifier.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedJavaTypeDescriptorItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedJavaTypeDescriptorItemProvider.java
index ff7f567..1c85e05 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedJavaTypeDescriptorItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedJavaTypeDescriptorItemProvider.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: IBoundedJavaTypeDescriptorItemProvider.java,v 1.6 2007/05/07 17:30:21 cbateman Exp $
+ * $Id: IBoundedJavaTypeDescriptorItemProvider.java,v 1.7 2007/10/01 04:29:43 cbateman Exp $
  */
 package org.eclipse.jst.jsf.context.symbol.internal.provider;
 
@@ -40,7 +40,8 @@
      * <!-- end-user-doc -->
 	 * @generated
 	 */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
 	/**
 	 * This constructs an instance from a factory and a notifier.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedListTypeDescriptorItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedListTypeDescriptorItemProvider.java
index 0ee627c..4bee1ad 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedListTypeDescriptorItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedListTypeDescriptorItemProvider.java
@@ -49,7 +49,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
     /**
      * This constructs an instance from a factory and a notifier.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedMapTypeDescriptorItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedMapTypeDescriptorItemProvider.java
index c0c9da2..02b1a24 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedMapTypeDescriptorItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IBoundedMapTypeDescriptorItemProvider.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: IBoundedMapTypeDescriptorItemProvider.java,v 1.6 2007/05/07 17:30:21 cbateman Exp $
+ * $Id: IBoundedMapTypeDescriptorItemProvider.java,v 1.7 2007/10/01 04:29:43 cbateman Exp $
  */
 package org.eclipse.jst.jsf.context.symbol.internal.provider;
 
@@ -40,7 +40,8 @@
      * <!-- end-user-doc -->
 	 * @generated
 	 */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
 	/**
 	 * This constructs an instance from a factory and a notifier.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IComponentSymbolItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IComponentSymbolItemProvider.java
index 6f67237..96b04f7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IComponentSymbolItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IComponentSymbolItemProvider.java
@@ -52,7 +52,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
 	/**
 	 * This constructs an instance from a factory and a notifier.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IJavaTypeDescriptor2ItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IJavaTypeDescriptor2ItemProvider.java
index 1f24e8d..201abe4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IJavaTypeDescriptor2ItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IJavaTypeDescriptor2ItemProvider.java
@@ -51,7 +51,8 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
 	/**
 	 * This constructs an instance from a factory and a notifier.
@@ -156,6 +157,7 @@
      * This adds a property descriptor for the Array Count feature.
      * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
+	 * @param object 
      * @generated
      */
     protected void addArrayCountPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IListTypeDescriptorItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IListTypeDescriptorItemProvider.java
index 45a3cf1..76d3eb3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IListTypeDescriptorItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IListTypeDescriptorItemProvider.java
@@ -53,7 +53,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
     /**
      * This constructs an instance from a factory and a notifier.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IMapTypeDescriptorItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IMapTypeDescriptorItemProvider.java
index aab70d8..165629c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IMapTypeDescriptorItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/IMapTypeDescriptorItemProvider.java
@@ -51,7 +51,8 @@
      * <!-- end-user-doc -->
 	 * @generated
 	 */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
 	/**
 	 * This constructs an instance from a factory and a notifier.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/ITypeDescriptorItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/ITypeDescriptorItemProvider.java
index 600cacd..247422a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/ITypeDescriptorItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/ITypeDescriptorItemProvider.java
@@ -229,6 +229,7 @@
 	/**
      * This adds a property descriptor for the Type Parameter Signatures feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -251,6 +252,7 @@
     /**
      * This adds a property descriptor for the Jdt Context feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -273,6 +275,7 @@
     /**
      * This adds a property descriptor for the Enum Type feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/SymbolItemProviderAdapterFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/SymbolItemProviderAdapterFactory.java
index cf7f6a0..6dc9171 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/SymbolItemProviderAdapterFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/internal/provider/SymbolItemProviderAdapterFactory.java
@@ -46,7 +46,8 @@
      * <!-- end-user-doc -->
 	 * @generated
 	 */
-    public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright 2006 Oracle"; //$NON-NLS-1$
 
 	/**
 	 * This keeps track of the root adapter factory that delegates to this adapter factory.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/provider/IContentProposalProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/provider/IContentProposalProvider.java
index 87075f0..b37344b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/provider/IContentProposalProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/provider/IContentProposalProvider.java
@@ -18,6 +18,8 @@
 /**
  * Adapts an object to appropriate content proposal
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/provider/ProposalCreationFactoryAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/provider/ProposalCreationFactoryAdapter.java
index 15a0bd7..588a48b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/provider/ProposalCreationFactoryAdapter.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/provider/ProposalCreationFactoryAdapter.java
@@ -21,6 +21,8 @@
 /**
  * Default implementation of the proposal creation factory
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/AbstractContextSymbolFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/AbstractContextSymbolFactory.java
index 831d8c8..4abd7a7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/AbstractContextSymbolFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/AbstractContextSymbolFactory.java
@@ -21,6 +21,8 @@
  * Must be sub-classed by all contextSymbolFactory extension point implementors
  * to create context configured symbols
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/AbstractSymbolSourceProviderFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/AbstractSymbolSourceProviderFactory.java
index c83c213..f793f81 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/AbstractSymbolSourceProviderFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/AbstractSymbolSourceProviderFactory.java
@@ -18,6 +18,8 @@
  * Default implementation of ISymbolSourceProviderFactory.  Implementors may 
  * sub-class or create their own separate factory class.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolConstants.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolConstants.java
index 790a42d..590b792 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolConstants.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolConstants.java
@@ -15,6 +15,8 @@
 /**
  * Defines global constants for symbols
  * 
+ * <p><b>Provisional API - subject to change</b></p> 
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolSourceProvider.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolSourceProvider.java
index 4079776..96dae65 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolSourceProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolSourceProvider.java
@@ -19,6 +19,8 @@
  * Defines a provider that acts as source of symbols.  The
  * implementor is usually context specific
  * 
+ * <p><b>Provisional API - subject to change</b></p> 
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolSourceProviderFactory.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolSourceProviderFactory.java
index 99ca202..87b9558 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolSourceProviderFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/context/symbol/source/ISymbolSourceProviderFactory.java
@@ -20,6 +20,8 @@
  * 
  * Instance factory class must implement a zero-argument default constructor
  * 
+ * <p><b>Provisional API - subject to change</b></p> 
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/.options b/jsf/plugins/org.eclipse.jst.jsf.core/.options
new file mode 100644
index 0000000..c8e2b48
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/.options
@@ -0,0 +1,9 @@
+# Debugging options for the org.eclipse.jst.jsf.core
+
+# Turn on general debugging for the org.eclipse.jsf.core plugin.
+org.eclipse.jst.jsf.core/debug=false
+
+org.eclipse.jst.jsf.core/designtime/view/jsptagregistry=false
+org.eclipse.jst.jsf.core/designtime/view/jsptagregistry/changes=false
+
+org.eclipse.jst.jsf.core/designtime/view/jsptagintrospection=false
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/.settings/org.eclipse.jdt.core.prefs b/jsf/plugins/org.eclipse.jst.jsf.core/.settings/org.eclipse.jdt.core.prefs
index 08c324c..42536dd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/.settings/org.eclipse.jdt.core.prefs
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue May 15 14:58:03 PDT 2007
+#Tue Oct 23 12:04:38 PDT 2007
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
@@ -65,11 +65,13 @@
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=error
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.core/META-INF/MANIFEST.MF
index 416e10f..b6532d0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.eclipse.jst.jsf.core; singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Activator: org.eclipse.jst.jsf.core.internal.JSFCorePlugin
 Bundle-Vendor: %plugin.provider
 Bundle-Localization: plugin
@@ -22,27 +22,38 @@
  org.eclipse.wst.sse.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.html.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.validation;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.sse.ui;bundle-version="[1.0.101,1.1.0)",
+ org.eclipse.wst.sse.ui;bundle-version="[1.0.101,1.2.0)",
  org.eclipse.wst.common.emf;bundle-version="[1.1.103,2.0.0)",
  org.eclipse.jem.util;bundle-version="[2.0.0,3.0.0)",
- org.eclipse.emf.common;bundle-version="[2.2.0,2.4.0)",
- org.eclipse.emf.ecore;bundle-version="[2.2.0,2.4.0)",
+ org.eclipse.emf.common;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.2.0,3.0.0)",
  org.eclipse.core.commands;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.swt;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.4.0)",
- org.eclipse.emf.edit;bundle-version="[2.2.0,2.4.0)"
-Eclipse-LazyStart: true
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.emf.edit;bundle-version="[2.2.0,3.0.0)",
+ org.eclipse.jst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)",
+ org.eclipse.jst.jsf.common.runtime;bundle-version="[1.0.0,1.1.0)",
+ org.eclipse.jem.proxy;bundle-version="[2.0.0,3.0.0)",
+ javax.servlet;bundle-version="[2.4.0,3.0.0)",
+ javax.servlet.jsp;bundle-version="[2.0.0,3.0.0)"
+Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.jst.jsf.core,
  org.eclipse.jst.jsf.core.internal;x-friends:="org.eclipse.jst.jsf.core.tests,org.eclipse.jst.jsf.ui,org.eclipse.jst.jsf.ui.tests",
  org.eclipse.jst.jsf.core.internal.contentassist.el;x-friends:="org.eclipse.jst.jsf.contentassist.tests",
- org.eclipse.jst.jsf.core.internal.jsflibraryconfig;x-friends:="org.eclipse.jst.jsf.core.tests,org.eclipse.jst.jsf.ui.tests",
- org.eclipse.jst.jsf.core.internal.jsflibraryregistry;x-friends:="org.eclipse.jst.jsf.core.tests,org.eclipse.jst.jsf.ui,org.eclipse.jst.jsf.ui.tests",
+ org.eclipse.jst.jsf.core.internal.jem,
+ org.eclipse.jst.jsf.core.internal.jsflibraryconfig;x-friends:="org.eclipse.jst.jsf.core.tests,org.eclipse.jst.jsf.ui.tests,org.eclipse.jst.pagedesigner.tests",
+ org.eclipse.jst.jsf.core.internal.jsflibraryregistry;
+  x-friends:="org.eclipse.jst.jsf.core.tests,
+   org.eclipse.jst.jsf.ui,
+   org.eclipse.jst.jsf.ui.tests,
+   org.eclipse.jst.pagedesigner.tests",
  org.eclipse.jst.jsf.core.internal.jsflibraryregistry.adapter;x-friends:="org.eclipse.jst.jsf.core.tests,org.eclipse.jst.jsf.ui,org.eclipse.jst.jsf.ui.tests",
  org.eclipse.jst.jsf.core.internal.jsflibraryregistry.impl;x-friends:="org.eclipse.jst.jsf.core.tests,org.eclipse.jst.jsf.ui,org.eclipse.jst.jsf.ui.tests",
  org.eclipse.jst.jsf.core.internal.jsflibraryregistry.util;x-friends:="org.eclipse.jst.jsf.core.tests,org.eclipse.jst.jsf.ui,org.eclipse.jst.jsf.ui.tests",
  org.eclipse.jst.jsf.core.internal.launch;x-internal:=true,
  org.eclipse.jst.jsf.core.internal.project.facet;x-friends:="org.eclipse.jst.jsf.core.tests,org.eclipse.jst.jsf.ui,org.eclipse.jst.jsf.ui.tests",
+ org.eclipse.jst.jsf.core.internal.region,
  org.eclipse.jst.jsf.core.internal.tld;x-friends:="org.eclipse.jst.pagedesigner,org.eclipse.jst.jsf.core.tests",
  org.eclipse.jst.jsf.core.jsfappconfig,
  org.eclipse.jst.jsf.core.jsflibraryconfiguration,
@@ -57,6 +68,11 @@
  org.eclipse.jst.jsf.designtime.el,
  org.eclipse.jst.jsf.designtime.internal.jsp;x-internal:=true,
  org.eclipse.jst.jsf.designtime.internal.symbols;x-friends:="org.eclipse.jst.jsf.designtime.tests",
+ org.eclipse.jst.jsf.designtime.internal.view;x-internal:=true,
+ org.eclipse.jst.jsf.designtime.internal.view.model;x-internal:=true,
+ org.eclipse.jst.jsf.designtime.internal.view.model.jsp;x-internal:=true,
+ org.eclipse.jst.jsf.designtime.internal.view.model.jsp.analyzer;x-friends:="org.eclipse.jst.jsf.designtime.tests",
+ org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry;x-friends:="org.eclipse.jst.jsf.designtime.tests",
  org.eclipse.jst.jsf.designtime.resolver,
  org.eclipse.jst.jsf.designtime.symbols,
  org.eclipse.jst.jsf.metadataprocessors,
@@ -70,5 +86,6 @@
  org.eclipse.jst.jsf.validation.internal.constraints.util;x-internal:=true,
  org.eclipse.jst.jsf.validation.internal.el;x-friends:="org.eclipse.jst.jsf.ui,org.eclipse.jst.jsf.validation.el.tests",
  org.eclipse.jst.jsf.validation.internal.el.diagnostics;x-friends:="org.eclipse.jst.jsf.validation.el.tests",
- org.eclipse.jst.jsf.validation.internal.el.operators;x-internal:=true
+ org.eclipse.jst.jsf.validation.internal.el.operators;x-internal:=true,
+ org.eclipse.jst.jsf.validation.internal.strategy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/build.properties b/jsf/plugins/org.eclipse.jst.jsf.core/build.properties
index d4fd94d..d1d90e2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/build.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/build.properties
@@ -16,7 +16,8 @@
                plugin.properties,\
                schema/,\
                about.html,\
-               buildnotes_JSF.html
+               buildnotes_JSF.html,\
+               .options
 src.includes = buildnotes_JSF.html
 javacSource=1.5
-javacTarget=1.5
\ No newline at end of file
+javacTarget=1.5
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/plugin.properties b/jsf/plugins/org.eclipse.jst.jsf.core/plugin.properties
index 00d27ae..c382718 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/plugin.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/plugin.properties
@@ -12,10 +12,7 @@
 plugin.provider=Eclipse.org
 plugin.facet.description=Enables the project to be deployed with JSF capabilities.
 
-JSFNonELAttributeValueValidator=JSP Semantics Validator (JSF)
 JSFELValidator=JSP JSF EL Validator
-JSPSemanticsValidatorMarker=JSP Semantics Problem (JSF)
-JSFAppConfigValidator=JSF Application Configuration Validator
 
 JSFv11Project=JavaServer Faces v1.1 Project
 JSFv11PresetDesc=Configures a Dynamic Web application for JSF v1.1 using Web Module v2.4 and Java v1.4 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/plugin.xml b/jsf/plugins/org.eclipse.jst.jsf.core/plugin.xml
index 9705042..dbb8e31 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/plugin.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/plugin.xml
@@ -25,6 +25,9 @@
     <project-facet id="jst.jsf">
       <label>JavaServer Faces</label>
       <description>%plugin.facet.description</description>
+      <default-version
+            provider="org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetDefaultVersionProvider">
+      </default-version>
     </project-facet>
 
     <project-facet-version facet="jst.jsf" version="1.1">
@@ -44,25 +47,35 @@
     </project-facet-version> 
 
     <action id="jst.jsf.v11.install" facet="jst.jsf" type="INSTALL" version="1.1">
-      	<delegate class="org.eclipse.jst.jsf.core.internal.project.facet.JSFJ2EEFacetInstallDelegate"/>
+      	<delegate class="org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetInstallDelegate"/>
         <config-factory class="org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider"/>
     </action>  
       
-    <action id="jst.jsf.v11.uninstall" facet="jst.jsf" version="1.1" type="UNINSTALL">
+    <action id="jst.jsf.v11.uninstall" facet="jst.jsf" type="UNINSTALL" version="1.1" >
 	 	<delegate
-        class="org.eclipse.jst.jsf.core.internal.project.facet.JSFJ2EEFacetUninstallDelegate"/>
+        class="org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetUninstallDelegate"/>
  	</action>
- 	
+	
  	<action id="jst.jsf.v12.install" facet="jst.jsf" type="INSTALL" version="[1.2">
-      	<delegate class="org.eclipse.jst.jsf.core.internal.project.facet.JSFJavaEEFacetInstallDelegate"/>
+      	<delegate class="org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetInstallDelegate"/>
         <config-factory class="org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider"/>
     </action>  
       
     <action id="jst.jsf.v12.uninstall" facet="jst.jsf" version="[1.2" type="UNINSTALL">
 	 	<delegate
-        class="org.eclipse.jst.jsf.core.internal.project.facet.JSFJavaEEFacetUninstallDelegate"/>
- 	</action>          	
+        class="org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetUninstallDelegate"/>
+ 	</action>  
+	      	
   </extension> 
+  
+  <extension
+        point="org.eclipse.wst.common.project.facet.core.listeners">
+     <listener
+           class="org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetPrimaryRuntimeChangedListener"
+           eventTypes="PRIMARY_RUNTIME_CHANGED">
+     </listener>
+  </extension>
+  
   <extension
         point="org.eclipse.wst.common.project.facet.core.presets">
      <static-preset
@@ -86,6 +99,7 @@
      </description>
      </static-preset>
   </extension>
+
   <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
     <supported>
 		<runtime-component any="true"/>
@@ -147,6 +161,9 @@
          point="org.eclipse.jst.jsf.core.AttributeValueRuntimeTypes">
 
       <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.metadataprocessors.AbstractRootTypeDescriptor"
+            id="attributevalues.BaseType"/>
+      <attributeValueRuntimeType
             class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.StringType"
             id="attributevalues.StringType"/>
       <attributeValueRuntimeType
@@ -190,7 +207,55 @@
             id="attributevalues.ComponentBindingType"/>            
       <attributeValueRuntimeType
             class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.ComponentIDType"
-            id="attributevalues.ComponentIDType"/>                  
+            id="attributevalues.ComponentIDType"/>
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.LengthType"
+            id="attributevalues.LengthType"/>           
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.ColorType"
+            id="attributevalues.ColorType"/>
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.ResourceBundleType"
+            id="attributevalues.ResourceBundleType"/>         
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.LanguageCodeType"
+            id="attributevalues.LanguageCodeType"/>
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.RelativePathType"
+            id="attributevalues.RelativePathType"/>    
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.WebPathType"
+            id="attributevalues.WebPathType"/>                                    
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.CurrencyCodeType"
+            id="attributevalues.CurrencyCodeType"/>
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.LocaleType"
+            id="attributevalues.LocaleType"/>                                         
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.TimeZoneType"
+            id="attributevalues.TimeZoneType"/>
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.DateTimePatternType"
+            id="attributevalues.DateTimePatternType"/>  
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.NumberPatternType"
+            id="attributevalues.NumberPatternType"/>                 
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.ScriptType"
+            id="attributevalues.ScriptType"/>  
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.CharacterType"
+            id="attributevalues.CharacterType"/>        
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.LinkType"
+            id="attributevalues.LinkType"/> 
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.ContentType"
+            id="attributevalues.ContentType"/>                  
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.URIType"
+            id="attributevalues.URIType"/>                                 
    </extension>
    
    <extension
@@ -202,74 +267,39 @@
             class="org.eclipse.jst.jsf.taglibprocessing.attributevalues.FacesConfigConverterIDFeatures"
             typeid="org.eclipse.jst.jsf.core.attributevalues.FacesConfigConverterIDType"/>            
    </extension>
-   
-   <extension
-        point="org.eclipse.wst.validation.validator"
-		id="JSFNonELAttributeValueValidator"
-		name="%JSFNonELAttributeValueValidator">
-		<validator>
-			<projectNature id="org.eclipse.wst.common.modulecore.ModuleCoreNature" />
-			<projectNature id="org.eclipse.jdt.core.javanature" />
-			<markerId
-               markerIdValue="JSPSemanticsValidatorMarker">
-         	</markerId>
-			<helper 
-				class="org.eclipse.wst.validation.internal.operations.WorkbenchContext">
-			</helper>
-			<run
-         		class="org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator"
-         		incremental="true"
-         		fullBuild="true"
-         	/>
-   <contentTypeBinding
-         contentTypeId="org.eclipse.jst.jsp.core.jspsource">
-   </contentTypeBinding>
-   <contentTypeBinding
-         contentTypeId="org.eclipse.jst.jsp.core.jspfragmentsource">
-   </contentTypeBinding>
-		</validator>
-		</extension>
 
    <extension
-        point="org.eclipse.wst.validation.validator"
-		id="JSFAppConfigValidator"
-		name="%JSFAppConfigValidator">
-		<validator>
-			<projectNature id="org.eclipse.wst.common.modulecore.ModuleCoreNature" />
-			<projectNature id="org.eclipse.jdt.core.javanature" />
-			<filter
-				objectClass="org.eclipse.core.resources.IFile"
-				nameFilter="faces-config.xml">
-			</filter>
-			<markerId
-               markerIdValue="JSPSemanticsValidatorMarker">
-         	</markerId>
-			<helper 
-				class="org.eclipse.wst.validation.internal.operations.WorkbenchContext">
-			</helper>
-			<run
-         		class="org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator"
-         		incremental="true"
-         		fullBuild="true"
-         	/>
-		</validator>
-	</extension>
-	
-	<extension
-         id="JSPSemanticsValidatorMarker"
-         name="%JSPSemanticsValidatorMarker"
-         point="org.eclipse.core.resources.markers">
-      <super
-            type="org.eclipse.wst.validation.problemmarker">
-      </super>
-   </extension>
- <extension
        point="org.eclipse.jst.jsf.common.symbolSourceProvider">
     <symbolSourceId
           factory="org.eclipse.jst.jsf.designtime.internal.symbols.ResourceBundleSymbolSourceProvider">
-    </symbolSourceId>
- </extension>
+   </symbolSourceId>
+  </extension>
+   <extension
+         point="org.eclipse.jst.jsf.common.domainSourceModelTypes">
+      <domainSourceModelTypes
+            domainId="TagLibraryDomain"
+            domainSourceModelTypeId="TaglibContentModelHandler"
+            locator="org.eclipse.jst.jsf.core.metadata.internal.TaglibMetaDataLocator"
+            ordinal="0">
+      </domainSourceModelTypes>
+   </extension> 
    
+  <extension
+       point="org.eclipse.jst.jsf.common.domainSourceModelTypeTranslators">
+    <domainSourceModelTypeTranslator
+          domainSourceModelTypeId="TaglibContentModelHandler"
+          translatorClass="org.eclipse.jst.jsf.core.metadata.internal.HTMLContentModelMetaDataTranslator">
+    </domainSourceModelTypeTranslator>
+    <domainSourceModelTypeTranslator
+          domainSourceModelTypeId="TaglibContentModelHandler"
+          translatorClass="org.eclipse.jst.jsf.core.metadata.internal.JSPContentModelMetaDataTranslator">
+    </domainSourceModelTypeTranslator>
+    <domainSourceModelTypeTranslator
+          domainSourceModelTypeId="TaglibContentModelHandler"
+          translatorClass="org.eclipse.jst.jsf.core.metadata.internal.TaglibMetaDataTLDTranslator">
+    </domainSourceModelTypeTranslator>      
+ </extension>
+
   <extension point="org.eclipse.jdt.core.classpathContainerInitializer">
     <classpathContainerInitializer
       class="org.eclipse.jst.jsf.core.internal.JSFLibrariesContainerInitializer"
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/schema/AttributeValueRuntimeTypes.exsd b/jsf/plugins/org.eclipse.jst.jsf.core/schema/AttributeValueRuntimeTypes.exsd
index fb2715b..c06c1d4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/schema/AttributeValueRuntimeTypes.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/schema/AttributeValueRuntimeTypes.exsd
@@ -7,6 +7,8 @@
       </appInfo>
       <documentation>
          Defines a mapping between an implementing class and an AttributeValue Runtime type.   By categorizing attribute values types in an CMAnnotation file, we can assign types and therefore processing of those types using the CMAnnotation file metadata and context information.
+
+&lt;p&gt;&lt;b&gt;This extension point is provisional and subject to change&lt;/b&gt;&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -74,7 +76,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         WTP 1.5
+         1.5
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/schema/MetaDataEnabledFeatures.exsd b/jsf/plugins/org.eclipse.jst.jsf.core/schema/MetaDataEnabledFeatures.exsd
index 45a8457..f0b6717 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/schema/MetaDataEnabledFeatures.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/schema/MetaDataEnabledFeatures.exsd
@@ -7,6 +7,8 @@
       </appInfo>
       <documentation>
          Defines a mapping between a runtime type defined by a different plugin and an implementing class in the extenders plugin.   This allows a provider to provide additional processing on an element or attribute instance that can be in addition to existing processing or a means to provide a new kind of processing of existing runtime types.
+
+&lt;p&gt;&lt;b&gt;This extension point is provisional and subject to change&lt;/b&gt;&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -74,7 +76,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         WTP 1.5
+         1.5
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/schema/externalcontext.exsd b/jsf/plugins/org.eclipse.jst.jsf.core/schema/externalcontext.exsd
index ec870c6..cea6bd2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/schema/externalcontext.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/schema/externalcontext.exsd
@@ -69,7 +69,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         1.0
+         1.5
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/schema/jsfLibraries.exsd b/jsf/plugins/org.eclipse.jst.jsf.core/schema/jsfLibraries.exsd
index 6ee46f0..cfb5f58 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/schema/jsfLibraries.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/schema/jsfLibraries.exsd
@@ -99,7 +99,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         JSF M10
+         1.5
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/schema/methodresolver.exsd b/jsf/plugins/org.eclipse.jst.jsf.core/schema/methodresolver.exsd
index 1de42a4..57b83d5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/schema/methodresolver.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/schema/methodresolver.exsd
@@ -69,7 +69,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         1.0
+         1.5
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/schema/pluginProvidedJsfLibraries.exsd b/jsf/plugins/org.eclipse.jst.jsf.core/schema/pluginProvidedJsfLibraries.exsd
index 2c99678..802062f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/schema/pluginProvidedJsfLibraries.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/schema/pluginProvidedJsfLibraries.exsd
@@ -7,6 +7,8 @@
       </appInfo>
       <documentation>
          This extension point allows clients to create named sets of jars for use with JavaServer Faces Applications.
+
+&lt;p&gt;&lt;b&gt;This extension point is provisional and subject to change&lt;/b&gt;&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -111,7 +113,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         JSF 1.0
+         2.0
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/schema/propertyresolver.exsd b/jsf/plugins/org.eclipse.jst.jsf.core/schema/propertyresolver.exsd
index 7a3a985..4ec0f67 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/schema/propertyresolver.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/schema/propertyresolver.exsd
@@ -69,7 +69,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         1.0
+         1.5
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/schema/variableresolver.exsd b/jsf/plugins/org.eclipse.jst.jsf.core/schema/variableresolver.exsd
index 26b1032..d293cca 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/schema/variableresolver.exsd
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/schema/variableresolver.exsd
@@ -69,7 +69,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         1.0
+         1.5
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/IJSFCoreConstants.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/IJSFCoreConstants.java
index f5e9ecf..7e2d9c8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/IJSFCoreConstants.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/IJSFCoreConstants.java
@@ -13,6 +13,8 @@
 /**
  * JSF Core framework constants
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/JSFVersion.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/JSFVersion.java
new file mode 100644
index 0000000..e1d3aaf
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/JSFVersion.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsf.core;
+
+/**
+ * @author gekessle
+ *
+ */
+public enum JSFVersion {
+	
+	/**
+	 * Unknown version support
+	 */
+	UNKNOWN,
+	/**
+	 * Supports JSF Version 1.0
+	 */
+	V1_0,
+	/**
+	 * Supports JSF Version 1.1
+	 */
+	V1_1,
+	/**
+	 * Supports JSF Version 1.1
+	 */
+	V1_2;
+	
+    @Override
+    public String toString() {
+        switch(this)
+        {
+            case V1_0:
+                return IJSFCoreConstants.JSF_VERSION_1_0;
+            case V1_1:
+                return IJSFCoreConstants.JSF_VERSION_1_1;
+            case V1_2:
+                return IJSFCoreConstants.JSF_VERSION_1_2;
+            case UNKNOWN:
+                return "unknown";
+            default:
+                throw new IllegalStateException("Missing string conversion: "+this.name());
+        }
+    }
+
+    /**
+     * @param valueAsString
+     * @return the reverse mapping to an enum from toString() returns
+     */
+    public static JSFVersion valueOfString(String  valueAsString)
+    {
+        if (IJSFCoreConstants.JSF_VERSION_1_0.equals(valueAsString))
+        {
+            return V1_0;
+        }
+        else if (IJSFCoreConstants.JSF_VERSION_1_1.equals(valueAsString))
+        {
+            return V1_1;
+        }
+        else if (IJSFCoreConstants.JSF_VERSION_1_2.equals(valueAsString))
+        {
+            return V1_2;
+        }
+        else if ("unknown".equals(valueAsString))
+        {
+            return UNKNOWN;
+        }
+        else
+        {
+            return null;
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/JSFCorePlugin.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/JSFCorePlugin.java
index d93286e..21f42a6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/JSFCorePlugin.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/JSFCorePlugin.java
@@ -8,7 +8,7 @@
  * Contributors:
  *    Gerry Kessler - initial API and implementation
  *    Ian Trimble - JSFLibraryRegistry work
- *******************************************************************************/ 
+ *******************************************************************************/
 package org.eclipse.jst.jsf.core.internal;
 
 import java.util.Collections;
@@ -24,10 +24,13 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jst.jsf.context.IDelegatingFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
 import org.eclipse.jst.jsf.designtime.context.AbstractDTExternalContextFactory;
 import org.eclipse.jst.jsf.designtime.el.AbstractDTMethodResolver;
 import org.eclipse.jst.jsf.designtime.el.AbstractDTPropertyResolver;
 import org.eclipse.jst.jsf.designtime.el.AbstractDTVariableResolver;
+import org.eclipse.jst.jsf.designtime.internal.resolver.ViewBasedTaglibResolverFactory;
 import org.eclipse.ui.preferences.ScopedPreferenceStore;
 import org.eclipse.wst.common.frameworks.internal.WTPPlugin;
 import org.osgi.framework.Bundle;
@@ -38,81 +41,126 @@
  * 
  * @author Gerry Kessler - Oracle, Ian Trimble - Oracle
  */
-public class JSFCorePlugin extends WTPPlugin {
-	/**
-	 * The plugin id
-	 */
-	public static final String PLUGIN_ID = "org.eclipse.jst.jsf.core";//org.eclipse.jst.jsf.core.internal.JSFCorePlugin"; //$NON-NLS-1$
+public class JSFCorePlugin extends WTPPlugin
+{
+    /**
+     * The plugin id
+     */
+    public static final String             PLUGIN_ID = "org.eclipse.jst.jsf.core"; // org.eclipse.jst.jsf.core.internal.JSFCorePlugin";
+    // //$NON-NLS-1$
 
-	// The shared instance.
-	private static JSFCorePlugin plugin;
-	
-    private IPreferenceStore  preferenceStore;
+    // The shared instance.
+    private static JSFCorePlugin           plugin;
 
-	/**
-	 * The constructor.
-	 */
-	public JSFCorePlugin() {
-		plugin = this;
-	}
+    private IPreferenceStore               preferenceStore;
 
-	/**
-	 * This method is called upon plug-in activation
-	 * @param context 
-	 * @throws Exception 
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
+    private ViewBasedTaglibResolverFactory _tagLibResolverFactory;
 
-	/**
-	 * This method is called when the plug-in is stopped
-	 * @param context 
-	 * @throws Exception 
-	 */
-	public void stop(BundleContext context) throws Exception {
-		super.stop(context);
-		plugin = null;
-	}
+    /**
+     * The constructor.
+     */
+    public JSFCorePlugin()
+    {
+        plugin = this;
+    }
 
-	/**
-	 * Returns the shared instance.
-	 * @return the shared instance
-	 */
-	public static JSFCorePlugin getDefault() {
-		return plugin;
-	}
+    /**
+     * This method is called upon plug-in activation
+     * 
+     * @param context
+     * @throws Exception
+     */
+    @Override
+    public void start(final BundleContext context) throws Exception
+    {
+        super.start(context);
+//        IStructuredDocumentContextResolverFactory factory = 
+//            IStructuredDocumentContextResolverFactory.INSTANCE;
 
-	/**
-	 * @param e
-	 * @param msg
-	 */
-	public static void log(final Exception e, final String msg) {
-		final ILog log = getDefault().getLog();
+//        if (factory instanceof IDelegatingFactory)
+//        {
+//            _tagLibResolverFactory = new ViewBasedTaglibResolverFactory();
+//            ((IDelegatingFactory) factory)
+//                    .addFactoryDelegate(_tagLibResolverFactory);
+//        }
+//        else
+//        {
+//            log("Error adding tag resolver delegate", new Throwable());
+//        }
+    }
 
-		log.log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, msg, e));
-	}
+    /**
+     * This method is called when the plug-in is stopped
+     * 
+     * @param context
+     * @throws Exception
+     */
+    @Override
+    public void stop(final BundleContext context) throws Exception
+    {
+        super.stop(context);
 
-	/**
-	 * Logs using the default ILog implementation provided by getLog().
-	 * 
-	 * @param severity Severity (IStatus constant) of log entry
-	 * @param message Human-readable message describing log entry
-	 * @param ex Throwable instance (can be null)
-	 */
-	public static void log(int severity, String message, Throwable ex) {
-		getDefault().getLog().log(new Status(severity, PLUGIN_ID, IStatus.OK, message, ex));
-	}
+        IStructuredDocumentContextResolverFactory factory = IStructuredDocumentContextResolverFactory.INSTANCE;
 
-	/**
-	 * Logs using the default ILog implementation provided by getLog().
-	 * 
-	 * @param severity Severity (IStatus constant) of log entry
-	 * @param message Human-readable message describing log entry
-	 */
-	public static void log(int severity, String message) {
-		log(severity, message, null);
-	}
+        if (factory instanceof IDelegatingFactory
+                && _tagLibResolverFactory != null)
+        {
+            ((IDelegatingFactory) factory)
+                    .removeFactoryDelegate(_tagLibResolverFactory);
+        }
+        plugin = null;
+    }
+
+    /**
+     * Returns the shared instance.
+     * 
+     * @return the shared instance
+     */
+    public static JSFCorePlugin getDefault()
+    {
+        return plugin;
+    }
+
+    /**
+     * @param e
+     * @param msg
+     */
+    public static void log(final Exception e, final String msg)
+    {
+        final ILog log = getDefault().getLog();
+
+        log.log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, msg, e));
+    }
+
+    /**
+     * Logs using the default ILog implementation provided by getLog().
+     * 
+     * @param severity
+     *            Severity (IStatus constant) of log entry
+     * @param message
+     *            Human-readable message describing log entry
+     * @param ex
+     *            Throwable instance (can be null)
+     */
+    public static void log(final int severity, final String message,
+            final Throwable ex)
+    {
+        getDefault().getLog().log(
+                new Status(severity, PLUGIN_ID, IStatus.OK, message, ex));
+    }
+
+    /**
+     * Logs using the default ILog implementation provided by getLog().
+     * 
+     * @param severity
+     *            Severity (IStatus constant) of log entry
+     * @param message
+     *            Human-readable message describing log entry
+     */
+    public static void log(final int severity, final String message)
+    {
+        log(severity, message, null);
+    }
 
     /**
      * Logs a message for this plugin
@@ -120,17 +168,18 @@
      * @param message
      * @param t
      */
-    public static void log(String message, Throwable t)
+    public static void log(final String message, final Throwable t)
     {
-        ILog log = plugin.getLog();
-        log.log(
-           new Status(
-             IStatus.ERROR, plugin.getBundle().getSymbolicName(), 0, message, t));
+        final ILog log = plugin.getLog();
+        log.log(new Status(IStatus.ERROR, plugin.getBundle().getSymbolicName(),
+                0, message, t));
     }
-    
-	public String getPluginID() {
-		return PLUGIN_ID;
-	}
+
+    @Override
+    public String getPluginID()
+    {
+        return PLUGIN_ID;
+    }
 
     /**
      * @return all registered symbol source providers
@@ -147,18 +196,17 @@
         }
         return Collections.unmodifiableMap(_registeredVariableResolvers);
     }
-    
-    private static Map<String, AbstractDTVariableResolver>    _registeredVariableResolvers;
-    private final static String VARIABLE_RESOLVER_EXT_POINT_NAME = "variableresolver"; //$NON-NLS-1$
-    
+
+    private static Map<String, AbstractDTVariableResolver> _registeredVariableResolvers;
+    private final static String                            VARIABLE_RESOLVER_EXT_POINT_NAME = "variableresolver"; //$NON-NLS-1$
+
     private static void registerVariableResolverProviders()
     {
         _registeredVariableResolvers = new HashMap();
         loadRegisteredExtensions(VARIABLE_RESOLVER_EXT_POINT_NAME,
-                                _registeredVariableResolvers,
-                                VARIABLE_RESOLVER_EXT_POINT_NAME);
+                _registeredVariableResolvers, VARIABLE_RESOLVER_EXT_POINT_NAME);
     }
-    
+
     /**
      * @return a map of all registered property resolvers by id
      */
@@ -174,20 +222,17 @@
         }
         return Collections.unmodifiableMap(_registeredPropertyResolvers);
     }
-    
-    private static Map<String, AbstractDTPropertyResolver>    _registeredPropertyResolvers;
-    private final static String PROPERTY_RESOLVER_EXT_POINT_NAME = 
-                                                             "propertyresolver"; //$NON-NLS-1$
-    
+
+    private static Map<String, AbstractDTPropertyResolver> _registeredPropertyResolvers;
+    private final static String                            PROPERTY_RESOLVER_EXT_POINT_NAME = "propertyresolver"; //$NON-NLS-1$
+
     private static void registerPropertyResolverProviders()
     {
         _registeredPropertyResolvers = new HashMap();
         loadRegisteredExtensions(PROPERTY_RESOLVER_EXT_POINT_NAME,
-                                _registeredPropertyResolvers,
-                                PROPERTY_RESOLVER_EXT_POINT_NAME);
+                _registeredPropertyResolvers, PROPERTY_RESOLVER_EXT_POINT_NAME);
     }
-    
-    
+
     /**
      * @return a map of all registered method resolvers by id
      */
@@ -204,16 +249,14 @@
         return Collections.unmodifiableMap(_registeredMethodResolvers);
     }
 
-    private static Map<String, AbstractDTMethodResolver>     _registeredMethodResolvers;
-    private final static String METHOD_RESOLVER_EXT_POINT_NAME = 
-                                                               "methodresolver"; //$NON-NLS-1$
-    
+    private static Map<String, AbstractDTMethodResolver> _registeredMethodResolvers;
+    private final static String                          METHOD_RESOLVER_EXT_POINT_NAME = "methodresolver"; //$NON-NLS-1$
+
     private static void registerMethodResolverProviders()
     {
         _registeredMethodResolvers = new HashMap();
         loadRegisteredExtensions(METHOD_RESOLVER_EXT_POINT_NAME,
-                _registeredMethodResolvers,
-                METHOD_RESOLVER_EXT_POINT_NAME);
+                _registeredMethodResolvers, METHOD_RESOLVER_EXT_POINT_NAME);
 
     }
 
@@ -232,79 +275,85 @@
         }
         return Collections.unmodifiableMap(_registeredExternalContextProviders);
     }
-    
-    private static Map<String, AbstractDTExternalContextFactory>     _registeredExternalContextProviders;
-    private final static String EXTERNAL_CONTEXT_EXT_POINT_NAME = 
-                                                               "externalcontext"; //$NON-NLS-1$
+
+    private static Map<String, AbstractDTExternalContextFactory> _registeredExternalContextProviders;
+    private final static String                                  EXTERNAL_CONTEXT_EXT_POINT_NAME = "externalcontext"; //$NON-NLS-1$
 
     private static void registerExternalContextProviders()
     {
         _registeredExternalContextProviders = new HashMap();
         loadRegisteredExtensions(EXTERNAL_CONTEXT_EXT_POINT_NAME,
-                                 _registeredExternalContextProviders,
-                                 EXTERNAL_CONTEXT_EXT_POINT_NAME);
+                _registeredExternalContextProviders,
+                EXTERNAL_CONTEXT_EXT_POINT_NAME);
     }
-    
-    private static <ResolverProvider> void loadRegisteredExtensions(final String extName,
-                                                 final Map<String, ResolverProvider>    registry,
-                                                 final String elementName)
+
+    private static <ResolverProvider> void loadRegisteredExtensions(
+            final String extName, final Map<String, ResolverProvider> registry,
+            final String elementName)
     {
-        final IExtensionPoint point = Platform.getExtensionRegistry().
-        getExtensionPoint(plugin.getBundle().getSymbolicName(), 
-                extName);
+        final IExtensionPoint point = Platform.getExtensionRegistry()
+                .getExtensionPoint(plugin.getBundle().getSymbolicName(),
+                        extName);
         final IExtension[] extensions = point.getExtensions();
 
-        for (int i = 0; i < extensions.length; i++)
+        for (final IExtension extension : extensions)
         {
-            final IExtension extension = extensions[i];
-            final IConfigurationElement[] elements = 
-                extension.getConfigurationElements();
+            final IConfigurationElement[] elements = extension
+                    .getConfigurationElements();
             final String bundleId = extension.getContributor().getName();
-            
-            for (int j = 0; j < elements.length; j++)
+
+            for (final IConfigurationElement element : elements)
             {
-                final IConfigurationElement element = elements[j];
                 if (elementName.equals(element.getName())
                         && element.getAttribute("class") != null //$NON-NLS-1$
                         && element.getAttribute("id") != null) //$NON-NLS-1$
                 {
-                    final String factoryClassName = element.getAttribute("class"); //$NON-NLS-1$
+                    final String factoryClassName = element
+                            .getAttribute("class"); //$NON-NLS-1$
                     final String id = element.getAttribute("id"); //$NON-NLS-1$
                     final Bundle bundle = Platform.getBundle(bundleId);
-                    
+
                     if (bundle != null)
                     {
                         try
                         {
-                            final Class factoryClass = 
-                                bundle.loadClass(factoryClassName);
-                            
-                            final Object variableResolver= 
-                                factoryClass.newInstance();
-    
-                            registry.put(id, (ResolverProvider) variableResolver);
+                            final Class factoryClass = bundle
+                                    .loadClass(factoryClassName);
+
+                            final Object variableResolver = factoryClass
+                                    .newInstance();
+
+                            registry.put(id,
+                                    (ResolverProvider) variableResolver);
                         }
-                        catch (Exception e)
+                        catch (final Exception e)
                         {
-                            final ILog        logger_ = getDefault().getLog();
-                            logger_.log(new Status(IStatus.ERROR, plugin.getBundle()
-                                    .getSymbolicName(), 0, 
-                                    "Error loading resolver provider extension point",e)); //$NON-NLS-1$
+                            final ILog logger_ = getDefault().getLog();
+                            logger_
+                                    .log(new Status(
+                                            IStatus.ERROR,
+                                            plugin.getBundle()
+                                                    .getSymbolicName(),
+                                            0,
+                                            "Error loading resolver provider extension point", e)); //$NON-NLS-1$
                         }
                     }
                 }
             }
         }
     }
-    
+
     /**
-     * @return the preference store for this bundle
-     * TODO: this is copied from AbstractUIPlugin; need to upgrade to new IPreferencesService
+     * @return the preference store for this bundle TODO: this is copied from
+     *         AbstractUIPlugin; need to upgrade to new IPreferencesService
      */
-    public IPreferenceStore getPreferenceStore() {
+    public IPreferenceStore getPreferenceStore()
+    {
         // Create the preference store lazily.
-        if ( this.preferenceStore == null) {
-            this.preferenceStore = new ScopedPreferenceStore(new InstanceScope(),getBundle().getSymbolicName());
+        if (this.preferenceStore == null)
+        {
+            this.preferenceStore = new ScopedPreferenceStore(
+                    new InstanceScope(), getBundle().getSymbolicName());
 
         }
         return this.preferenceStore;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/JSFCoreTraceOptions.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/JSFCoreTraceOptions.java
new file mode 100644
index 0000000..b8fb0ae
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/JSFCoreTraceOptions.java
@@ -0,0 +1,83 @@
+package org.eclipse.jst.jsf.core.internal;
+
+import org.eclipse.osgi.framework.debug.FrameworkDebugOptions;
+import org.eclipse.osgi.service.debug.DebugOptions;
+
+/**
+ * Defines that standard runtime trace options for debugging. See .options file
+ * for definitions.
+ * 
+ * @author cbateman
+ * 
+ */
+public final class JSFCoreTraceOptions
+{
+    /**
+     * True if debug tracing is enabled. Other tracing cannot be enabled unless
+     * this is enabled.
+     */
+    public static final boolean ENABLED;
+
+    /**
+     * True if tag introspector tracing is enabled
+     */
+    public static final boolean TRACE_JSPTAGINTROSPECTOR;
+
+    /**
+     * True if the JSP tag registry tracing is enabled
+     */
+    public static final boolean TRACE_JSPTAGREGISTRY;
+
+    /**
+     * True if handling of JSP TagIndex changes are being traced
+     */
+    public static final boolean TRACE_JSPTAGREGISTRY_CHANGES;
+    
+    private static final String KEY_DEBUG_ENABLED = "/debug";
+    private static final String KEY_DESIGNTIME = "/designtime";
+    private static final String KEY_DESIGNTIME_VIEW = KEY_DESIGNTIME + "/view";
+    private static final String KEY_VIEW_JSPTAGINTROSPECTOR = KEY_DESIGNTIME_VIEW
+            + "/jsptagintrospection";
+    private static final String KEY_VIEW_JSPTAGREGISTRY = KEY_DESIGNTIME_VIEW
+            + "/jsptagregistry";
+    private static final String KEY_VIEW_JSPTAGREGISTRY_CHANGES =
+        KEY_VIEW_JSPTAGREGISTRY + "/changes";
+    
+    static
+    {
+        final DebugOptions debugOptions = FrameworkDebugOptions.getDefault();
+
+        ENABLED = debugOptions != null
+                && debugOptions.getBooleanOption(JSFCorePlugin.PLUGIN_ID
+                        + KEY_DEBUG_ENABLED, false);
+
+        if (ENABLED)
+        {
+            TRACE_JSPTAGINTROSPECTOR = debugOptions.getBooleanOption(
+                    JSFCorePlugin.PLUGIN_ID + KEY_VIEW_JSPTAGINTROSPECTOR, false);
+            TRACE_JSPTAGREGISTRY = debugOptions.getBooleanOption(
+                    JSFCorePlugin.PLUGIN_ID + KEY_VIEW_JSPTAGREGISTRY, false);
+            TRACE_JSPTAGREGISTRY_CHANGES = debugOptions.getBooleanOption(
+                    JSFCorePlugin.PLUGIN_ID + KEY_VIEW_JSPTAGREGISTRY_CHANGES, false);
+        }
+        else
+        {
+            TRACE_JSPTAGINTROSPECTOR = false;
+            TRACE_JSPTAGREGISTRY = false;
+            TRACE_JSPTAGREGISTRY_CHANGES = false;
+        }
+    }
+
+    /**
+     * @param message
+     */
+    public static void log(final String message)
+    {
+        System.out.println(message);
+    }
+
+    private JSFCoreTraceOptions()
+    {
+        // no instantiation
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/ContentAssistParser.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/ContentAssistParser.java
index c2f965e..c13b0e8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/ContentAssistParser.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/ContentAssistParser.java
@@ -12,6 +12,9 @@
 
 package org.eclipse.jst.jsf.core.internal.contentassist.el;
 
+import org.eclipse.jface.text.Region;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
 import org.eclipse.jst.jsp.core.internal.java.jspel.ASTAddExpression;
 import org.eclipse.jst.jsp.core.internal.java.jspel.ASTAndExpression;
 import org.eclipse.jst.jsp.core.internal.java.jspel.ASTChoiceExpression;
@@ -53,12 +56,43 @@
         {
             return null;
         }
-        else if ("".equals(elText.trim()))
+        else if ("".equals(elText.trim())) //$NON-NLS-1$
         {
-            return new IdCompletionStrategy("", "");
+            return new IdCompletionStrategy("", "");  //$NON-NLS-1$//$NON-NLS-2$
         }
         
-        final java.io.StringReader reader = new java.io.StringReader(elText);
+        PrefixVisitor visitor = getVisitorForPosition(relativePosition, elText);
+        return visitor != null? visitor.getPrefix() : null;
+    }
+    
+    /**
+     * Get symbol and symbol region at given position in el string
+     * @param context - IStructuredDocumentContext
+     * @param relativePosition - position in el string
+     * @param elText - el string
+     * @return SymbolInfo. May be null.
+     */
+    public static SymbolInfo getSymbolInfo(IStructuredDocumentContext context, final int relativePosition, final String elText) {
+        if (elText == null || "".equals(elText.trim())) //$NON-NLS-1$
+        {
+            return null;
+        }
+        PrefixVisitor visitor = getVisitorForPosition(relativePosition, elText);
+        if (visitor != null) {
+            SymbolInfo symbolInfo = visitor.getSymbolInfo(context);
+            if (symbolInfo != null) {
+                Region r = symbolInfo.getRelativeRegion();
+                if (relativePosition > r.getOffset() && relativePosition <= r.getOffset() + r.getLength()) {
+                    return symbolInfo;
+                }
+            }
+        }
+        return null;
+    }
+
+	private static PrefixVisitor getVisitorForPosition(final int relativePosition,
+			final String elText) {
+		final java.io.StringReader reader = new java.io.StringReader(elText);
         final JSPELParser  parser = new JSPELParser(reader);
         
         try
@@ -66,14 +100,17 @@
             final ASTExpression expr = parser.Expression();
             final PrefixVisitor visitor = new PrefixVisitor(relativePosition, elText);
             expr.jjtAccept(visitor, null);
-            return visitor.getPrefix();
+            return visitor;
         }
         catch (ParseException pe)
         {
             // TODO: handle parser by using current and expected tokens
+        	return null;
         }
-        
-        return null;
+	}
+    
+    private static String substring(String s, Region r) {
+        return s.substring(r.getOffset(), r.getOffset() + r.getLength());
     }
     
     private static class PrefixVisitor implements JSPELParserVisitor
@@ -81,10 +118,11 @@
         private final int       _relativePos;
         private final String    _fullText;
         
-        private String          _curPrefix; // = null; initialized as tree is visited
+        private String          _symbolPrefix; // = null; initialized as tree is visited
         private int             _prefixType;
         private boolean         _prefixResolved;  // = false; set to true when the prefix is resolved
-        private String          _proposalStart = "";
+        private int             _symbolStartPos = 1; // first char has position 1
+        private int             _symbolEndPos = 0;
         
         PrefixVisitor(final int relativePos, final String fullText)
         {
@@ -102,13 +140,13 @@
                 switch(_prefixType)
                 {
                     case ContentAssistStrategy.PREFIX_TYPE_DOT_COMPLETION:
-                        return new FunctionCompletionStrategy(_curPrefix, _proposalStart);
+                        return new FunctionCompletionStrategy(_symbolPrefix, getProposalStart());
                     
                     case ContentAssistStrategy.PREFIX_TYPE_ID_COMPLETION:
-                        return new IdCompletionStrategy(_curPrefix, _proposalStart);
+                        return new IdCompletionStrategy(_symbolPrefix, getProposalStart());
                     
                     case ContentAssistStrategy.PREFIX_TYPE_EMPTY_EXPRESSION:
-                        return new IdCompletionStrategy("", _proposalStart);
+                        return new IdCompletionStrategy("", getProposalStart()); //$NON-NLS-1$
                         
                     default:
                         // do nothing; fall-through to return null
@@ -118,12 +156,42 @@
             return null;
         }
         
+        /**
+         * @param context - IStructuredDocumentContext
+         * @return symbol and symbol region if resolved, null otherwise
+         */
+        public SymbolInfo getSymbolInfo(IStructuredDocumentContext context) {
+        	if (_prefixResolved && _symbolStartPos < _symbolEndPos) {
+        		Region region = new Region(_symbolStartPos - 1, _symbolEndPos - _symbolStartPos + 1);
+                ISymbol symbol = null;
+                switch (_prefixType) {
+                case ContentAssistStrategy.PREFIX_TYPE_ID_COMPLETION:
+                    symbol = SymbolResolveUtil.getSymbolForVariable(context, substring(_fullText, region));
+                    break;
+                case ContentAssistStrategy.PREFIX_TYPE_DOT_COMPLETION:
+                    symbol = SymbolResolveUtil.getSymbolForVariableSuffixExpr(context, _symbolPrefix + "." + substring(_fullText, region), _symbolEndPos == _fullText.length()); //$NON-NLS-1$
+                    break;
+                }
+                if (symbol != null) {
+                    return new SymbolInfo(symbol, region);
+                }
+        	}
+        	return null;
+        }
+
+		private String getProposalStart() {
+            if (_symbolStartPos <= _relativePos) {
+                return _fullText.substring(_symbolStartPos - 1, _relativePos - 1);
+            }
+            return ""; //$NON-NLS-1$
+		}
+        
         public Object visit(ASTAddExpression node, Object data) 
         {
             return node.childrenAccept(this, data);
         }
 
-        public Object visit(ASTAndExpression node, Object data) 
+		public Object visit(ASTAndExpression node, Object data) 
         {
             return node.childrenAccept(this, data);
         }
@@ -191,7 +259,7 @@
                     && node.jjtGetNumChildren() == 0
                     && node.getFirstToken().kind == JSPELParserConstants.IDENTIFIER)
             {
-                _curPrefix = node.getFirstToken().image;
+                _symbolPrefix = node.getFirstToken().image;
                 
                 if (testContainsCursor(node))
                 {
@@ -199,8 +267,8 @@
                     // further since we know both the prefix -- the id -- and
                     // the type -- it's an id completion
                     _prefixType = ContentAssistStrategy.PREFIX_TYPE_ID_COMPLETION;
-                    int proposalLength = _relativePos - node.getFirstToken().beginColumn;
-					_proposalStart = node.getFirstToken().image.substring(0, proposalLength);
+                    _symbolStartPos = node.getFirstToken().beginColumn;
+                    _symbolEndPos = node.getFirstToken().endColumn;
                     _prefixResolved = true;
                 }
             }
@@ -225,7 +293,8 @@
                             if (proposalStartLength < 0) { // Cursor after firstToken start but before lastToken start?
                             	proposalStartLength = 0;
                             }
-							_proposalStart = lastToken.image.substring(0, proposalStartLength);
+                            _symbolStartPos = lastToken.beginColumn;
+                            _symbolEndPos = lastToken.endColumn;
                             _prefixResolved = true;
                         }
                         // only include this suffix on the path if the cursor is 
@@ -234,7 +303,7 @@
                         // resolve the prefix for
                         else
                         {
-                            _curPrefix += node.getFirstToken().image + lastToken.image;
+                            _symbolPrefix += node.getFirstToken().image + lastToken.image;
                         }
                     }
                     else if (lastToken == node.getFirstToken())
@@ -242,6 +311,8 @@
                         if (testCursorImmediatelyAfter(node))
                         {
                             _prefixType = ContentAssistStrategy.PREFIX_TYPE_DOT_COMPLETION;
+                            _symbolStartPos = lastToken.endColumn + 1;
+                            _symbolEndPos = lastToken.endColumn;
                             _prefixResolved = true;
                         }
                     }
@@ -262,7 +333,7 @@
             {
                 // if we haven't resolved the prefix yet, then we need
                 // to append this suffix value
-                _curPrefix += _fullText.substring(node.getFirstToken().beginColumn-1, node.getLastToken().endColumn);
+                _symbolPrefix += _fullText.substring(node.getFirstToken().beginColumn-1, node.getLastToken().endColumn);
             }
             
             return retValue;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/ContentAssistStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/ContentAssistStrategy.java
index c1582cf..1e7d43c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/ContentAssistStrategy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/ContentAssistStrategy.java
@@ -74,9 +74,9 @@
     /**
      * @param context
      * @return the list of proposals for this strategy.  Contents of the list
-     * must be of type ICompletionProposal
+     * must be of type ICompletionProposal.  List should be considered immutable.
      */
-    public abstract List getProposals(IStructuredDocumentContext context);
+    public abstract List<ICompletionProposal> getProposals(IStructuredDocumentContext context);
 
 	/**
 	 * @return the part of the proposal which was already typed when user invoked autocomplete
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/FunctionCompletionStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/FunctionCompletionStrategy.java
index 77803d9..1be8de4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/FunctionCompletionStrategy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/FunctionCompletionStrategy.java
@@ -7,25 +7,21 @@
  *
  * Contributors:
  *    Cameron Bateman/Oracle - initial API and implementation
- *    
+ *
  ********************************************************************************/
 package org.eclipse.jst.jsf.core.internal.contentassist.el;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
-import org.eclipse.jst.jsf.common.internal.types.CompositeType;
-import org.eclipse.jst.jsf.common.internal.types.IAssignable;
-import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
 import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
-import org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver;
 import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.ITextRegionContextResolver;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
-import org.eclipse.jst.jsf.context.symbol.IInstanceSymbol;
 import org.eclipse.jst.jsf.context.symbol.IMethodSymbol;
 import org.eclipse.jst.jsf.context.symbol.IObjectSymbol;
 import org.eclipse.jst.jsf.context.symbol.ISymbol;
@@ -34,136 +30,85 @@
 import org.eclipse.jst.jsf.context.symbol.provider.IContentProposalProvider.IProposalCreationFactory;
 import org.eclipse.jst.jsf.designtime.resolver.ISymbolContextResolver;
 import org.eclipse.jst.jsf.designtime.resolver.StructuredDocumentSymbolResolverFactory;
-import org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledProcessingFactory;
-import org.eclipse.jst.jsf.metadataprocessors.features.ELIsNotValidException;
-import org.eclipse.jst.jsf.metadataprocessors.features.IValidELValues;
 import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts;
 import org.eclipse.swt.graphics.Image;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
 
 /**
  * A completion strategy for function completions like:
- * 
+ *
  * v a r .
- *        ^ 
+ *        ^
  *
  * @author cbateman
  *
  */
-public class FunctionCompletionStrategy extends ContentAssistStrategy 
+public class FunctionCompletionStrategy extends ContentAssistStrategy
 {
     /**
      * @param value
-     * @param proposalStart 
+     * @param proposalStart
      */
-    public FunctionCompletionStrategy(String value, String proposalStart) 
+    public FunctionCompletionStrategy(final String value, final String proposalStart)
     {
         super(ContentAssistStrategy.PREFIX_TYPE_DOT_COMPLETION, value, proposalStart);
     }
 
-    public List getProposals(IStructuredDocumentContext context) 
+    @Override
+	public List<ICompletionProposal> getProposals(final IStructuredDocumentContext context)
     {
-        final List completionList = new ArrayList();
-        
-        String[]  ids = getValue().split("\\.");
-        
-        // if no suffixes, only one id
-        if (ids.length < 1) 
-        {
-            ids = new String[] {getValue()};
-        }
-
-        final ISymbolContextResolver  symbolResolver = 
+        List<ICompletionProposal> completionList = Collections.EMPTY_LIST;
+        final ISymbolContextResolver  symbolResolver =
             StructuredDocumentSymbolResolverFactory.getInstance().
                 getSymbolContextResolver(context);
-        
-        ISymbol symbol = null;
-        
-        if (symbolResolver != null)
-        {
-            symbol = symbolResolver.getVariable(ids[0]);
-        }
-        
-        if (symbol instanceof IInstanceSymbol
-                && ((IInstanceSymbol)symbol).isTypeResolved())
-        {
-            int  curSuffixIdx = 1;
-            
-            while 
-                (curSuffixIdx < ids.length
-                        && symbol != null) 
-            {
-                
-                final ISymbol[]  properties = 
-                    symbolResolver.getProperties(symbol);
-                    
-                // set symbol to null because hasn't been found yet
-                symbol = null;
-                
-                SEARCH_SYMBOL_NAME:for
-                    (int i = 0; i < properties.length; i++)
-                {
-                    final ISymbol element = properties[i];
-                    
-                    if (ids[curSuffixIdx].equals(element.getName()))
-                    {
-                        symbol = element;
-                        break SEARCH_SYMBOL_NAME;
-                    }
-                }
-                curSuffixIdx++;
-            }
-            
-            // if we get a completion symbol, get it's proposals
-            if (symbol instanceof IObjectSymbol)
-            {
-                final List expectedMethodBindings = new ArrayList();
-                ISymbol[] suffixes = getSymbols((IObjectSymbol) symbol, 
-                                                 context, 
-                                                 symbolResolver,
-                                                 expectedMethodBindings);
 
-                final ComposedAdapterFactory factory =
-                    new ComposedAdapterFactory(
-                           ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
-                final IProposalCreationFactory  creationInfo =
-                    new MyProposalFactory(context, getProposalStart().length(), 
-                                            expectedMethodBindings);
-                
-                for (int i = 0; i < suffixes.length; i++)
+        final ISymbol symbol = SymbolResolveUtil.getSymbolForVariableSuffixExpr(context, getValue(), false);
+
+        // if we get a completion symbol, get it's proposals
+        if (symbol instanceof IObjectSymbol)
+        {
+            final List expectedMethodBindings = new ArrayList();
+            final ISymbol[] suffixes = getSymbols((IObjectSymbol) symbol,
+                                             context,
+                                             symbolResolver,
+                                             expectedMethodBindings);
+
+            final ComposedAdapterFactory factory =
+                new ComposedAdapterFactory(
+                       ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+            final IProposalCreationFactory  creationInfo =
+                new MyProposalFactory(context, getProposalStart().length(),
+                                        expectedMethodBindings);
+            
+            completionList = new ArrayList<ICompletionProposal>();
+            for (final ISymbol propSymbol : suffixes) {
+                final Object  provider =
+                  factory.adapt(propSymbol, IContentProposalProvider.class);
+
+                if (provider instanceof IContentProposalProvider)
                 {
-                    final ISymbol propSymbol = suffixes[i];
-                    final Object  provider =  
-                      factory.adapt(propSymbol, IContentProposalProvider.class);
-                        
-                    if (provider instanceof IContentProposalProvider)
+                    final ICompletionProposal[] proposal  =
+                        ((IContentProposalProvider) provider).
+                            getProposals(propSymbol, creationInfo);
+                    if (proposal != null)
                     {
-                        final ICompletionProposal[] proposal  = 
-                            ((IContentProposalProvider) provider).
-                                getProposals(propSymbol, creationInfo);
-                        if (proposal != null)
-                        {
-                        	addProposalsMatchingProposalStart(completionList,
-									proposal);
-                        }
+                    	addProposalsMatchingProposalStart(completionList,
+								proposal);
                     }
                 }
             }
         }
 
-        return completionList;
+        return Collections.unmodifiableList(completionList);
     }
 
-	private ISymbol[] getSymbols(IObjectSymbol symbol, 
-                                 IStructuredDocumentContext context, 
-                                 ISymbolContextResolver  symbolResolver,
-                                 List   expectedMethodBindings)
+	private ISymbol[] getSymbols(final IObjectSymbol symbol,
+                                 final IStructuredDocumentContext context,
+                                 final ISymbolContextResolver  symbolResolver,
+                                 final List   expectedMethodBindings)
     {
-        List symbols = new ArrayList();
+        final List symbols = new ArrayList();
 
-        if (isMethodBindingExpected(context, expectedMethodBindings))
+        if (SymbolResolveUtil.isMethodBindingExpected(context, expectedMethodBindings))
         {
             symbols.addAll(Arrays.asList(
                           symbolResolver.getMethods(symbol)));
@@ -173,131 +118,67 @@
 
         return (ISymbol[]) symbols.toArray(ISymbol.EMPTY_SYMBOL_ARRAY);
     }
-    
-    private boolean isMethodBindingExpected(IStructuredDocumentContext context,
-                                            List            expectedBindings)
-    {
-        boolean  isMBExpected = false;  // assume false until we find it true
-        
-        final IDOMContextResolver  domResolver = 
-            IStructuredDocumentContextResolverFactory.INSTANCE.
-                getDOMContextResolver(context);
-        
-        final Node curNode = domResolver.getNode();
-        
-        if (curNode instanceof Attr)
-        {
-            final Attr attr = (Attr) curNode;
-            final Element element = attr.getOwnerElement();
 
-            final ITaglibContextResolver taglibResolver =
-                IStructuredDocumentContextResolverFactory.INSTANCE.
-                    getTaglibContextResolver(context);
-
-            final String uri = taglibResolver.getTagURIForNodeName(element);
-            
-            final List elVals = 
-                MetaDataEnabledProcessingFactory.getInstance()
-                    .getAttributeValueRuntimeTypeFeatureProcessors
-                        (IValidELValues.class, context, uri, 
-                                element.getLocalName(), attr.getLocalName());
-            
-            for (final Iterator it = elVals.iterator(); it.hasNext();)
-            {
-                final IValidELValues validValues = (IValidELValues) it.next();
-                
-                try
-                {
-                    CompositeType type = validValues.getExpectedRuntimeType();
-                    if (type != null
-                            && type.getAssignmentTypeMask()
-                                    == IAssignable.ASSIGNMENT_TYPE_NONE)
-                    {
-                        isMBExpected = true;
-                        expectedBindings.addAll(
-                                Arrays.asList(
-                                        validValues.
-                                            getExpectedRuntimeType().
-                                            getSignatures()));
-                    }
-                }
-                catch (ELIsNotValidException e)
-                {
-                    // do nothing
-                }
-            }
-        }
-
-        // default condition is no method binding
-        return isMBExpected;
-    }
-    
     private static class MyProposalFactory extends ProposalCreationFactoryAdapter
     {
         private final static int   DEFAULT_RELEVANCE = 1;
-        
+
         private final static int   HIGH_RELEVANCE = 2;
         private final static int   NORMAL_RELEVANCE = 1;
         private final static int   LOW_RELEVANCE = 0;
-        
+
         private final List                         _expectedMethodBindings;
         private final IStructuredDocumentContext   _context;
-        
+
         /**
-         * @param context 
+         * @param context
          * @param replacementLength
-         * @param expectedMethodBindings 
+         * @param expectedMethodBindings
          */
-        public MyProposalFactory(IStructuredDocumentContext context, int replacementLength,
-                                    List expectedMethodBindings) {
-        	/*TODO I changed the meaning of "replacementLength" from "number of chars AFTER cursor to be
-        	 * replaced" to "number of chars BEFORE cursor to be replaced. Since "replacementLength"
-        	 * has always been 0 (constructor is only called by FunctionCompletionStrategy.getProposals()),
-        	 * this should not change anything, but I don't know if there have been different plans
-        	 * for "replacementLength".
-        	 * TODO Maybe this change should be done in the super class instead?
-        	 */
+        public MyProposalFactory(final IStructuredDocumentContext context, final int replacementLength,
+                                    final List expectedMethodBindings) {
             super(context.getDocumentPosition() - replacementLength, replacementLength);
             _context = context;
             _expectedMethodBindings = expectedMethodBindings;
         }
 
-        public ICompletionProposal createProposal(String replacementText, 
-                                                  String displayText, 
-                                                  String additionalText, 
-                                                  Image displayImage,
-                                                  Object target) 
+        @Override
+		public ICompletionProposal createProposal(final String replacementText,
+                                                  final String displayText,
+                                                  final String additionalText,
+                                                  final Image displayImage,
+                                                  final Object target)
         {
             int replacementOffset = _replacementOffset;
             int replacementLength = _replacementLength;
-            
-            // TODO: I regard this as a bit of hack, but until we write our 
+
+            // TODO: I regard this as a bit of hack, but until we write our
             // proposal implementation, it's basically the only way I can
             // see to do this
             // if it's an array, we must check if we need to replace a
             // preceding '.'
             if (replacementText.startsWith("["))
             {
-                ITextRegionContextResolver textResolver = 
+                ITextRegionContextResolver textResolver =
                     IStructuredDocumentContextResolverFactory.INSTANCE.getTextRegionResolver(_context);
-                
+
                 if (textResolver.getRegionType().equals(DOMJSPRegionContexts.JSP_VBL_CLOSE))
                 {
-                    textResolver = 
+                    textResolver =
                         IStructuredDocumentContextResolverFactory.
                             INSTANCE.getTextRegionResolver(textResolver.getPreviousContext());
                 }
-                
-                String regionText = textResolver.getRegionText();
-                int regionStart = textResolver.getStartOffset();
-                
+
+                final String regionText = textResolver.getRegionText();
+                final int regionStart = textResolver.getStartOffset();
+
                 if (DOMJSPRegionContexts.JSP_VBL_CONTENT.equals(textResolver.getRegionType())
                         && regionText != null
                         && regionStart != -1
                         && regionStart < _context.getDocumentPosition())
                 {
-                    int  relativeOffset = _context.getDocumentPosition() - regionStart - 1;
-                    
+                    final int  relativeOffset = _context.getDocumentPosition() - regionStart - 1;
+
                     if (regionText.charAt(relativeOffset) == '.')
                     {
                         // we must replace a length of 1 (the dot)
@@ -307,41 +188,41 @@
                     }
                 }
             }
-            
-            return createDefaultProposal(replacementText, 
-                                         replacementOffset, 
-                                         replacementLength, 
-                                         replacementText.length(), 
-                                         displayImage, 
-                                         displayText, 
-                                         null, 
-                                         additionalText, 
+
+            return createDefaultProposal(replacementText,
+                                         replacementOffset,
+                                         replacementLength,
+                                         replacementText.length(),
+                                         displayImage,
+                                         displayText,
+                                         null,
+                                         additionalText,
                                          getRelevance(target, DEFAULT_RELEVANCE));
         }
 
         private int getRelevance(final Object target, final int defaultRelevance)
         {
-            // if method bindings are expected, then list exact signature 
-            // matches top most.  Still list non-matching methods, but put 
+            // if method bindings are expected, then list exact signature
+            // matches top most.  Still list non-matching methods, but put
             // them at the bottom
             if (_expectedMethodBindings.size() > 0)
             {
                 if (target instanceof IMethodSymbol)
                 {
                     final IMethodSymbol methodSymbol = (IMethodSymbol) target;
-                    
+
                     for (final Iterator it = _expectedMethodBindings.iterator();
                             it.hasNext();)
                     {
                         final String methodType = (String) it.next();
-                        
+
                         // we have a match, so push to the top
                         if (methodType.equals(methodSymbol.getSignature()))
                         {
                             return HIGH_RELEVANCE;
                         }
                     }
-                    
+
                     // if we get out of the loop, then this method doesn't
                     // match the expected signature
                     return LOW_RELEVANCE;
@@ -350,7 +231,7 @@
                 // non-method targets have normal relevance when mb expected
                 return NORMAL_RELEVANCE;
             }
- 
+
             // otherwise, simply return the default for all
             return defaultRelevance;
         }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/IdCompletionStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/IdCompletionStrategy.java
index 83ccf55..f965d8c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/IdCompletionStrategy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/IdCompletionStrategy.java
@@ -13,6 +13,7 @@
 package org.eclipse.jst.jsf.core.internal.contentassist.el;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.core.resources.IFile;
@@ -57,9 +58,9 @@
     /**
      * @see org.eclipse.jst.jsf.core.internal.contentassist.el.ContentAssistStrategy#getProposals(org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext)
      */
-    public List getProposals(IStructuredDocumentContext context) 
+    public List<ICompletionProposal> getProposals(IStructuredDocumentContext context) 
     {
-        final List completionList = new ArrayList();
+        final List<ICompletionProposal> completionList = new ArrayList<ICompletionProposal>();
         final IWorkspaceContextResolver workspaceResolver = 
             IStructuredDocumentContextResolverFactory.INSTANCE.
                 getWorkspaceContextResolver(context);
@@ -104,7 +105,7 @@
             }
         }
 
-        return completionList;
+        return Collections.unmodifiableList(completionList);
     }
     
     private static class MyProposalFactory extends ProposalCreationFactoryAdapter
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/SymbolInfo.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/SymbolInfo.java
new file mode 100644
index 0000000..ce65219
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/SymbolInfo.java
@@ -0,0 +1,38 @@
+package org.eclipse.jst.jsf.core.internal.contentassist.el;
+
+import org.eclipse.jface.text.Region;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
+
+/**
+ * class contains a symbol and it's region
+ *
+ */
+public class SymbolInfo {
+    
+    private final ISymbol symbol;
+    private final Region relativeRegion;
+    
+    /**
+     * @param symbol
+     * @param relativeRegion
+     */
+    public SymbolInfo(ISymbol symbol, Region relativeRegion) {
+        super();
+        this.symbol = symbol;
+        this.relativeRegion = relativeRegion;
+    }
+
+	/**
+	 * @return the symbol
+	 */
+	public ISymbol getSymbol() {
+		return symbol;
+	}
+
+	/**
+	 * @return the relative region
+	 */
+	public Region getRelativeRegion() {
+		return relativeRegion;
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/SymbolResolveUtil.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/SymbolResolveUtil.java
new file mode 100644
index 0000000..0b72ab1
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/contentassist/el/SymbolResolveUtil.java
@@ -0,0 +1,179 @@
+package org.eclipse.jst.jsf.core.internal.contentassist.el;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jst.jsf.common.internal.types.CompositeType;
+import org.eclipse.jst.jsf.common.internal.types.IAssignable;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.symbol.IInstanceSymbol;
+import org.eclipse.jst.jsf.context.symbol.IObjectSymbol;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
+import org.eclipse.jst.jsf.designtime.resolver.ISymbolContextResolver;
+import org.eclipse.jst.jsf.designtime.resolver.StructuredDocumentSymbolResolverFactory;
+import org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledProcessingFactory;
+import org.eclipse.jst.jsf.metadataprocessors.features.ELIsNotValidException;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidELValues;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * Utility class for resolving symbols for a IStructuredDocumentContext.
+ */
+public class SymbolResolveUtil {
+
+	private SymbolResolveUtil() {
+		// utility class; not instantiable
+	}
+
+	/**
+	 * Get symbol for a variable (managed bean name, bundle name)
+	 * 
+	 * @param context
+	 * @param name
+	 * @return ISymbol
+	 */
+	public static ISymbol getSymbolForVariable(
+			final IStructuredDocumentContext context, final String name) {
+		final ISymbolContextResolver symbolResolver = StructuredDocumentSymbolResolverFactory
+				.getInstance().getSymbolContextResolver(context);
+
+		return symbolResolver.getVariable(name);
+	}
+
+	/**
+	 * Get symbol for a variable suffix (e. g. bean property/method, bundle
+	 * property). Takes into account whether method bindings are expected for
+	 * the given context.
+	 * 
+	 * @param context -
+	 *            the IStructuredDocumentContext
+	 * @param fullName -
+	 *            full name of the suffix (e. g. bean.property1.property2)
+	 * @param isLastSuffix -
+	 *            set true if there follows no other suffix. Method names will
+	 *            only be considered if true
+	 * @return ISymbol. May be null.
+	 */
+	public static ISymbol getSymbolForVariableSuffixExpr(
+			final IStructuredDocumentContext context, final String fullName,
+			final boolean isLastSuffix) {
+		String[] ids = fullName.split("\\."); //$NON-NLS-1$
+
+		// if no suffixes, only one id
+		if (ids.length < 1) {
+			ids = new String[] { fullName };
+		}
+
+		final ISymbolContextResolver symbolResolver = StructuredDocumentSymbolResolverFactory
+				.getInstance().getSymbolContextResolver(context);
+		if (symbolResolver != null) {
+			ISymbol symbol = symbolResolver.getVariable(ids[0]);
+			if (symbol instanceof IInstanceSymbol
+					&& ((IInstanceSymbol) symbol).isTypeResolved()) {
+				for (int curSuffixIdx = 1; curSuffixIdx < ids.length; curSuffixIdx++) {
+					if (isLastSuffix && curSuffixIdx == ids.length - 1
+							&& isMethodBindingExpected(context)) {
+						/*
+						 * TODO Take into acount required method signature,
+						 * since there may be different methods with the same
+						 * name
+						 */
+						return symbolResolver.getMethod((IObjectSymbol) symbol,
+								ids[curSuffixIdx]);
+					}
+
+					final ISymbol property = symbolResolver.getProperty(symbol,
+							ids[curSuffixIdx]);
+
+					if (property == null) {
+						return null;
+					}
+					symbol = property;
+				}
+				return symbol;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Tells whether method bindings are expected for the given context.
+	 * 
+	 * @param context -
+	 *            the IStructuredDocumentContext
+	 * @return true, if method bindings expected
+	 */
+	public static boolean isMethodBindingExpected(
+			final IStructuredDocumentContext context) {
+		return isMethodBindingExpected(context, null);
+	}
+
+	/**
+	 * Tells whether method bindings are expected for the given context. Will
+	 * add signatures of expected method bindings to a given list.
+	 * 
+	 * @param context -
+	 *            the IStructuredDocumentContext
+	 * @param expectedBindings -
+	 *            a list. If not null, signatures of expected method bindings
+	 *            will be appended to this list.
+	 * @return true, if method bindings expected
+	 */
+	public static boolean isMethodBindingExpected(
+			final IStructuredDocumentContext context,
+			final List expectedBindings) {
+		final IDOMContextResolver domResolver = IStructuredDocumentContextResolverFactory.INSTANCE
+				.getDOMContextResolver(context);
+
+		final Node curNode = domResolver.getNode();
+
+		if (curNode instanceof Attr) {
+			final Attr attr = (Attr) curNode;
+			final Element element = attr.getOwnerElement();
+
+			final ITaglibContextResolver taglibResolver = IStructuredDocumentContextResolverFactory.INSTANCE
+					.getTaglibContextResolver(context);
+
+			final String uri = taglibResolver.getTagURIForNodeName(element);
+
+			final List elVals = MetaDataEnabledProcessingFactory.getInstance()
+					.getAttributeValueRuntimeTypeFeatureProcessors(
+							IValidELValues.class, context, uri,
+							element.getLocalName(), attr.getLocalName());
+
+			boolean methodBindingExpected = false;
+			for (final Iterator it = elVals.iterator(); it.hasNext();) {
+				final IValidELValues validValues = (IValidELValues) it.next();
+
+				try {
+					final CompositeType type = validValues
+							.getExpectedRuntimeType();
+					if (type != null
+							&& type.getAssignmentTypeMask() == IAssignable.ASSIGNMENT_TYPE_NONE) {
+						methodBindingExpected = true;
+						if (expectedBindings != null) {
+							expectedBindings.addAll(Arrays.asList(validValues
+									.getExpectedRuntimeType().getSignatures()));
+						} else {
+							// if we don't need the method signatures, *one*
+							// expected method binding is sufficient.
+							return true;
+						}
+					}
+				} catch (final ELIsNotValidException e) {
+					// do nothing
+				}
+			}
+			return methodBindingExpected;
+		}
+		// default condition is no method binding
+		return false;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jem/BeanProxyUtil.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jem/BeanProxyUtil.java
new file mode 100644
index 0000000..e8d77e6
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jem/BeanProxyUtil.java
@@ -0,0 +1,332 @@
+package org.eclipse.jst.jsf.core.internal.jem;
+
+import org.eclipse.jem.internal.proxy.core.IBeanProxy;
+import org.eclipse.jem.internal.proxy.core.IBeanTypeProxy;
+import org.eclipse.jem.internal.proxy.core.IFieldProxy;
+import org.eclipse.jem.internal.proxy.core.IIntegerBeanProxy;
+import org.eclipse.jem.internal.proxy.core.IMethodProxy;
+import org.eclipse.jem.internal.proxy.core.IStringBeanProxy;
+import org.eclipse.jem.internal.proxy.core.ThrowableProxy;
+
+/**
+ * Convenience methods for using bean proxies
+ * 
+ * @author cbateman
+ * 
+ */
+public final class BeanProxyUtil
+{
+
+    /**
+     * A convenience wrapper for manipulating JEM proxy types
+     * 
+     */
+    public static class BeanProxyWrapper
+    {
+        private final static IBeanProxy[] NO_ARGS = new IBeanProxy[0];
+        private final static IBeanTypeProxy[] NO_ARG_TYPES = new IBeanTypeProxy[0];
+
+        private final IBeanTypeProxy _typeProxy;
+        private IBeanProxy _instance;
+
+        /**
+         * @param typeProxy
+         */
+        public BeanProxyWrapper(final IBeanTypeProxy typeProxy)
+        {
+            super();
+            _typeProxy = typeProxy;
+        }
+
+        /**
+         * Initialize a proxied instance of the type referred to by typeProxy.
+         * 
+         * @throws ProxyException
+         */
+        public void init() throws ProxyException
+        {
+            if (_instance == null)
+            {
+                try
+                {
+                    _instance = _typeProxy.newInstance();
+                }
+                catch (final ThrowableProxy e)
+                {
+                    throw new ProxyException(e);
+                }
+                catch (final NoClassDefFoundError ndfe)
+                {
+                    throw new ProxyException(ndfe);
+                }
+                catch (final ExceptionInInitializerError e)
+                {
+                    throw new ProxyException(e);
+                }
+            }
+        }
+
+        /**
+         * Re-initialize the proxied instance of typeProxy.
+         * 
+         * @throws ProxyException
+         */
+        public void reinit() throws ProxyException
+        {
+            _instance = null;
+            init();
+        }
+
+        /**
+         * <p>
+         * Call the method called methodName on the proxied instance. If
+         * args.length is 0 then the zero-argument method is found and called.
+         * </p>
+         * 
+         * @param methodName
+         * @param args
+         * @param argTypes
+         * @return the result of calling the method or null if there is no such
+         *         method.
+         * @throws ProxyException
+         */
+        public IBeanProxy call(final String methodName,
+                final IBeanProxy[] args, final IBeanTypeProxy[] argTypes)
+                throws ProxyException
+        {
+            try
+            {
+                final IMethodProxy method = (argTypes.length == 0) ? _typeProxy
+                        .getMethodProxy(methodName) : _typeProxy
+                        .getMethodProxy(methodName, argTypes);
+
+                if (method != null)
+                {
+                    return method.invoke(_instance, args);
+                }
+            }
+            catch (final ThrowableProxy tp)
+            {
+                throw new ProxyException(tp);
+            }
+            catch (final NoClassDefFoundError ndfe)
+            {
+                throw new ProxyException(ndfe);
+            }
+
+            return null;
+        }
+
+        /**
+         * Convenience method for call(methodName, new {@link IBeanProxy}[0],
+         * new {@link IBeanTypeProxy}[0])
+         * 
+         * @param methodName
+         * @return the proxied return value
+         * @throws ProxyException
+         */
+        public IBeanProxy call(final String methodName) throws ProxyException
+        {
+            return call(methodName, NO_ARGS, NO_ARG_TYPES);
+        }
+
+        /**
+         * <p>
+         * Calls the zero-argument method called 'methodName' on the proxied
+         * instance and if it results in a String return value, returns it. If
+         * the method does not return a String value, then null is returned.
+         * </p>
+         * 
+         * @param methodName
+         * @return the string value or null.
+         * @throws ProxyException
+         */
+        public String callStringMethod(final String methodName)
+                throws ProxyException
+        {
+            final IBeanProxy result = call(methodName);
+
+            if (result instanceof IStringBeanProxy)
+            {
+                return ((IStringBeanProxy) result).stringValue();
+            }
+
+            return null;
+        }
+
+        /**
+         * <p>
+         * Calls the zero-argument method called 'methodName' on the proxied
+         * instance and if it results in an Integer value, returns it. If the
+         * method does not return an integer value, then null is returned.
+         * </p>
+         * 
+         * @param methodName
+         * @return the integer value or null.
+         * @throws ProxyException
+         */
+        public Integer callIntMethod(final String methodName)
+                throws ProxyException
+        {
+            final IBeanProxy result = call(methodName, NO_ARGS, NO_ARG_TYPES);
+
+            if (result instanceof IIntegerBeanProxy)
+            {
+                return Integer.valueOf(((IIntegerBeanProxy) result).intValue());
+            }
+
+            return null;
+        }
+
+        /**
+         * Use the typeProxy for the proxied instance to try to acquire the
+         * field called fieldName of type String. Note that this won't find
+         * private fields on supertypes.
+         * 
+         * Equivalent to getStringFieldValue(fieldName, _typeProxy);
+         * 
+         * @param fieldName
+         * @return the String value of fieldName on the proxied instance or
+         *         null.
+         * @throws ProxyException
+         */
+        public String getStringFieldValue(final String fieldName)
+                throws ProxyException
+        {
+            return getStringFieldValue(fieldName, _typeProxy);
+        }
+
+        /**
+         * Use the provided typeProxy to acquire the field proxy for the field
+         * proxy called fieldName. Normally, you would use the type proxy of the
+         * instance bean, however there are cases such as acquiring the value a
+         * private field on a supertype where you need the type proxy for the
+         * super type.
+         * 
+         * @param fieldName
+         * @param typeProxy
+         * @return the string value or null.
+         * @throws ProxyException
+         */
+        public String getStringFieldValue(final String fieldName,
+                final IBeanTypeProxy typeProxy) throws ProxyException
+        {
+            final IBeanProxy value = getFieldValue(fieldName, typeProxy);
+
+            if (value instanceof IStringBeanProxy)
+            {
+                return ((IStringBeanProxy) value).stringValue();
+            }
+
+            return null;
+        }
+
+        /**
+         * @param fieldName
+         * @param typeProxy
+         * @return the declared field value on the proxied instance called
+         *         fieldName or null.
+         * @throws ProxyException
+         */
+        public IBeanProxy getFieldValue(final String fieldName,
+                final IBeanTypeProxy typeProxy) throws ProxyException
+        {
+            try
+            {
+                final IFieldProxy fieldProxy = typeProxy
+                        .getDeclaredFieldProxy(fieldName);
+
+                if (fieldProxy != null)
+                {
+                    fieldProxy.setAccessible(true);
+                    return fieldProxy.get(_instance);
+                }
+            }
+            catch (final ThrowableProxy e)
+            {
+                throw new ProxyException(e);
+            }
+            catch (final NoClassDefFoundError ndfe)
+            {
+                throw new ProxyException(ndfe);
+            }
+            
+            return null;
+        }
+
+        /**
+         * Same as {@link #getFieldValue(String, IBeanTypeProxy)} except it will
+         * climb the parent hierarchy looking for the first field called
+         * fieldName.
+         * 
+         * @param fieldName
+         * @param typeProxy
+         * @return the proxied value or null
+         * @throws ProxyException
+         */
+        public IBeanProxy getFieldValueIncludeParents(final String fieldName,
+                final IBeanTypeProxy typeProxy) throws ProxyException
+        {
+            IBeanTypeProxy curType = typeProxy;
+
+            while (curType != null)
+            {
+                final IBeanProxy field = getFieldValue(fieldName, curType);
+                if (field != null)
+                {
+                    return field;
+                }
+
+                try
+                {
+                    curType = curType.getSuperBeanTypeProxy();
+                }
+                catch (final NullPointerException npe)
+                {
+                    // suppress npe caused by getSuperBeanTypeProxy
+                    // not doing a null check on getSuperType()
+                    curType = null;
+                }
+            }
+
+            // have got to the top of hierarchy and not found the field
+            return null;
+        }
+
+        /**
+         * @return the proxied instance
+         */
+        public final IBeanProxy getBeanProxy()
+        {
+            return _instance;
+        }
+    }
+
+    /**
+     * Checked exception the wraps problems thrown by JEM proxying into a single
+     * exception
+     * 
+     */
+    public static class ProxyException extends Exception
+    {
+        private static final long serialVersionUID = -1526057761795574331L;
+
+        /**
+         * @param message
+         * @param cause
+         */
+        public ProxyException(final String message, final Throwable cause)
+        {
+            super(message, cause);
+        }
+
+        /**
+         * @param cause
+         */
+        public ProxyException(final Throwable cause)
+        {
+            super(cause);
+        }
+
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigDialogSettingData.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigDialogSettingData.java
index 93086db..90a04c8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigDialogSettingData.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryConfigDialogSettingData.java
@@ -38,12 +38,12 @@
 	
 	
 	/**
-	 * Constructor where implementation type was chosen to be CLIENT_SUPPLIED.  Created for backwards compatibilty when server supplied was not an option.
+	 * Constructor where implementation type was chosen to be USER_SPECIFIED.  Created for backwards compatibilty when server supplied was not an option.
 	 * @param implLibDeployFlag
 	 * @param compLibs
 	 */
 	public JSFLibraryConfigDialogSettingData(boolean implLibDeployFlag, String[] compLibs) {
-		this(IMPLEMENTATION_TYPE.CLIENT_SUPPLIED, implLibDeployFlag, compLibs);		
+		this(IMPLEMENTATION_TYPE.USER_SPECIFIED, implLibDeployFlag, compLibs);		
 	}
 	
 	/**
@@ -84,7 +84,7 @@
 	 */
 	public JSFLibraryInternalReference getJSFImplementationLibrary() {
 		if (selJSFLibImpl == null) {
-			// To instanciate a JSFLibraryReferenceUserDefined object from default impl lib as the saved library.  
+			// To instanciate a JSFLibraryReferenceUserSpecified object from default impl lib as the saved library.  
 			JSFLibraryInternalReference dftImplLib = jsfLibReg.getDefaultJSFImplementationLibrary(); 		
 			if (dftImplLib != null) {
 				selJSFLibImpl = new JSFLibraryInternalReference(dftImplLib.getLibrary(), 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryRegistryUtil.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryRegistryUtil.java
index 0e3c02a..131e6d3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryRegistryUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryconfig/JSFLibraryRegistryUtil.java
@@ -69,6 +69,7 @@
  * 
  * @author Justin Chen, etc. - Oracle
  */
+@SuppressWarnings("deprecation")
 public class JSFLibraryRegistryUtil {
 	private static JSFLibraryRegistryUtil instance = null;	
 	
@@ -328,11 +329,10 @@
 	 * 
 	 * @param oldId
 	 * @param newId
-	 * @param removeAndAddBecauseOfRename
 	 * @param monitor
 	 * @throws JavaModelException
 	 */
-	public static void rebindClasspathContainerEntries(String oldId, String newId, boolean removeAndAddBecauseOfRename, IProgressMonitor monitor) throws JavaModelException {
+	public static void rebindClasspathContainerEntries(String oldId, String newId, IProgressMonitor monitor) throws JavaModelException {
 		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 		IJavaProject[] projects= JavaCore.create(root).getJavaProjects();
 		IPath containerPath= new Path(JSFLibraryConfigurationHelper.JSF_LIBRARY_CP_CONTAINER_ID).append(newId);
@@ -340,7 +340,7 @@
 		
 		JSFLibrary lib = JSFLibraryRegistryUtil.getInstance().getJSFLibraryRegistry().getJSFLibraryByID(newId);
 		List affectedProjects= new ArrayList();
-		removeAndAddBecauseOfRename = (!oldId.equals(newId));
+		boolean removeAndAddBecauseOfRename = (!oldId.equals(newId));
 		// find all projects using the old container name...
 		for (int i= 0; i < projects.length; i++) {
 			IJavaProject project= projects[i];
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/JSFLibraryRegistryPackage.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/JSFLibraryRegistryPackage.java
index ac28f41..07ba32e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/JSFLibraryRegistryPackage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/JSFLibraryRegistryPackage.java
@@ -31,6 +31,7 @@
  * @model kind="package"
  * @generated
  */
+@SuppressWarnings("hiding")
 public interface JSFLibraryRegistryPackage extends EPackage{
 	/**
 	 * <!-- begin-user-doc -->
@@ -592,7 +593,7 @@
 		 * @see org.eclipse.jst.jsf.core.internal.jsflibraryregistry.impl.JSFLibraryRegistryPackageImpl#getJSFLibraryRegistry()
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EClass JSF_LIBRARY_REGISTRY = eINSTANCE.getJSFLibraryRegistry();
 
 		/**
@@ -601,7 +602,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
         EAttribute JSF_LIBRARY_REGISTRY__DEFAULT_IMPLEMENTATION_ID = eINSTANCE.getJSFLibraryRegistry_DefaultImplementationID();
 
 		/**
@@ -610,7 +611,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EReference JSF_LIBRARY_REGISTRY__JSF_LIBRARIES = eINSTANCE.getJSFLibraryRegistry_JSFLibraries();
 
 		/**
@@ -619,7 +620,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EReference JSF_LIBRARY_REGISTRY__PLUGIN_PROVIDED_JSF_LIBRARIES = eINSTANCE.getJSFLibraryRegistry_PluginProvidedJSFLibraries();
 
 		/**
@@ -630,7 +631,7 @@
 		 * @see org.eclipse.jst.jsf.core.internal.jsflibraryregistry.impl.JSFLibraryRegistryPackageImpl#getJSFLibrary()
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EClass JSF_LIBRARY = eINSTANCE.getJSFLibrary();
 
 		/**
@@ -639,7 +640,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EAttribute JSF_LIBRARY__ID = eINSTANCE.getJSFLibrary_ID();
 
 		/**
@@ -648,7 +649,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EAttribute JSF_LIBRARY__NAME = eINSTANCE.getJSFLibrary_Name();
 
 		/**
@@ -657,7 +658,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EAttribute JSF_LIBRARY__JSF_VERSION = eINSTANCE.getJSFLibrary_JSFVersion();
 
 		/**
@@ -666,7 +667,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EAttribute JSF_LIBRARY__DEPLOYED = eINSTANCE.getJSFLibrary_Deployed();
 
 		/**
@@ -675,7 +676,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EAttribute JSF_LIBRARY__IMPLEMENTATION = eINSTANCE.getJSFLibrary_Implementation();
 
 		/**
@@ -684,7 +685,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EReference JSF_LIBRARY__ARCHIVE_FILES = eINSTANCE.getJSFLibrary_ArchiveFiles();
 
 		/**
@@ -695,7 +696,7 @@
 		 * @see org.eclipse.jst.jsf.core.internal.jsflibraryregistry.impl.JSFLibraryRegistryPackageImpl#getArchiveFile()
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EClass ARCHIVE_FILE = eINSTANCE.getArchiveFile();
 
 		/**
@@ -704,7 +705,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EAttribute ARCHIVE_FILE__RELATIVE_TO_WORKSPACE = eINSTANCE.getArchiveFile_RelativeToWorkspace();
 
 		/**
@@ -713,7 +714,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EAttribute ARCHIVE_FILE__SOURCE_LOCATION = eINSTANCE.getArchiveFile_SourceLocation();
 
 		/**
@@ -722,7 +723,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EAttribute ARCHIVE_FILE__RELATIVE_DEST_LOCATION = eINSTANCE.getArchiveFile_RelativeDestLocation();
 
 		/**
@@ -731,7 +732,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EReference ARCHIVE_FILE__JSF_LIBRARY = eINSTANCE.getArchiveFile_JSFLibrary();
 
 		/**
@@ -742,7 +743,7 @@
 		 * @see org.eclipse.jst.jsf.core.internal.jsflibraryregistry.impl.JSFLibraryRegistryPackageImpl#getPluginProvidedJSFLibrary()
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EClass PLUGIN_PROVIDED_JSF_LIBRARY = eINSTANCE.getPluginProvidedJSFLibrary();
 
 		/**
@@ -751,7 +752,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EAttribute PLUGIN_PROVIDED_JSF_LIBRARY__PLUGIN_ID = eINSTANCE.getPluginProvidedJSFLibrary_PluginID();
 
 		/**
@@ -760,7 +761,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		@SuppressWarnings("hiding")
+//		@SuppressWarnings("hiding")
 		EAttribute PLUGIN_PROVIDED_JSF_LIBRARY__LABEL = eINSTANCE.getPluginProvidedJSFLibrary_Label();
 
 		/**
@@ -771,7 +772,7 @@
 		 * @see org.eclipse.jst.jsf.core.internal.jsflibraryregistry.impl.JSFLibraryRegistryPackageImpl#getJSFVersion()
 		 * @generated
 		 */
-        @SuppressWarnings("hiding")
+//        @SuppressWarnings("hiding")
 		EEnum JSF_VERSION = eINSTANCE.getJSFVersion();
 
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/adapter/MaintainDefaultImplementationAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/adapter/MaintainDefaultImplementationAdapter.java
index 6f6ff66..f1c76ad 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/adapter/MaintainDefaultImplementationAdapter.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/adapter/MaintainDefaultImplementationAdapter.java
@@ -112,7 +112,7 @@
 	 * 
 	 * @param library JSFLibrary instance
 	 */
-	protected void implementationFlagSet(JSFLibrary library) {
+	private void implementationFlagSet(JSFLibrary library) {
 		JSFLibraryRegistry jsfLibReg = JSFLibraryRegistryUtil.getInstance().getJSFLibraryRegistry();
 		if (jsfLibReg != null) {
 			JSFLibrary defaultImpl = jsfLibReg.getDefaultImplementation();
@@ -123,8 +123,8 @@
 				jsfLibReg.setDefaultImplementation(library);
 			} else if (
 					!library.isImplementation() &&
-					(defaultImpl != null && library.getID() == defaultImpl.getID())
-			) {
+					(defaultImpl != null && library.getID().equals(defaultImpl.getID())))
+			{
 				setNewDefaultImplementation();
 			}
 		}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/impl/ArchiveFileImpl.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/impl/ArchiveFileImpl.java
index a0c9407..6242abe 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/impl/ArchiveFileImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/jsflibraryregistry/impl/ArchiveFileImpl.java
@@ -366,7 +366,7 @@
 	 */
 	public boolean equals(Object object) {
 		boolean equal = false;
-		if (object != null && object instanceof ArchiveFile) {
+		if (object instanceof ArchiveFile) {
 			String resolvedSourceLocation = getResolvedSourceLocation();
 			String objResolvedSourceLocation = ((ArchiveFile)object).getResolvedSourceLocation();
 			if (resolvedSourceLocation == null && objResolvedSourceLocation == null) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/launch/JSFFileURL.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/launch/JSFFileURL.java
index 5db092d..bb3192d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/launch/JSFFileURL.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/launch/JSFFileURL.java
@@ -93,6 +93,7 @@
 			Iterator mappings = servlet.getMappings().iterator();
 			ServletMapping map = null;
 			String foundFileExtension = null;
+			String foundPrefixMapping = null;
 			while (mappings.hasNext()){
 				map = (ServletMapping)mappings.next();
 				
@@ -100,14 +101,15 @@
 				if (foundFileExtension != null && canUseExtensionMapping) {
 					return existingURL.removeFileExtension().addFileExtension(foundFileExtension);
 				}
-					
-				String foundPrefixMapping = JSFUtils11.getPrefixMapping(map);
-				if (foundPrefixMapping != null){						
-					return new Path(foundPrefixMapping).append(existingURL); 
+				
+				if (foundPrefixMapping == null){
+					foundPrefixMapping = JSFUtils11.getPrefixMapping(map);				
 				}
 				
 			}
-			
+			if (foundPrefixMapping != null)				
+				return new Path(foundPrefixMapping).append(existingURL); 
+				
 			if (! canUseExtensionMapping && foundFileExtension != null){
 				//we could prompt user that this may not work...
 				//for now we will return the extension mapping
@@ -172,7 +174,8 @@
 	private boolean isValidKnownExtension(String fileExtension) {
 		if ((	fileExtension.equalsIgnoreCase("jsp") ||  //$NON-NLS-1$
 				fileExtension.equalsIgnoreCase("jspx") ||  //$NON-NLS-1$
-				fileExtension.equalsIgnoreCase("jsf"))) //$NON-NLS-1$
+				fileExtension.equalsIgnoreCase("jsf") || //$NON-NLS-1$
+				fileExtension.equalsIgnoreCase("xhtml"))) //$NON-NLS-1$
 			return true;
 
 		return false;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/AbstractJSFFacetInstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/AbstractJSFFacetInstallDelegate.java
deleted file mode 100644
index 42523a2..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/AbstractJSFFacetInstallDelegate.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 Oracle Corporation.
- * 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:
- *    Gerry Kessler - initial API and implementation
- *******************************************************************************/ 
-
-package org.eclipse.jst.jsf.core.internal.project.facet;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IClasspathAttribute;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jst.j2ee.classpathdep.ClasspathDependencyUtil;
-import org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants;
-import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
-import org.eclipse.jst.jsf.core.internal.jsflibraryconfig.JSFLibraryInternalReference;
-import org.eclipse.jst.jsf.core.internal.jsflibraryconfig.JSFLibraryRegistryUtil;
-import org.eclipse.jst.jsf.core.jsflibraryconfiguration.JSFLibraryConfigurationHelper;
-import org.eclipse.wst.common.componentcore.ComponentCore;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.project.facet.core.IDelegate;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-/**
- * Abstract JSF Facet Install Delegate for WTP faceted web projects.
- * 
- * Uses <code>com.eclispe.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider<code> for model
- * 	 <li> concrete delegat creates JSF configuration file if not present
- * 	 <li> concrete delegate updates web app for: servlet, servlet-mapping and context-params
- * 	 <li> adds implementation jars to WEB-INF/lib if user requests
- * 
- * @see org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider
- */
-public abstract class AbstractJSFFacetInstallDelegate implements IDelegate {
-
-	public void execute(final IProject project, final IProjectFacetVersion fv,
-			final Object cfg, final IProgressMonitor monitor)
-
-	throws CoreException
-
-	{
-
-		if (monitor != null) {
-			monitor.beginTask("", 1); //$NON-NLS-1$
-		}
-
-		try {
-			IDataModel config = null;
-
-			if (cfg != null) {
-				config = (IDataModel) cfg;
-			} else {
-				//FIXME: how would we hit this???
-//				config = new JSFFacetInstallConfig();
-//				config.setJsfImplID(jsfImplID);
-			}
-			
-			// Create JSF Libs as classpath containers and set WTP dependencies as required					
-			createClasspathEntries(project, config, monitor);
-			
-			// Create config file
-			createConfigFile(project, fv, config, monitor);
-
-			// Update web model
-			createServletAndModifyWebXML(project, config, monitor);
-
-			if (monitor != null) {
-				monitor.worked(1);
-			}
-
-		} finally {
-			if (monitor != null) {
-				monitor.done();
-			}
-		}
-	}
-
-	/**
-	 * Adds the JSF Library references specified in the wizard to the project as classpath containers.
-	 * Marks the containers as J2EE module dependencies as required
-	 * 
-	 * @param project
-	 * @param config
-	 * @param monitor
-	 */
-	protected void createClasspathEntries(IProject project, IDataModel config, IProgressMonitor monitor) {
-		IJavaProject javaProject = JavaCore.create(project);	
-		List cpEntries = new ArrayList();
-		try {
-			for (int i=0;i<javaProject.getRawClasspath().length;i++){
-				cpEntries.add(javaProject.getRawClasspath()[i]);
-			}
-		} catch (JavaModelException e) {
-			JSFCorePlugin.log(e, "Unable to read classpath"); //$NON-NLS-1$
-		}
-		
-		IPath path, cp = null;
-		IClasspathEntry entry = null;
-		JSFLibraryInternalReference libref = null;
-		
-		//Implementation
-		if (config.getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE_PROPERTY_NAME) 
-				== IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE.CLIENT_SUPPLIED){
-			cp = new Path(JSFLibraryConfigurationHelper.JSF_LIBRARY_CP_CONTAINER_ID);		
-			libref = (JSFLibraryInternalReference)config.getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION);
-			path = cp.append(new Path(libref.getID()));
-			entry = getNewCPEntry(path, libref);		
-			cpEntries.add(entry);
-		}
-
-		JSFLibraryInternalReference[] compLibs = (JSFLibraryInternalReference[])config.getProperty(IJSFFacetInstallDataModelProperties.COMPONENT_LIBRARIES);
-		for (int i=0;i<compLibs.length;i++){
-			libref = compLibs[i];		
-			cp = new Path(JSFLibraryConfigurationHelper.JSF_LIBRARY_CP_CONTAINER_ID);		
-			path = cp.append(new Path(libref.getID()));
-			entry = getNewCPEntry(path, libref);
-			if (entry != null)
-				cpEntries.add(entry);
-		}	
-
-		JSFLibraryRegistryUtil.setRawClasspath(javaProject, cpEntries, monitor);
-	}
-
-	/**
-	 * @param path
-	 * @param lib
-	 * @return creates new IClasspathEntry with WTP dependency attribute set, if required
-	 */
-	protected IClasspathEntry getNewCPEntry(IPath path, JSFLibraryInternalReference lib) {
-		
-		IClasspathEntry entry = null;
-		if (lib.isCheckedToBeDeployed()){
-			IClasspathAttribute depAttrib = JavaCore.newClasspathAttribute(IClasspathDependencyConstants.CLASSPATH_COMPONENT_DEPENDENCY,
-					 ClasspathDependencyUtil.getDefaultRuntimePath(true).toString());
-			entry = JavaCore.newContainerEntry(path,null, new IClasspathAttribute[]{depAttrib}, true);
-		}
-		else {
-			entry = JavaCore.newContainerEntry(path);
-		}
-		
-		return entry;
-	}
-
-	
-	/**
-	 * Create the faces configuration file
-	 * @param project
-	 * @param fv
-	 * @param config
-	 * @param monitor
-	 */
-	protected abstract void createConfigFile(final IProject project,
-			final IProjectFacetVersion fv, final IDataModel config,
-			IProgressMonitor monitor) ;
-	
-	/**
-	 * Create servlet and URL mappings and update the webapp
-	 * @param project
-	 * @param config
-	 * @param monitor
-	 */
-	protected abstract void createServletAndModifyWebXML(IProject project,
-			final IDataModel config, IProgressMonitor monitor);
-		
-
-	/**
-	 * @param config
-	 * @return list of URL patterns from the datamodel
-	 */
-	protected List getServletMappings(IDataModel config) {
-		List mappings = new ArrayList();
-		String[] patterns = (String[])config.getProperty(IJSFFacetInstallDataModelProperties.SERVLET_URL_PATTERNS);
-		for (int i = 0; i < patterns.length; i++) {
-			String pattern = patterns[i];
-			mappings.add(pattern);
-		}
-
-		return mappings;
-	}
-
-	/**
-	 * @param project
-	 * @param jsfConfigPath
-	 * @return absolute IPath to jsfConfig
-	 */
-	protected IPath resolveConfigPath(IProject project, String jsfConfigPath) {
-		return ComponentCore.createComponent(project).getRootFolder()
-				.getUnderlyingFolder().getRawLocation().append(
-						new Path(jsfConfigPath));
-
-	}
-	
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/AbstractJSFFacetUninstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/AbstractJSFFacetUninstallDelegate.java
deleted file mode 100644
index 603ace1..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/AbstractJSFFacetUninstallDelegate.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 Oracle Corporation.
- * 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:
- *    Gerry Kessler - initial API and implementation
- *******************************************************************************/ 
-package org.eclipse.jst.jsf.core.internal.project.facet;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
-import org.eclipse.jst.jsf.core.jsflibraryconfiguration.JSFLibraryConfigurationHelper;
-import org.eclipse.wst.common.project.facet.core.IDelegate;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-/**
- * Abstract JSF Facet Uninstall Delegate for WTP faceted projects.
- *	
- *	<li> concrete class should remove JSF servlet, servlet-mappings and context-params
- *	<li> leaves JSF configuration files on disk
- *  <li> removes JSF classpath containers
- *  
- * @author Gerry Kessler - Oracle
- * @since M1
- */
-public abstract class AbstractJSFFacetUninstallDelegate implements IDelegate {
-
-	public void execute(IProject project, IProjectFacetVersion fv,
-			Object config, IProgressMonitor monitor) throws CoreException {
-		{
-
-			if (monitor != null) {
-				monitor.beginTask("", 1); //$NON-NLS-1$
-			}
-
-			try {
-
-				// Remove JSF Libraries
-				removeJSFLibaries(project, monitor);
-
-				// remove servlet stuff from web.xml
-				uninstallJSFReferencesFromWebApp(project, monitor);
-
-				if (monitor != null) {
-					monitor.worked(1);
-				}
-			} finally {
-				if (monitor != null) {
-					monitor.done();
-				}
-			}
-		}
-	}
-
-	/**
-	 * Removes JSF Lib CP Containers from project
-	 * @param project
-	 * @param monitor
-	 */
-	protected void removeJSFLibaries(IProject project, IProgressMonitor monitor) {
-		 final IJavaProject jproj = JavaCore.create(project);
-		 List keptEntries = new ArrayList();
-		 try {
-			IClasspathEntry[] entries = jproj.getRawClasspath();
-			  keptEntries = new ArrayList();
-			 for (int i=0;i<entries.length;i++){
-				 IClasspathEntry entry = entries[i];
-				 if (entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER && 
-						 ! entry.getPath().segment(0)
-						 	.equals(JSFLibraryConfigurationHelper.JSF_LIBRARY_CP_CONTAINER_ID))
-					 keptEntries.add(entry);
-			 }
-		} catch (JavaModelException e) {
-			JSFCorePlugin.log(e, "Cannot get classpath entries to remove JSF Libraries for: "+project.getName()); //$NON-NLS-1$
-		}
-		 
-		 if (keptEntries.size() > 0){
-			 try {
-				jproj.setRawClasspath((IClasspathEntry[])keptEntries.toArray(new IClasspathEntry[0]), monitor);
-			} catch (JavaModelException e) {
-				JSFCorePlugin.log(e, "Exception occured while removing JSF Libraries during JSF Facet uninstall"); //$NON-NLS-1$
-			}
-		 }
-	
-		
-	}
-
-	/**
-	 * Uninstall JSF references: servlet, 
-	 * @param project
-	 * @param monitor
-	 */
-	protected abstract void uninstallJSFReferencesFromWebApp(IProject project,
-			IProgressMonitor monitor);
-
-
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/IJSFFacetInstallDataModelProperties.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/IJSFFacetInstallDataModelProperties.java
index ad03d47..8667868 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/IJSFFacetInstallDataModelProperties.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/IJSFFacetInstallDataModelProperties.java
@@ -89,7 +89,13 @@
     	 */
     	SERVER_SUPPLIED,
     	/**
-    	 * Client supplied
+    	 * Not supplied by the server.  The user is specifiying.
+    	 */
+    	USER_SPECIFIED,
+    	
+    	/**
+    	 * Not supplied by the server.  The user is specifiying.  Same as USER_SPECIFIED.
+    	 * @deprecated use USER_SPECIFIED
     	 */
     	CLIENT_SUPPLIED;
     	
@@ -102,8 +108,8 @@
     			return "UNKNOWN"; //$NON-NLS-1$
     		if (type ==  SERVER_SUPPLIED)
     			return "SERVER_SUPPLIED";//$NON-NLS-1$
-    		if (type == CLIENT_SUPPLIED)
-    			return "CLIENT_SUPPLIED";//$NON-NLS-1$
+    		if (type == USER_SPECIFIED || type ==CLIENT_SUPPLIED )
+    			return "USER_SPECIFIED";//$NON-NLS-1$
     		return "UNKNOWN"; //$NON-NLS-1$
     	}
     	
@@ -116,9 +122,10 @@
     			return UNKNOWN;
     		if (type.equals("SERVER_SUPPLIED"))//$NON-NLS-1$
     			return SERVER_SUPPLIED;
-    		if (type.equals("CLIENT_SUPPLIED"))//$NON-NLS-1$
-    			return CLIENT_SUPPLIED;
+    		if (type.equals("USER_SPECIFIED") || type.equals("CLIENT_SUPPLIED"))//$NON-NLS-1$// $NON-NLS-2$
+    			return USER_SPECIFIED;
     		return UNKNOWN; 
     	}
+    	
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetDefaultVersionProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetDefaultVersionProvider.java
new file mode 100644
index 0000000..549f050
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetDefaultVersionProvider.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.jst.jsf.core.internal.project.facet;
+
+import org.eclipse.jst.jsf.core.IJSFCoreConstants;
+import org.eclipse.wst.common.project.facet.core.IDefaultVersionProvider;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+
+/**
+ * Provides the default JSF project facet version.
+ * Currently always returns "1.1" facet version.   Eventually should be computed from the project's facet context.
+ */
+public final class JSFFacetDefaultVersionProvider implements IDefaultVersionProvider {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.common.project.facet.core.IDefaultVersionProvider#getDefaultVersion()
+	 */
+	public IProjectFacetVersion getDefaultVersion() {		
+		return ProjectFacetsManager.getProjectFacet(IJSFCoreConstants.JSF_CORE_FACET_ID).getVersion(IJSFCoreConstants.FACET_VERSION_1_1);
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
index 1c7b7db..a4d3ef0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDataModelProvider.java
@@ -112,7 +112,7 @@
 			}
 		}
 		else if (name.equals(IMPLEMENTATION)) {
-			if (getProperty(IMPLEMENTATION_TYPE_PROPERTY_NAME) == IMPLEMENTATION_TYPE.CLIENT_SUPPLIED) {
+			if (getProperty(IMPLEMENTATION_TYPE_PROPERTY_NAME) == IMPLEMENTATION_TYPE.USER_SPECIFIED) {
 				JSFLibraryInternalReference lib = (JSFLibraryInternalReference)getProperty(IMPLEMENTATION);
 				IStatus status = validateImpl(lib.getLibrary());
 				if (!OK_STATUS.equals(status))
@@ -227,7 +227,7 @@
 		IStatus status = null;
 		
 		JSFLibraryInternalReference ref = null;
-		if (getProperty(IMPLEMENTATION_TYPE_PROPERTY_NAME) == IMPLEMENTATION_TYPE.CLIENT_SUPPLIED) {
+		if (getProperty(IMPLEMENTATION_TYPE_PROPERTY_NAME) == IMPLEMENTATION_TYPE.USER_SPECIFIED) {
 			ref = ((JSFLibraryInternalReference)getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION));
 			if (ref != null){
 				status = checkForDupeArchiveFiles(jars, ((JSFLibraryInternalReference)getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION)).getLibrary());
@@ -261,6 +261,9 @@
 
 	private IProject getProject(){
 		String projName = (String)getProperty(FACET_PROJECT_NAME);
+		if (projName == null || "".equals(projName))
+			return null;
+		
 		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projName);
 		return project;
 	}
@@ -285,13 +288,14 @@
 		return OK_STATUS;
 	}
 	
-	private IPath getProjectPath() {
-		String projName = (String)getProperty(FACET_PROJECT_NAME);
-		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projName);
-		if (project.exists()){
+	private IPath getProjectPath() {		
+		IProject project = getProject();
+		if (project == null)
+			return null;
+		else if (project.exists())
 			return project.getLocation();
-		} 
 		
+		String projName = (String)getProperty(FACET_PROJECT_NAME);
 		IDataModel projModel = (IDataModel)getProperty(MASTER_PROJECT_DM);
 		if (projModel.getBooleanProperty(IProjectCreationPropertiesNew.USE_DEFAULT_LOCATION)){
 			return new Path(projModel.getStringProperty(IProjectCreationPropertiesNew.PROJECT_LOCATION)).append(projName);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java
new file mode 100644
index 0000000..623b4d5
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java
@@ -0,0 +1,359 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * 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:
+ *    Gerry Kessler - initial API and implementation
+ *******************************************************************************/ 
+
+package org.eclipse.jst.jsf.core.internal.project.facet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.IClasspathAttribute;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jst.common.project.facet.core.ClasspathHelper;
+import org.eclipse.jst.j2ee.classpathdep.ClasspathDependencyUtil;
+import org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants;
+import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
+import org.eclipse.jst.j2ee.model.IModelProvider;
+import org.eclipse.jst.j2ee.model.ModelProviderManager;
+import org.eclipse.jst.javaee.web.Servlet;
+import org.eclipse.jst.javaee.web.WebApp;
+import org.eclipse.jst.jsf.core.IJSFCoreConstants;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.core.internal.jsflibraryconfig.JSFLibraryInternalReference;
+import org.eclipse.jst.jsf.core.internal.jsflibraryconfig.JSFLibraryRegistryUtil;
+import org.eclipse.jst.jsf.core.jsflibraryconfiguration.JSFLibraryConfigurationHelper;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+import org.eclipse.wst.common.project.facet.core.IDelegate;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+
+/**
+ * JSF Facet Install Delegate for WTP faceted web projects.  Deals with 2.3, 2.4 and 2.5 web app models.
+ * 
+ * Uses <code>com.eclispe.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider<code> for model
+ * 	 <li> creates JSF configuration file if not already present.  It will not attempt to upgrade or downgrade the version if there is a mismatch.
+ * 	 <li> updates web.xml for: servlet, servlet-mapping and context-param
+ * 	 <li> adds implementation jars to WEB-INF/lib if user requests
+ * 
+ * @see org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider
+ * @since 1.0
+ */
+public final class JSFFacetInstallDelegate implements IDelegate {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.common.project.facet.core.IDelegate#execute(org.eclipse.core.resources.IProject, org.eclipse.wst.common.project.facet.core.IProjectFacetVersion, java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void execute(final IProject project, final IProjectFacetVersion fv,
+			final Object cfg, final IProgressMonitor monitor)
+			throws CoreException
+
+	{
+
+		if (monitor != null) {
+			monitor.beginTask("", 1); //$NON-NLS-1$
+		}
+
+		try {
+			IDataModel config = null;
+
+			if (cfg != null) {
+				config = (IDataModel) cfg;
+			} else {
+				throw new CoreException(
+						new Status(IStatus.ERROR, JSFCorePlugin.PLUGIN_ID,
+								"Internal Error creating JSF Facet.  Missing configuration."));
+			}
+
+			// Create JSF Libs as classpath containers and set WTP dependencies
+			// as required
+			createClasspathEntries(project, fv, config, monitor);
+
+			// Create config file
+			createConfigFile(project, fv, config, monitor);
+
+			// Update web model
+			createServletAndModifyWebXML(project, config, monitor);
+
+			if (monitor != null) {
+				monitor.worked(1);
+			}
+
+		} finally {
+			if (monitor != null) {
+				monitor.done();
+			}
+		}
+	}
+
+	/**
+	 * Adds the JSF Library references specified in the wizard to the project as
+	 * classpath containers. Marks the containers as J2EE module dependencies as
+	 * required
+	 * 
+	 * @param project
+	 * @param config
+	 * @param monitor
+	 */
+	private void createClasspathEntries(final IProject project, final IProjectFacetVersion fv, final IDataModel config, final IProgressMonitor monitor) {
+		IJavaProject javaProject = JavaCore.create(project);	
+		List cpEntries = new ArrayList();
+		try {
+			for (int i=0;i<javaProject.getRawClasspath().length;i++){
+				cpEntries.add(javaProject.getRawClasspath()[i]);
+			}
+		} catch (JavaModelException e) {
+			JSFCorePlugin.log(e, "Unable to read classpath"); //$NON-NLS-1$
+		}
+		
+		IPath path, cp = null;
+		IClasspathEntry entry = null;
+		JSFLibraryInternalReference libref = null;
+		
+		//Implementation
+		if (config.getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE_PROPERTY_NAME) 
+				== IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE.USER_SPECIFIED){
+			cp = new Path(JSFLibraryConfigurationHelper.JSF_LIBRARY_CP_CONTAINER_ID);		
+			libref = (JSFLibraryInternalReference)config.getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION);
+			path = cp.append(new Path(libref.getID()));
+			entry = getNewCPEntry(path, libref);		
+			cpEntries.add(entry);
+		} 
+
+		JSFLibraryInternalReference[] compLibs = (JSFLibraryInternalReference[])config.getProperty(IJSFFacetInstallDataModelProperties.COMPONENT_LIBRARIES);
+		for (int i=0;i<compLibs.length;i++){
+			libref = compLibs[i];		
+			cp = new Path(JSFLibraryConfigurationHelper.JSF_LIBRARY_CP_CONTAINER_ID);		
+			path = cp.append(new Path(libref.getID()));
+			entry = getNewCPEntry(path, libref);
+			if (entry != null)
+				cpEntries.add(entry);
+		}	
+
+		JSFLibraryRegistryUtil.setRawClasspath(javaProject, cpEntries, monitor);
+	
+		//allow for the raw classpath to be set from JSF Libs before setting the server supplied impl libs from the server, if available
+		if (config.getProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE_PROPERTY_NAME) 
+				== IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE.SERVER_SUPPLIED) {
+			try {
+				ClasspathHelper.removeClasspathEntries(project, fv);
+				ClasspathHelper.addClasspathEntries(project, fv);
+			} catch (CoreException e) {
+				JSFCorePlugin.log(IStatus.ERROR, "Unable to add server supplied implementation to the classpath.", e);//$NON-NLS-1$
+			}
+		}
+		
+	}
+
+	/**
+	 * @param path
+	 * @param lib
+	 * @return creates new IClasspathEntry with WTP dependency attribute set, if required
+	 */
+	private IClasspathEntry getNewCPEntry(final IPath path, final JSFLibraryInternalReference lib) {
+		
+		IClasspathEntry entry = null;
+		if (lib.isCheckedToBeDeployed()){
+			IClasspathAttribute depAttrib = JavaCore.newClasspathAttribute(IClasspathDependencyConstants.CLASSPATH_COMPONENT_DEPENDENCY,
+					 ClasspathDependencyUtil.getDefaultRuntimePath(true).toString());
+			entry = JavaCore.newContainerEntry(path,null, new IClasspathAttribute[]{depAttrib}, true);
+		}
+		else {
+			entry = JavaCore.newContainerEntry(path);
+		}
+		
+		return entry;
+	}		
+
+	/**
+	 * @param config
+	 * @return list of URL patterns from the datamodel
+	 */
+	private List getServletMappings(final IDataModel config) {
+		List mappings = new ArrayList();
+		String[] patterns = (String[])config.getProperty(IJSFFacetInstallDataModelProperties.SERVLET_URL_PATTERNS);
+		for (int i = 0; i < patterns.length; i++) {
+			String pattern = patterns[i];
+			mappings.add(pattern);
+		}
+
+		return mappings;
+	}
+
+	/**
+	 * @param project
+	 * @param jsfConfigPath
+	 * @return absolute IPath to jsfConfig
+	 */
+	private IPath resolveConfigPath(final IProject project, final String jsfConfigPath) {
+		return ComponentCore.createComponent(project).getRootFolder()
+				.getUnderlyingFolder().getRawLocation().append(
+						new Path(jsfConfigPath));
+
+	}
+
+	/**
+	 * Create the faces configuration file.  If the file already exist, then the file is left alone.
+	 * @param project
+	 * @param fv
+	 * @param config
+	 * @param monitor
+	 */
+	private void createConfigFile(final IProject project,
+			final IProjectFacetVersion fv, final IDataModel config,
+			final IProgressMonitor monitor) {
+
+
+		final IPath configPath = resolveConfigPath(project, config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH));
+		try {
+			// do not overwrite if the file exists
+			if (!configPath.toFile().exists()) {
+				final IWorkspaceRunnable op = new IWorkspaceRunnable(){
+					public void run(IProgressMonitor monitor_inner) throws CoreException{ 
+						if (shouldUseJ2EEConfig(fv)){
+							JSFUtils11.createConfigFile(fv.getVersionString(),
+									configPath);
+						} else {
+							JSFUtils12.createConfigFile(fv.getVersionString(),
+									configPath);
+						}
+						project.refreshLocal(IResource.DEPTH_INFINITE, monitor_inner);
+					}
+
+					private boolean shouldUseJ2EEConfig(final IProjectFacetVersion facetVersion) {
+						if (IJSFCoreConstants.FACET_VERSION_1_1.equals(facetVersion.getVersionString()))
+						{
+							return true;
+						}
+						return false;
+					}
+				};
+				op.run(monitor);
+			}
+		} catch (CoreException e) {
+			JSFCorePlugin.log(e, "Exception occured while creating faces-config.xml");//$NON-NLS-1$
+		}
+
+	}
+
+	/**
+	 * Create servlet and URL mappings and update the webapp
+	 * @param project
+	 * @param config
+	 * @param monitor
+	 */
+	private void createServletAndModifyWebXML(final IProject project,
+			final IDataModel config, final IProgressMonitor monitor) {
+		
+		IModelProvider provider = ModelProviderManager.getModelProvider(project); 
+		Object webAppObj = provider.getModelObject();
+		if (webAppObj == null){
+			JSFCorePlugin.log(IStatus.ERROR, project.getName()+": unable to configure web module for JavaServer Faces"); //$NON-NLS-1$
+			return;
+		}			
+		
+		IPath webXMLPath = new Path("WEB-INF").append("web.xml");
+		if (JSFUtils12.isWebApp25(webAppObj)) {			
+			final WebApp webApp = (WebApp)webAppObj;
+			provider.modify(new UpdateWebXMLForJavaEE(webApp, config), webXMLPath); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		else {//must be 2.3 or 2.4
+			final org.eclipse.jst.j2ee.webapplication.WebApp webApp = (org.eclipse.jst.j2ee.webapplication.WebApp)webAppObj;
+			provider.modify(new UpdateWebXMLForJ2EE(webApp, config), webXMLPath); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+
+	}
+	
+	private class UpdateWebXMLForJavaEE implements Runnable {
+		private WebApp webApp;
+		private IDataModel config;
+		
+		UpdateWebXMLForJavaEE(final WebApp webApp, final IDataModel config){
+			this.webApp = webApp;
+			this.config = config;
+		}
+		
+		public void run() {
+
+			// create or update servlet ref
+			Servlet servlet = JSFUtils12.findJSFServlet(webApp);// check to see
+																// if already
+// No longer removing any old mappings on install - see 194919 															// present
+//			if (servlet != null) {
+//				// remove old mappings
+//				JSFUtils12.removeURLMappings(webApp, servlet);
+//			}
+			
+			servlet = JSFUtils12
+					.createOrUpdateServletRef(webApp, config, servlet);
+	
+			// init mappings
+			List listOfMappings = getServletMappings(config);
+			JSFUtils12.setUpURLMappings(webApp, listOfMappings, servlet);
+	
+			// setup context params
+			JSFUtils12.setupConfigFileContextParamForV2_5(webApp, config);
+		}
+	}
+	
+	private class UpdateWebXMLForJ2EE implements Runnable {
+		private org.eclipse.jst.j2ee.webapplication.WebApp webApp;
+		private IDataModel config;
+		
+		UpdateWebXMLForJ2EE(final org.eclipse.jst.j2ee.webapplication.WebApp webApp, final IDataModel config){
+			this.webApp = webApp;
+			this.config = config;
+		}
+		
+		public void run() {
+			// create or update servlet ref
+			org.eclipse.jst.j2ee.webapplication.Servlet servlet = JSFUtils11.findJSFServlet(webApp);// check to see
+																// if already
+																// present
+			
+// No longer removing any old mappings on install - see 194919 
+//			if (servlet != null) {
+//				// remove old mappings
+//				JSFUtils11.removeURLMappings(webApp, servlet);
+//			}
+			
+			servlet = JSFUtils11
+					.createOrUpdateServletRef(webApp, config, servlet);
+	
+			// init mappings
+			List listOfMappings = getServletMappings(config);
+			JSFUtils11.setUpURLMappings(webApp, listOfMappings, servlet);
+	
+			// setup context params
+			setupContextParams(webApp, config);
+		}
+		
+		private void setupContextParams(final org.eclipse.jst.j2ee.webapplication.WebApp webApp, final IDataModel config) {
+			if (webApp.getVersionID() == J2EEVersionConstants.WEB_2_3_ID)//shouldn't have to do it this way, but that's the way it goes 119442
+				JSFUtils11.setupConfigFileContextParamForV2_3(webApp, config);
+			else 
+				JSFUtils11.setupConfigFileContextParamForV2_4(webApp, config);
+		}
+	}
+
+
+	
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetPrimaryRuntimeChangedListener.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetPrimaryRuntimeChangedListener.java
new file mode 100644
index 0000000..e855551
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetPrimaryRuntimeChangedListener.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.jst.jsf.core.internal.project.facet;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jst.common.project.facet.core.ClasspathHelper;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.core.jsfappconfig.JSFAppConfigUtils;
+import org.eclipse.jst.jsf.core.jsflibraryconfiguration.JSFLibraryConfigurationHelper;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
+import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
+import org.eclipse.wst.common.project.facet.core.events.IPrimaryRuntimeChangedEvent;
+
+/**
+ * Handles primary runtime changed events when the JSF Facet is installed
+ * 
+ * @since JSF 1.0.1
+ */
+public class JSFFacetPrimaryRuntimeChangedListener implements IFacetedProjectListener {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener#handleEvent(org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent)
+	 */
+	public void handleEvent(IFacetedProjectEvent event) {
+		if (event instanceof IPrimaryRuntimeChangedEvent &&
+				getJSFFacetedVersion(event.getProject().getProject()) != null && //must be a JSF faceted project
+				JSFLibraryConfigurationHelper.isConfiguredForSystemSuppliedImplementation(event.getProject().getProject())){
+			
+			try {				
+				IProject project = event.getProject().getProject();
+				IProjectFacetVersion fv = getJSFFacetedVersion(project);
+				ClasspathHelper.removeClasspathEntries(project, fv);
+				ClasspathHelper.addClasspathEntries(project, fv);
+			} catch (CoreException e) {
+				JSFCorePlugin.log(IStatus.ERROR, "Unable to replace server supplied implementation when runtime changed.", e);//$NON-NLS-1$
+			}
+		}
+		
+	}
+
+	/**
+	 * @param project
+	 * @return IProjectFacetVersion and null if not JSF faceted
+	 */
+	private IProjectFacetVersion getJSFFacetedVersion(IProject project) {
+		return JSFAppConfigUtils.getProjectFacet(project);		
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetUninstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetUninstallDelegate.java
new file mode 100644
index 0000000..ae17f08
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetUninstallDelegate.java
@@ -0,0 +1,221 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *******************************************************************************/ 
+package org.eclipse.jst.jsf.core.internal.project.facet;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jst.common.project.facet.core.ClasspathHelper;
+import org.eclipse.jst.j2ee.model.IModelProvider;
+import org.eclipse.jst.j2ee.model.ModelProviderManager;
+import org.eclipse.jst.javaee.core.ParamValue;
+import org.eclipse.jst.javaee.web.Servlet;
+import org.eclipse.jst.javaee.web.WebApp;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.core.jsflibraryconfiguration.JSFLibraryConfigurationHelper;
+import org.eclipse.wst.common.project.facet.core.IDelegate;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+
+/**
+ * JSF Facet Un-install Delegate for WTP faceted projects.
+ *	
+ *	<li> removes JSF servlet, servlet-mappings and context-params
+ *	<li> leaves JSF configuration files on disk
+ *  <li> removes JSF classpath containers
+ *  
+ */
+public final class JSFFacetUninstallDelegate implements IDelegate {
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.common.project.facet.core.IDelegate#execute(org.eclipse.core.resources.IProject, org.eclipse.wst.common.project.facet.core.IProjectFacetVersion, java.lang.Object, org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	public void execute(final IProject project, final IProjectFacetVersion fv,
+			final Object config, final IProgressMonitor monitor) throws CoreException {
+		{
+
+			if (monitor != null) {
+				monitor.beginTask("", 1); //$NON-NLS-1$
+			}
+
+			try {
+				// Remove JSF Libraries
+				removeJSFLibraries(project, fv, monitor);
+				
+				//Remove Runtime contributed JSF classpath entries
+				removeRuntimeContributedJSFClasspathEntries(project, fv, monitor);
+				
+				// remove servlet stuff from web.xml
+				uninstallJSFReferencesFromWebApp(project, monitor);
+
+				if (monitor != null) {
+					monitor.worked(1);
+				}
+			} finally {
+				if (monitor != null) {
+					monitor.done();
+				}
+			}
+		}
+	}
+
+	/**
+	 * Removes JSF Lib CP Containers from project
+	 * @param project
+	 * @param monitor
+	 */
+	private void removeJSFLibraries(final IProject project, final IProjectFacetVersion fv, final IProgressMonitor monitor) {
+		 final IJavaProject jproj = JavaCore.create(project);
+		 List keptEntries = new ArrayList();
+		 try {
+			IClasspathEntry[] entries = jproj.getRawClasspath();
+			  keptEntries = new ArrayList();
+			 for (int i=0;i<entries.length;i++){
+				 IClasspathEntry entry = entries[i];
+				 if ( !(JSFLibraryConfigurationHelper.isJSFLibraryContainer(entry)))
+					 keptEntries.add(entry);
+			 }
+		} catch (JavaModelException e) {
+			JSFCorePlugin.log(e, "Cannot get classpath entries to remove JSF Libraries for: "+project.getName()); //$NON-NLS-1$
+		}
+		 
+		 if (keptEntries.size() > 0){
+			 try {
+				jproj.setRawClasspath((IClasspathEntry[])keptEntries.toArray(new IClasspathEntry[0]), monitor);
+			} catch (JavaModelException e) {
+				JSFCorePlugin.log(e, "Exception occured while removing JSF Libraries during JSF Facet uninstall"); //$NON-NLS-1$
+			}
+		 }	
+		
+
+	}
+	
+	private void removeRuntimeContributedJSFClasspathEntries(final IProject project, final IProjectFacetVersion fv, final IProgressMonitor monitor) {
+		try {
+			ClasspathHelper.removeClasspathEntries(project, fv);				
+		} catch (CoreException e) {
+			JSFCorePlugin.log(IStatus.ERROR, "Unable to remove server supplied implementation from the classpath.", e);//$NON-NLS-1$
+		}
+	}
+	
+	private void uninstallJSFReferencesFromWebApp(final IProject project,
+			final IProgressMonitor monitor) {
+		
+		IModelProvider provider = ModelProviderManager.getModelProvider(project);
+		Object webAppObj = provider.getModelObject();
+		if (webAppObj != null) {
+			if (isJavaEEWebApp(webAppObj)){		
+				WebApp webApp = (WebApp)webAppObj;
+				Servlet servlet = JSFUtils12.findJSFServlet(webApp);
+				if (servlet == null)
+					return;
+
+				provider.modify(new RemoveJSFFromJavaEEWebAppOperation(webApp, servlet), new Path("WEB-INF").append("web.xml")); //$NON-NLS-1$ //$NON-NLS-2$
+			} else {//2.3 or 2.4 web app
+				org.eclipse.jst.j2ee.webapplication.WebApp webApp = (org.eclipse.jst.j2ee.webapplication.WebApp)webAppObj;
+				org.eclipse.jst.j2ee.webapplication.Servlet servlet = JSFUtils11.findJSFServlet(webApp);
+				if (servlet == null)
+					return;
+
+				provider.modify(new RemoveJSFFromJ2EEWebAppOperation(webApp, servlet), new Path("WEB-INF").append("web.xml")); //$NON-NLS-1$ //$NON-NLS-2$				
+			}
+		}
+
+	}
+
+	private boolean isJavaEEWebApp(final Object webAppObj) {
+		if (webAppObj instanceof WebApp) 
+			return true;
+
+		return false;
+		
+	}
+
+	static class RemoveJSFFromJavaEEWebAppOperation implements Runnable {
+		private WebApp _webApp;
+		private Servlet _servlet;
+		
+		RemoveJSFFromJavaEEWebAppOperation(final WebApp webApp, final Servlet servlet){
+			this._webApp = webApp;
+			this._servlet = servlet;
+		}
+		
+		public void run() {
+			// remove faces url mappings
+			JSFUtils12.removeURLMappings(_webApp, _servlet);
+			// remove context params
+			removeJSFContextParams(_webApp, _servlet);
+			// remove servlet
+			removeJSFServlet(_webApp, _servlet);
+			
+		}
+		private void removeJSFContextParams(final WebApp webApp, final Servlet servlet) {
+			Iterator it = webApp.getContextParams().iterator();
+			while (it.hasNext()) {
+				ParamValue cp = (ParamValue) it.next();
+				if (cp.getParamName().equals(JSFUtils.JSF_CONFIG_CONTEXT_PARAM)) {
+					webApp.getContextParams().remove(cp);
+					break;
+				}
+			}
+		}
+
+		private void removeJSFServlet(final WebApp webApp, final Servlet servlet) {
+			webApp.getServlets().remove(servlet);
+		}
+		
+	}
+	
+	static class RemoveJSFFromJ2EEWebAppOperation implements Runnable {
+		private org.eclipse.jst.j2ee.webapplication.WebApp _webApp;
+		private org.eclipse.jst.j2ee.webapplication.Servlet _servlet;
+		
+		RemoveJSFFromJ2EEWebAppOperation(final org.eclipse.jst.j2ee.webapplication.WebApp webApp, final org.eclipse.jst.j2ee.webapplication.Servlet servlet){
+			this._webApp = webApp;
+			this._servlet = servlet;
+		}
+		
+		public void run() {
+			// remove faces url mappings
+			JSFUtils11.removeURLMappings(_webApp, _servlet);
+			// remove context params
+			removeJSFContextParams(_webApp, _servlet);
+			// remove servlet
+			removeJSFServlet(_webApp, _servlet);
+			
+		}
+		private void removeJSFContextParams(final org.eclipse.jst.j2ee.webapplication.WebApp webApp, final org.eclipse.jst.j2ee.webapplication.Servlet servlet) {
+			Iterator it = webApp.getContextParams().iterator();
+			while (it.hasNext()) {
+				ParamValue cp = (ParamValue) it.next();
+				if (cp.getParamName().equals(JSFUtils.JSF_CONFIG_CONTEXT_PARAM)) {
+					webApp.getContextParams().remove(cp);
+					break;
+				}
+			}
+		}
+
+		private void removeJSFServlet(final org.eclipse.jst.j2ee.webapplication.WebApp webApp, final org.eclipse.jst.j2ee.webapplication.Servlet servlet) {
+			webApp.getServlets().remove(servlet);
+		}
+		
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJ2EEFacetInstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJ2EEFacetInstallDelegate.java
deleted file mode 100644
index a24f561..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJ2EEFacetInstallDelegate.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 Oracle Corporation.
- * 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:
- *    Gerry Kessler - initial API and implementation
- *******************************************************************************/ 
-
-package org.eclipse.jst.jsf.core.internal.project.facet;
-
-import java.util.List;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.web.componentcore.util.WebArtifactEdit;
-import org.eclipse.jst.j2ee.webapplication.Servlet;
-import org.eclipse.jst.j2ee.webapplication.WebApp;
-import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-/**
- * JSF v1.1 Facet Install Delegate for WTP faceted web projects.
- * 
- * Uses <code>com.eclispe.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider<code> for model
- * 	 <li> creates JSF configuration file if not present
- * 	 <li> updates web.xml for: servlet, servlet-mapping and context-param
- * 	 <li> adds implementation jars to WEB-INF/lib if user requests
- * 
- * @see org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider
- * @author Gerry Kessler - Oracle
- * @since M1
- */
-public class JSFJ2EEFacetInstallDelegate extends AbstractJSFFacetInstallDelegate {
-
-
-	protected void createConfigFile(final IProject project,
-			final IProjectFacetVersion fv, final IDataModel config,
-			IProgressMonitor monitor) {
-
-
-		final IPath configPath = resolveConfigPath(project, config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH));
-		try {
-			// do not overwrite if the file exists
-			if (!configPath.toFile().exists()) {
-				IWorkspaceRunnable op = new IWorkspaceRunnable(){
-
-					public void run(IProgressMonitor monitor_inner)
-							throws CoreException{ 
-						JSFUtils11.createConfigFile(fv.getVersionString(),
-								configPath);
-						project.refreshLocal(IResource.DEPTH_INFINITE, monitor_inner);
-					}
-
-				};
-				op.run(monitor);
-			}
-		} catch (CoreException e) {
-			JSFCorePlugin.log(e, "Exception occured while creating faces-config.xml"); //$NON-NLS-1$
-		}
-
-	}
-
-	protected void createServletAndModifyWebXML(IProject project,
-			final IDataModel config, IProgressMonitor monitor) {
-		
-//		IModelProvider provider = ModelProviderManager.getModelProvider(project); 
-//		Object webAppObj = provider.getModelObject();
-//		if (webAppObj == null){
-//			JSFCorePlugin.log(IStatus.ERROR, project.getName()+": unable to configure web module for JavaServer Faces");
-//			return;
-//		}			
-//		 
-//		if (webAppObj instanceof WebApp) {
-//			WebApp webApp = (WebApp)webAppObj;
-		WebArtifactEdit webEdit = null;
-		try {
-			webEdit = WebArtifactEdit.getWebArtifactEditForWrite(project);
-			WebApp webApp = webEdit.getWebApp();
-			// create or update servlet ref
-			Servlet servlet = JSFUtils11.findJSFServlet(webApp);// check to see
-																// if already
-																// present
-			if (servlet != null) {
-				// remove old mappings
-				JSFUtils11.removeURLMappings(webApp, servlet);
-			}
-			
-			servlet = JSFUtils11
-					.createOrUpdateServletRef(webApp, config, servlet);
-	
-			// init mappings
-			List listOfMappings = getServletMappings(config);
-			JSFUtils11.setUpURLMappings(webApp, listOfMappings, servlet);
-	
-			// setup context params
-			setupContextParams(webApp, config);
-		} finally {
-			if (webEdit != null) {
-				webEdit.saveIfNecessary(monitor);
-				webEdit.dispose();
-			}
-		}
-		
-			
-	}
-
-	private void setupContextParams(WebApp webApp, IDataModel config) {
-		if (webApp.getVersionID() == J2EEVersionConstants.WEB_2_3_ID)//shouldn't have to do it this way, but that's the way it goes 119442
-			JSFUtils11.setupConfigFileContextParamForV2_3(webApp, config);
-		else 
-			JSFUtils11.setupConfigFileContextParamForV2_4(webApp, config);
-	}
-}
-
-	
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJ2EEFacetUninstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJ2EEFacetUninstallDelegate.java
deleted file mode 100644
index c722920..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJ2EEFacetUninstallDelegate.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 Oracle Corporation.
- * 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:
- *    Gerry Kessler - initial API and implementation
- *******************************************************************************/ 
-package org.eclipse.jst.jsf.core.internal.project.facet;
-
-import java.util.Iterator;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.j2ee.common.ParamValue;
-import org.eclipse.jst.j2ee.internal.J2EEVersionConstants;
-import org.eclipse.jst.j2ee.web.componentcore.util.WebArtifactEdit;
-import org.eclipse.jst.j2ee.webapplication.ContextParam;
-import org.eclipse.jst.j2ee.webapplication.Servlet;
-import org.eclipse.jst.j2ee.webapplication.WebApp;
-
-/**
- * JSF v1.1 Facet Uninstall Delegate for WTP faceted projects.
- *	
- *	<li> removes JSF servlet, servlet-mappings and context-params
- *	<li> leaves JSF configuration files on disk
- *  <li> removes JSF classpath containers
- *  
- * @author Gerry Kessler - Oracle
- */
-public class JSFJ2EEFacetUninstallDelegate extends AbstractJSFFacetUninstallDelegate {
-
-
-	protected void uninstallJSFReferencesFromWebApp(IProject project,
-			IProgressMonitor monitor) {
-		WebArtifactEdit artifactEdit = JSFUtils11
-				.getWebArtifactEditForWrite(project);
-		WebApp webApp = artifactEdit.getWebApp();
-
-		try {
-			Servlet servlet = JSFUtils11.findJSFServlet(webApp);
-			if (servlet == null)
-				return;
-
-			// remove faces url mappings
-			removeJSFURLMappings(webApp, servlet);
-			// remove context params
-			removeJSFContextParams(webApp, servlet);
-			// remove servlet
-			removeJSFServlet(webApp, servlet);
-
-		} finally {
-			if (artifactEdit != null) {
-				artifactEdit.saveIfNecessary(monitor);
-				artifactEdit.dispose();
-			}
-		}
-
-	}
-
-	private void removeJSFURLMappings(WebApp webApp, Servlet servlet) {
-		while (webApp.getServletMapping(servlet) != null) {
-			webApp.getServletMappings().remove(
-					webApp.getServletMapping(servlet));
-		}
-	}
-
-	private void removeJSFContextParams(WebApp webApp, Servlet servlet) {
-		if (webApp.getVersionID() == J2EEVersionConstants.WEB_2_3_ID){
-			Iterator it = webApp.getContexts().iterator();
-			while (it.hasNext()) {
-				ContextParam cp = (ContextParam) it.next();
-				if (cp.getParamName().equals(JSFUtils.JSF_CONFIG_CONTEXT_PARAM)) {
-					webApp.getContexts().remove(cp);
-					break;
-				}
-			}
-		}
-		else {//could check for 2_4 version here.   
-			//hoping that the API gets fixed so I don't need to do any of this version checking
-			Iterator it = webApp.getContextParams().iterator();
-			while (it.hasNext()) {
-				ParamValue cp = (ParamValue) it.next();
-				if (cp.getName().equals(JSFUtils.JSF_CONFIG_CONTEXT_PARAM)) {
-					webApp.getContextParams().remove(cp);
-					break;
-				}
-			}
-		}
-	}
-
-	private void removeJSFServlet(WebApp webApp, Servlet servlet) {
-		webApp.getServlets().remove(servlet);
-	}
-
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJavaEEFacetInstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJavaEEFacetInstallDelegate.java
deleted file mode 100644
index 695cdcf..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJavaEEFacetInstallDelegate.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle Corporation.
- * 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:
- *    Gerry Kessler - initial API and implementation
- *******************************************************************************/ 
-
-package org.eclipse.jst.jsf.core.internal.project.facet;
-
-import java.util.List;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jst.j2ee.model.IModelProvider;
-import org.eclipse.jst.j2ee.model.ModelProviderManager;
-import org.eclipse.jst.javaee.web.Servlet;
-import org.eclipse.jst.javaee.web.WebApp;
-import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
-import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-/**
- * JSF v1.2 Facet Install Delegate for WTP faceted web projects.
- * 
- * Uses <code>com.eclispe.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider<code> for model
- * 	 <li> creates JSF configuration file if not present
- * 	 <li> updates web.xml for: servlet, servlet-mapping and context-param
- * 	 <li> adds implementation jars to WEB-INF/lib if user requests
- * 
- * @see org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider
- * @author Gerry Kessler - Oracle
- * @since 1.0
- */
-public class JSFJavaEEFacetInstallDelegate extends AbstractJSFFacetInstallDelegate {
-	
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.jsf.core.internal.project.facet.AbstractJSFFacetInstallDelegate#createConfigFile(org.eclipse.core.resources.IProject, org.eclipse.wst.common.project.facet.core.IProjectFacetVersion, org.eclipse.wst.common.frameworks.datamodel.IDataModel, org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	protected void createConfigFile(final IProject project,
-			final IProjectFacetVersion fv, final IDataModel config,
-			IProgressMonitor monitor) {
-
-
-		final IPath configPath = resolveConfigPath(project, config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH));
-		try {
-			// do not overwrite if the file exists
-			if (!configPath.toFile().exists()) {
-				IWorkspaceRunnable op = new IWorkspaceRunnable(){
-
-					public void run(IProgressMonitor monitor_inner)
-							throws CoreException{ 
-						JSFUtils12.createConfigFile(fv.getVersionString(),
-								configPath);
-						project.refreshLocal(IResource.DEPTH_INFINITE, monitor_inner);
-					}
-
-				};
-				op.run(monitor);
-			}
-		} catch (CoreException e) {
-			JSFCorePlugin.log(e, "Exception occured while creating faces-config.xml");//$NON-NLS-1$
-		}
-
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.jsf.core.internal.project.facet.AbstractJSFFacetInstallDelegate#createServletAndModifyWebXML(org.eclipse.core.resources.IProject, org.eclipse.wst.common.frameworks.datamodel.IDataModel, org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	protected void createServletAndModifyWebXML(IProject project,
-			final IDataModel config, IProgressMonitor monitor) {
-		
-		IModelProvider provider = ModelProviderManager.getModelProvider(project); 
-		Object webAppObj = provider.getModelObject();
-		if (webAppObj == null){
-			JSFCorePlugin.log(IStatus.ERROR, project.getName()+": unable to configure web module for JavaServer Faces"); //$NON-NLS-1$
-			return;
-		}			
-		 
-		if (JSFUtils12.isWebApp25(webAppObj)) {			
-			final WebApp webApp = (WebApp)webAppObj;
-			provider.modify(new UpdateWebXMLFor25(webApp, config), new Path("WEB-INF").append("web.xml")); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		else {
-			//
-		}
-
-	}
-		
-	private class UpdateWebXMLFor25 implements Runnable {
-		private WebApp webApp;
-		private IDataModel config;
-		
-		UpdateWebXMLFor25(WebApp webApp, IDataModel config){
-			this.webApp = webApp;
-			this.config = config;
-		}
-		
-		public void run() {
-
-			// create or update servlet ref
-			Servlet servlet = JSFUtils12.findJSFServlet(webApp);// check to see
-																// if already
-																// present
-			if (servlet != null) {
-				// remove old mappings
-				JSFUtils12.removeURLMappings(webApp, servlet);
-			}
-			
-			servlet = JSFUtils12
-					.createOrUpdateServletRef(webApp, config, servlet);
-	
-			// init mappings
-			List listOfMappings = getServletMappings(config);
-			JSFUtils12.setUpURLMappings(webApp, listOfMappings, servlet);
-	
-			// setup context params
-			JSFUtils12.setupConfigFileContextParamForV2_5(webApp, config);
-		}
-	}
-	
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJavaEEFacetUninstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJavaEEFacetUninstallDelegate.java
deleted file mode 100644
index d8f675d..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFJavaEEFacetUninstallDelegate.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Oracle Corporation.
- * 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:
- *    Gerry Kessler - initial API and implementation
- *******************************************************************************/ 
-package org.eclipse.jst.jsf.core.internal.project.facet;
-
-import java.util.Iterator;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jst.j2ee.model.IModelProvider;
-import org.eclipse.jst.j2ee.model.ModelProviderManager;
-import org.eclipse.jst.javaee.core.ParamValue;
-import org.eclipse.jst.javaee.web.Servlet;
-import org.eclipse.jst.javaee.web.WebApp;
-
-/**
- * JSF v1.2 Facet Uninstall Delegate for WTP faceted projects.
- *	
- *	<li> removes JSF servlet, servlet-mappings and context-params
- *  
- */
-public class JSFJavaEEFacetUninstallDelegate extends AbstractJSFFacetUninstallDelegate {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.jsf.core.internal.project.facet.AbstractJSFFacetUninstallDelegate#uninstallJSFReferencesFromWebApp(org.eclipse.core.resources.IProject, org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	protected void uninstallJSFReferencesFromWebApp(IProject project,
-			IProgressMonitor monitor) {
-		
-		IModelProvider provider = ModelProviderManager.getModelProvider(project);
-		Object webAppObj = provider.getModelObject();
-		if (webAppObj != null && JSFUtils12.isWebApp25(webAppObj)){
-			WebApp webApp = (WebApp)webAppObj;
-			Servlet servlet = JSFUtils12.findJSFServlet(webApp);
-			if (servlet == null)
-				return;
-
-			provider.modify(new RemoveJSFFromWebAppOperation(webApp, servlet), new Path("WEB-INF").append("web.xml")); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-
-	}
-
-	private void removeJSFContextParams(WebApp webApp, Servlet servlet) {
-		Iterator it = webApp.getContextParams().iterator();
-		while (it.hasNext()) {
-			ParamValue cp = (ParamValue) it.next();
-			if (cp.getParamName().equals(JSFUtils.JSF_CONFIG_CONTEXT_PARAM)) {
-				webApp.getContextParams().remove(cp);
-				break;
-			}
-		}
-	}
-
-	private void removeJSFServlet(WebApp webApp, Servlet servlet) {
-		webApp.getServlets().remove(servlet);
-	}
-
-	class RemoveJSFFromWebAppOperation implements Runnable {
-		private WebApp webApp;
-		private Servlet servlet;
-		
-		RemoveJSFFromWebAppOperation(WebApp webApp, Servlet servlet){
-			this.webApp = webApp;
-			this.servlet = servlet;
-		}
-		
-		public void run() {
-			// remove faces url mappings
-			JSFUtils12.removeURLMappings(webApp, servlet);
-			// remove context params
-			removeJSFContextParams(webApp, servlet);
-			// remove servlet
-			removeJSFServlet(webApp, servlet);
-			
-		}
-		
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java
index 9d8df2b..749d7f4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java
@@ -12,6 +12,7 @@
 package org.eclipse.jst.jsf.core.internal.project.facet;
 
 import java.util.Iterator;
+import java.util.List;
 
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
@@ -28,7 +29,7 @@
 /**
  * 
  */
-public class JSFUtils {
+public abstract class JSFUtils {
 	/**
 	 * The default name for the Faces servlet
 	 */
@@ -164,4 +165,159 @@
 			className = JSF_SERVLET_CLASS;
 		return className;
 	}
+	
+	/**
+	 * Servlet 2.3_SRV.11.2: a string that begins with a "/" and ends
+	 * with "/*" is a prefix mapping
+	 * 
+	 * @param mapping
+	 * @return true if the mapping string represents a prefix mapping
+	 */
+	public static boolean isPrefixMapping(final String mapping)
+	{
+	    if (mapping == null || mapping.length() < 4)
+	    {
+	        return false;
+	    }
+	    
+	    return mapping.charAt(0) == '/' && mapping.endsWith("/*");
+	}
+	
+	/**
+	 * Servlet 2.3_SRV.11.2: a string that begins with "*." 
+	 * is an extension mapping
+     * 
+	 * @param mapping
+	 * @return true if mapping is an extension mapping
+	 */
+	public static boolean isExtensionMapping(final String mapping)
+	{
+	    if (mapping == null)
+	    {
+	        return false;
+	    }
+	    
+	    return mapping.startsWith("*.");
+	}
+	
+	/**
+	 * Search the list of servlet-mappings for the first extension and prefix mappings.  The contents
+	 * of mappings is assumed to be all url-pattern's.  
+	 * 
+	 * If prefExtMapping is not null, it is an extension mapping and
+     * it is in mappings, then it is returned.  Otherwise, the first extension
+     * mapping in mappings is returned.  Returns null if mappings does not
+     * contain an extension mapping.  The same algorithm holds for prefPrefixMapping and
+     * corresponding prefix mapping.
+     * 
+     * See isExtensionMapping and isPrefixMapping for more information on url patterns.
+	 * 
+	 * @param mappings
+	 * @param prefExtMapping
+	 * @param prefPrefixMapping
+	 * @return the result
+	 */
+	public static MappingSearchResult searchServletMappings(final  List<String> mappings, String prefExtMapping, String prefPrefixMapping)
+	{
+	    String firstExtFound = null;
+	    String firstPrefixFound = null;
+	    boolean foundExtMapping = false;
+	    boolean foundPrefixMapping = false;
+	    
+	    // if the caller has no preferredMapping, then
+        // set it to something guaranteed to be non-null
+        // and which is guaranteed not to match anything
+        // that pass isExtensionMapping
+	    if (prefExtMapping == null)
+	    {
+	        prefExtMapping = "NOTANEXTENSIONMAPPING";
+	    }
+	    
+	    // similarly, guarantee that if the caller has no
+	    // preferred prefix mapping, that we set a non-null
+	    // comp mapping
+	    if (prefPrefixMapping == null)
+	    {
+	        prefPrefixMapping = "NOTAPREFIXMAPPING";
+	    }
+
+        SEARCH_LOOP:for (String mapping : mappings)
+        {
+            if (isExtensionMapping(mapping))
+            {
+                // can assum that mapping is non-null since
+                // it is an ext mapping
+                if (prefExtMapping.equals(mapping.trim()))
+                {
+                    firstExtFound = prefExtMapping;
+                    continue;
+                }
+
+                if (firstExtFound == null)
+                {
+                    firstExtFound = mapping.trim();
+                }
+            }
+            else if (isPrefixMapping(mapping))
+            {
+                if (prefPrefixMapping.equals(mapping.trim()))
+                {
+                    firstPrefixFound = prefPrefixMapping;
+                    continue;
+                }
+                
+                if (firstPrefixFound == null)
+                {
+                    firstPrefixFound = mapping.trim();
+                }
+            }
+            
+            if (foundExtMapping && foundPrefixMapping)
+            {
+                break SEARCH_LOOP;
+            }
+        }
+	    
+	    return new MappingSearchResult(firstExtFound, firstPrefixFound);
+	}
+	
+    /**
+     * The result of a servlet mapping search
+     *
+     */
+    public static class MappingSearchResult
+    {
+        private final String  _extensionMapping; // may be null;
+        private final String  _prefixMapping;    // may be null
+        
+        MappingSearchResult(final String extensionMapping, final String prefixMapping)
+        {
+            _extensionMapping = extensionMapping;
+            _prefixMapping = prefixMapping;
+        }
+
+        /**
+         * @return true if the search yielded a valid result
+         */
+        public boolean isResult()
+        {
+            return _extensionMapping != null || _prefixMapping != null;
+        }
+
+        /**
+         * @return the first extension mapping matching search criteria or null
+         * if none
+         */
+        public final String getExtensionMapping() {
+            return _extensionMapping;
+        }
+
+        /**
+         * @return the first prefix mapping matching search criteria or null
+         * if none
+         */
+        public final String getPrefixMapping() {
+            return _prefixMapping;
+        }
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java
index 4e432f5..70ec7af 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java
@@ -80,15 +80,18 @@
 		
 		while (it.hasNext()) {
             Servlet servlet = (Servlet) it.next();
-			if (servlet.getWebType().isServletType()) {
-				if (((ServletType) servlet.getWebType()).getClassName().equals(
-						JSF_SERVLET_CLASS)) {
-					return servlet;
-				}
-			} else if (servlet.getWebType().isJspType()) {
-				if (((JSPType) servlet.getWebType()).getJspFile().equals(
-						JSF_SERVLET_CLASS)) {
-					return servlet;
+			if (servlet != null && servlet.getWebType() != null) {
+				
+				if(	servlet.getWebType().isServletType()) {
+					if (((ServletType) servlet.getWebType()).getClassName().equals(
+							JSF_SERVLET_CLASS)) {
+						return servlet;
+					}
+				} else if (servlet.getWebType().isJspType()) {
+					if (((JSPType) servlet.getWebType()).getJspFile().equals(
+							JSF_SERVLET_CLASS)) {
+						return servlet;
+					}
 				}
 			}
 		}
@@ -177,13 +180,13 @@
 					.createServletType();
 			servletType.setClassName(className);
 			servlet.setWebType(servletType);
-			servlet.setLoadOnStartup(new Integer(1));
+			servlet.setLoadOnStartup(Integer.valueOf(1));
 			// Add the servlet to the web application model
 			webApp.getServlets().add(servlet);			
 		} else {
 			// update
 			servlet.setServletName(displayName);
-			servlet.setLoadOnStartup(new Integer(1));
+			servlet.setLoadOnStartup(Integer.valueOf(1));
 		}
 		return servlet;
 	}
@@ -211,16 +214,38 @@
 		Iterator it = urlMappingList.iterator();
 		while (it.hasNext()) {
 			String pattern = (String) it.next();
-			ServletMapping mapping = WebapplicationFactory.eINSTANCE
-					.createServletMapping();
-			mapping.setServlet(servlet);
-			mapping.setName(servlet.getServletName());
-			mapping.setUrlPattern(pattern);
-			webApp.getServletMappings().add(mapping);
+			if (!(doesServletMappingExist(webApp, servlet, pattern))){
+				ServletMapping mapping = WebapplicationFactory.eINSTANCE
+						.createServletMapping();
+				mapping.setServlet(servlet);
+				mapping.setName(servlet.getServletName());
+				mapping.setUrlPattern(pattern);
+				webApp.getServletMappings().add(mapping);
+			}
 		}
 	}
 	
 
+	private static boolean doesServletMappingExist(final WebApp webApp, final Servlet servlet,
+			final String pattern) {	
+		
+		List mappings = webApp.getServletMappings();
+		String servletName = servlet.getServletName();
+		if (servletName != null) {
+			for (int i=mappings.size()-1;i>=0;--i){
+				ServletMapping mapping = (ServletMapping)mappings.get(i);
+				if (mapping != null && 
+						mapping.getServlet() != null && 
+						mapping.getServlet().getServletName() != null &&
+						mapping.getServlet().getServletName().equals(servletName) &&
+						mapping.getUrlPattern().equals(pattern)) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
 	/**
 	 * Removes servlet-mappings for servlet using servlet-name.
 	 * @param webApp
@@ -232,8 +257,11 @@
 		if (servletName != null) {
 			for (int i=mappings.size()-1;i>=0;--i){
 				ServletMapping mapping = (ServletMapping)mappings.get(i);
-				if (mapping.getServlet().getServletName()
-						.equals(servletName)) {
+				if (mapping != null && 
+						mapping.getServlet() != null && 
+						mapping.getServlet().getServletName() != null &&
+						mapping.getServlet().getServletName()
+							.equals(servletName)) {
 					mappings.remove(mapping);
 				}
 			}
@@ -256,7 +284,9 @@
 			Iterator it = webApp.getContexts().iterator();
 			while (it.hasNext()) {
 				cp = (ContextParam) it.next();
-				if (cp.getParamName().equals(JSF_CONFIG_CONTEXT_PARAM)) {
+				if (cp != null &&
+						cp.getParamName() != null &&
+						cp.getParamName().equals(JSF_CONFIG_CONTEXT_PARAM)) {
 					foundCP = cp;
 					found = true;
 				}
@@ -271,7 +301,7 @@
 				if (cp.getParamValue().indexOf(config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH)) < 0) {
 					String curVal = cp.getParamValue();
 					String val = config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH);
-					if (curVal != null || !curVal.trim().equals("")) { //$NON-NLS-1$
+					if (curVal != null && !"".equals(curVal.trim())) { //$NON-NLS-1$
 						val = curVal + ",\n" + val; //$NON-NLS-1$
 					}
 					cp.setParamValue(val);
@@ -295,7 +325,9 @@
 			Iterator it = webApp.getContextParams().iterator();
 			while (it.hasNext()) {
 				cp = (ParamValue) it.next();
-				if (cp.getName().equals(JSF_CONFIG_CONTEXT_PARAM)) {
+				if (cp != null && 
+						cp.getName() != null &&
+						cp.getName().equals(JSF_CONFIG_CONTEXT_PARAM)) {
 					foundCP = cp;
 					found = true;
 				}
@@ -310,7 +342,7 @@
 				if (cp.getValue().indexOf(config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH)) < 0) {
 					String curVal = cp.getValue();
 					String val = config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH);
-					if (curVal != null || !curVal.trim().equals("")) { //$NON-NLS-1$
+					if (curVal != null && !"".equals(curVal.trim())) { //$NON-NLS-1$
 						val = curVal + ",\n" + val; //$NON-NLS-1$
 					}
 					cp.setValue(val);
@@ -349,7 +381,9 @@
 		String defaultSuffix = "jsp"; //$NON-NLS-1$
 		for (Iterator it = webApp.getContexts().iterator();it.hasNext();) {		
 			ContextParam cp = (ContextParam) it.next();		
-			if (cp.getParamName().equals(JSF_DEFAULT_SUFFIX_CONTEXT_PARAM)){				
+			if (cp != null &&
+					cp.getParamName() != null && 
+					cp.getParamName().equals(JSF_DEFAULT_SUFFIX_CONTEXT_PARAM)){				
 				String defSuffix = cp.getParamValue();
 				if (defSuffix.startsWith(".")) //$NON-NLS-1$
 					defSuffix = defSuffix.substring(1);
@@ -370,7 +404,8 @@
 			String ext = extPath.getFileExtension();
 			if (ext == null){
 				String lastSeg = extPath.lastSegment();
-				if (lastSeg.equals("*")) //$NON-NLS-1$
+				if (lastSeg != null && 
+						lastSeg.equals("*")) //$NON-NLS-1$
 				{
 					return extPath.removeLastSegments(1).toString();
 				}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java
index 5915622..ab14bc6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java
@@ -40,7 +40,7 @@
  * 
  * @author Gerry Kessler - Oracle
  */
-public class JSFUtils12 extends JSFUtils{
+public class JSFUtils12 extends JSFUtils {
 
 	/**
 	 * @param webApp
@@ -52,7 +52,8 @@
 		
 		while (it.hasNext()) {
             Servlet servlet = (Servlet) it.next();
-			if (servlet.getServletClass().equals (JSF_SERVLET_CLASS)) {
+			if (servlet.getServletClass() != null &&
+					servlet.getServletClass().equals (JSF_SERVLET_CLASS)) {
 				return servlet;
 			}
 		}
@@ -140,14 +141,14 @@
 			servlet = WebFactory.eINSTANCE.createServlet();
 			servlet.setServletName(displayName);
 			servlet.setServletClass(className);
-			servlet.setLoadOnStartup(new Integer(1));
+			servlet.setLoadOnStartup(Integer.valueOf(1));
 			// Add the servlet to the web application model
 			webApp.getServlets().add(servlet);
 
 		} else {
 			// update
 			servlet.setServletName(displayName);
-			servlet.setLoadOnStartup(new Integer(1));
+			servlet.setLoadOnStartup(Integer.valueOf(1));
 		}
 		return servlet;
 	}
@@ -174,20 +175,43 @@
 			Servlet servlet) {
 		
 		if (urlMappingList.size() > 0) {
-			ServletMapping mapping = WebFactory.eINSTANCE.createServletMapping();
-			mapping.setServletName(servlet.getServletName());
-			webApp.getServletMappings().add(mapping);
+			ServletMapping mapping = findServletMapping(webApp, servlet);
+			if (mapping == null){
+				mapping = WebFactory.eINSTANCE.createServletMapping();
+				mapping.setServletName(servlet.getServletName());
+				webApp.getServletMappings().add(mapping);
+			}
 			// Add patterns
 			Iterator it = urlMappingList.iterator();
 			while (it.hasNext()) {
 				String pattern = (String) it.next();
-				UrlPatternType urlPattern = JavaeeFactory.eINSTANCE.createUrlPatternType();
-				urlPattern.setValue(pattern);				
-				mapping.getUrlPatterns().add(urlPattern);							
+				if (!(doesServletMappingPatternExist(webApp, mapping, pattern))){
+					UrlPatternType urlPattern = JavaeeFactory.eINSTANCE.createUrlPatternType();
+					urlPattern.setValue(pattern);				
+					mapping.getUrlPatterns().add(urlPattern);
+				}
 			}
 		}
 	}
 	
+	private static ServletMapping findServletMapping(final WebApp webApp, final Servlet servlet) {
+		for (Iterator it=webApp.getServletMappings().iterator();it.hasNext();){
+			ServletMapping mapping = (ServletMapping)it.next();
+			if (mapping.getServletName().equals(servlet.getServletName()))
+				return mapping;
+		}
+		return null;
+	}
+
+	private static boolean doesServletMappingPatternExist(final WebApp webApp, final ServletMapping mapping,
+			final String pattern) {	
+		for (Iterator it=mapping.getUrlPatterns().iterator();it.hasNext();){
+			if(pattern.equals(((UrlPatternType)it.next()).getValue()))
+				return true;
+		}
+		return false;
+	}
+	
 	/**
 	 * Removes servlet-mappings for servlet using servlet-name for >= 2.5 WebModules.
 	 * @param webApp
@@ -199,7 +223,9 @@
 		if (servletName != null) {
 			for (int i=mappings.size()-1;i>=0;--i){
 				ServletMapping mapping = (ServletMapping)mappings.get(i);
-				if (mapping.getServletName()
+				if (mapping != null && 
+						mapping.getServletName() != null && 
+						mapping.getServletName()
 						.equals(servletName)) {
 					mappings.remove(mapping);
 				}
@@ -223,7 +249,9 @@
 			Iterator it = webApp.getContextParams().iterator();
 			while (it.hasNext()) {
 				cp = (org.eclipse.jst.javaee.core.ParamValue) it.next();
-				if (cp.getParamName().equals(JSF_CONFIG_CONTEXT_PARAM)) {
+				if (cp != null && 
+						cp.getParamName()!= null &&
+						cp.getParamName().equals(JSF_CONFIG_CONTEXT_PARAM)) {
 					foundCP = cp;
 					found = true;
 				}
@@ -238,7 +266,7 @@
 				if (cp.getParamValue().indexOf(config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH)) < 0) {
 					String curVal = cp.getParamValue();
 					String val = config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH);
-					if (curVal != null || !curVal.trim().equals("")) { //$NON-NLS-1$
+					if (curVal != null && !"".equals(curVal.trim())) { //$NON-NLS-1$
 						val = curVal + ",\n" + val; //$NON-NLS-1$
 					}
 					cp.setParamValue(val);
@@ -255,7 +283,9 @@
 		String defaultSuffix = "jsp"; //$NON-NLS-1$
 		for (Iterator it = webApp.getContextParams().iterator();it.hasNext();) {		
 			ParamValue cp = (ParamValue) it.next();		
-			if (cp.getParamName().equals(JSF_DEFAULT_SUFFIX_CONTEXT_PARAM)){				
+			if (cp != null && 
+					cp.getParamName() != null && 
+					cp.getParamName().equals(JSF_DEFAULT_SUFFIX_CONTEXT_PARAM)){				
 				String defSuffix = cp.getParamValue();
 				if (defSuffix.startsWith(".")) //$NON-NLS-1$
 					defSuffix = defSuffix.substring(1);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/region/Region2AttrAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/region/Region2AttrAdapter.java
new file mode 100644
index 0000000..c58f4bb
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/region/Region2AttrAdapter.java
@@ -0,0 +1,121 @@
+/**
+ * 
+ */
+package org.eclipse.jst.jsf.core.internal.region;
+
+import org.eclipse.jst.jsf.common.dom.AttrDOMAdapter;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
+import org.w3c.dom.Node;
+
+/**
+ * A AttrDOMAdapter that adapts from a ITextRegions. Instances of class can only
+ * be obtained from and are always relative to, an owning Region2ElementAdapter
+ * 
+ * @author cbateman
+ * 
+ */
+public class Region2AttrAdapter extends AttrDOMAdapter
+{
+    private final Node _attr;
+
+    /**
+     * @param owner
+     * @param attr
+     */
+    Region2AttrAdapter(final Region2ElementAdapter owner, final Node attr)
+    {
+        super(owner);
+        _attr = attr;
+    }
+
+    @Override
+    public Region2ElementAdapter getOwningElement()
+    {
+        return (Region2ElementAdapter) super.getOwningElement();
+    }
+
+    @Override
+    public String getLocalName()
+    {
+        return _attr.getLocalName();
+    }
+
+    @Override
+    public String getNodeName()
+    {
+        return _attr.getNodeName();
+    }
+
+    @Override
+    public String getPrefix()
+    {
+        return _attr.getPrefix();
+    }
+
+    @Override
+    public String getValue()
+    {
+        return _attr.getNodeValue();
+    }
+
+    /**
+     * @return the structured document context
+     */
+    public IStructuredDocumentContext getDocumentContext()
+    {
+        return IStructuredDocumentContextFactory.INSTANCE.getContext
+            (getOwningElement().getDocumentContext().getStructuredDocument(),
+                getStartOffset());
+    }
+    
+    /**
+     * @return the absolute document offset where the attribute starts.
+     */
+    public int getStartOffset()
+    {
+        return getOwningElement().getTextRegion().getStartOffset()+getAttributeNameRegion().getStart();
+    }
+
+    /**
+     * Offsets in the region will be relative to the parent element, not the
+     * document
+     * 
+     * @return the ITextRegion for the attribute name of the attribute adapted
+     *         by attrAdapter
+     * @throws IllegalArgumentException
+     *             if attrAdapter.getOwningElement != this
+     */
+    // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=217523 for deprecation
+    @SuppressWarnings("deprecation")
+    public ITextRegion getAttributeNameRegion()
+    {
+
+        return getDOMAttr(_attr).getNameRegion();
+    }
+
+    /**
+     * Offsets in the region will be relative to the parent element, not the
+     * document
+     * 
+     * @return the ITextRegion for the attribute value of the attribute adapted
+     *         by attrAdapter
+     * @throws IllegalArgumentException
+     *             if attrAdapter.getOwningElement != this
+     */
+    @SuppressWarnings("deprecation")
+    // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=217523 for deprecation
+    public ITextRegion getAttributeValueRegion()
+    {
+        return getDOMAttr(_attr).getValueRegion();
+    }
+
+    private IDOMAttr getDOMAttr(final Node attrAsNode)
+    {
+        assert attrAsNode instanceof IDOMAttr;
+
+        return ((IDOMAttr) attrAsNode);
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/region/Region2ElementAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/region/Region2ElementAdapter.java
new file mode 100644
index 0000000..4d7cec3
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/region/Region2ElementAdapter.java
@@ -0,0 +1,218 @@
+package org.eclipse.jst.jsf.core.internal.region;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.eclipse.jst.jsf.common.dom.ElementDOMAdapter;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionCollection;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+import org.w3c.dom.Node;
+
+/**
+ * Adapt a region object for DOM element information. Does not implement entire
+ * DOM interface. Object is lazily initialized and not thread-safe.
+ * 
+ * @author cbateman
+ * 
+ */
+public class Region2ElementAdapter extends ElementDOMAdapter
+{
+    private final RegionProcessorStrategy _regionParser;
+
+    /**
+     * Create a new adapter for this region. If the region does not contain
+     * enough information to construct a meaningful adapter, it will throw
+     * NoElementException. The adapter is lazily initialized and won't process
+     * the region until the first call to a get method is made.
+     * 
+     * @param region
+     * @throws NoElementException
+     */
+    public Region2ElementAdapter(final ITextRegion region)
+            throws NoElementException
+    {
+        _regionParser = new RegionProcessorStrategy(region);
+    }
+
+    @Override
+    public Map<String, Region2AttrAdapter> getAttributes()
+    {
+        return _regionParser.getAttributes();
+    }
+
+    @Override
+    public String getNamespace()
+    {
+        return _regionParser.getNamespace();
+    }
+
+    @Override
+    public String getLocalName()
+    {
+        return _regionParser.getLocalName();
+    }
+
+    @Override
+    public String getNodeName()
+    {
+        return _regionParser.getNodeName();
+    }
+
+    @Override
+    public String getPrefix()
+    {
+        return _regionParser.getPrefix();
+    }
+
+    /**
+     * @return the structured document context
+     */
+    public IStructuredDocumentContext getDocumentContext()
+    {
+        return _regionParser._context;
+    }
+
+    /**
+     * @return an ITextRegion containing absolute offset information for this element
+     */
+    public ITextRegionCollection getTextRegion()
+    {
+        return _regionParser._region;
+    }
+
+    private class RegionProcessorStrategy
+    {
+        private final AtomicBoolean         _isInitialized =
+                                                new AtomicBoolean(false);
+        private final ITextRegionCollection _region;
+
+        private Map<String, Region2AttrAdapter> _attributes;
+        private Node                        _node;
+        private IStructuredDocumentContext  _context;
+
+        RegionProcessorStrategy(final ITextRegion region) throws NoElementException
+        {
+            if (!(region instanceof ITextRegionCollection)
+                    || ((ITextRegionCollection) region).getFirstRegion()
+                            .getType() != DOMRegionContext.XML_TAG_OPEN)
+            {
+                throw new NoElementException(
+                        "Region is not a collection with an open tag");
+            }
+
+            _region = (ITextRegionCollection) region;
+
+            _context =
+                       IStructuredDocumentContextFactory.INSTANCE.getContext(
+                               ((IStructuredDocumentRegion) _region)
+                                       .getParentDocument(), _region
+                                       .getStartOffset());
+
+            if (_context == null)
+            {
+                throw new NoElementException(
+                        "Couldn't acquire structured document context");
+            }
+
+            final IDOMContextResolver resolver =
+                                                 IStructuredDocumentContextResolverFactory.INSTANCE
+                                                         .getDOMContextResolver(_context);
+
+            if (resolver == null)
+            {
+                throw new NoElementException("Couldn't acquire dom resolver");
+            }
+
+            _node = resolver.getNode();
+
+            if (_node == null)
+            {
+                throw new NoElementException("Couldn't get Node from region");
+            }
+        }
+
+        public String getLocalName()
+        {
+            return _node.getLocalName();
+        }
+
+        public String getNodeName()
+        {
+            return _node.getNodeName();
+        }
+
+        public String getPrefix()
+        {
+            return _node.getPrefix();
+        }
+
+        public String getNamespace()
+        {
+            final ITaglibContextResolver tagLibResolver =
+                              IStructuredDocumentContextResolverFactory.INSTANCE
+                                      .getTaglibContextResolver(_context);
+
+            if (tagLibResolver != null)
+            {
+                return tagLibResolver.getTagURIForNodeName(_node);
+            }
+
+            return null;
+        }
+
+        public Map<String, Region2AttrAdapter>  getAttributes()
+        {
+            mapAttributesOnlyOnce();
+            return Collections.unmodifiableMap(_attributes);
+        }
+        public boolean isInitialized()
+        {
+            return _isInitialized.get();
+        }
+
+        private void mapAttributesOnlyOnce()
+        {
+            // only once
+            if (_attributes != null)
+                return;
+
+            _attributes = new HashMap<String, Region2AttrAdapter>();
+            for (int i = 0; i < _node.getAttributes().getLength(); i++)
+            {
+                final Node nodeAttr = _node.getAttributes().item(i);
+                Region2AttrAdapter  attr = new Region2AttrAdapter(Region2ElementAdapter.this, nodeAttr);
+                _attributes.put(attr.getLocalName(), attr);
+            }
+        }
+    }
+    
+    /**
+     * Indicates that construction of this adapter failed because an IRegion
+     * didn't have sufficient information (or didn't represent an element at
+     * all)
+     * 
+     * @author cbateman
+     * 
+     */
+    public static class NoElementException extends Exception
+    {
+        /**
+         * serializable id
+         */
+        private static final long serialVersionUID = -4479154049727036580L;
+
+        private NoElementException(final String reason)
+        {
+            super(reason);
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/AttributeIdentifierFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/AttributeIdentifierFactory.java
new file mode 100644
index 0000000..f71dc38
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/AttributeIdentifierFactory.java
@@ -0,0 +1,51 @@
+package org.eclipse.jst.jsf.core.internal.tld;
+
+import org.eclipse.jst.jsf.common.dom.AttributeIdentifier;
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+
+/**
+ * A factory for creating instances of AttributeIdentifier. Some results may be
+ * cached or otherwise based on shared instances.
+ * 
+ * @author cbateman
+ * 
+ */
+public final class AttributeIdentifierFactory
+{
+    /**
+     * @param tagId
+     * @param attributeName
+     * @return an attribute id based on the tagid and attribute name provided.
+     */
+    public static AttributeIdentifier createAttributeIdentifier(
+            final TagIdentifier tagId, final String attributeName)
+    {
+        return new SimpleAttributeIdentifier(tagId, attributeName);
+    }
+
+    private final static class SimpleAttributeIdentifier extends
+            AttributeIdentifier
+    {
+        private final TagIdentifier _tagId;
+        private final String        _attributeName;
+
+        public SimpleAttributeIdentifier(final TagIdentifier tagId,
+                String attributeName)
+        {
+            _tagId = tagId;
+            _attributeName = attributeName;
+        }
+
+        @Override
+        public String getName()
+        {
+            return _attributeName;
+        }
+
+        @Override
+        public TagIdentifier getTagIdentifier()
+        {
+            return _tagId;
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/CMUtil.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/CMUtil.java
index 43e8bbb..b31f609 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/CMUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/CMUtil.java
@@ -11,6 +11,12 @@
  *******************************************************************************/
 package org.eclipse.jst.jsf.core.internal.tld;
 
+import java.util.Iterator;
+
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TaglibTracker;
 import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument;
 import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
 import org.eclipse.wst.html.core.internal.contentmodel.HTMLElementDeclaration;
@@ -111,6 +117,39 @@
 		}
         return null;
 	}
+	
+	/**
+	 * !!! NOTE: this function is intended to work around the problem that if your element
+	 * has not yet been added to an  IDOMModel, getElementDeclaration won't be able to find
+	 * it.  This method does nothing (unlike the ModelQuery-based approach in getElementDeclaration)
+	 * to ensure that the namespace "uri" provided is valid in the structured document provided.  It is
+	 * therefore only advisable to use this method in cases where your node is not already a member of a 
+	 * IDOMModel.
+	 * 
+	 * @param uri
+	 * @param elementName
+	 * @param document 
+	 * @return the TLDElementDeclaration for this required tag or null if there  is nothing appropriate
+	 */
+	public static CMElementDeclaration getTLDElementDeclaration(final String uri, final String elementName, IDocument document)
+	{
+	    TLDCMDocumentManager tldmgr = TaglibController.getTLDCMDocumentManager(document);
+	    
+	    if (tldmgr != null)
+	    {
+            for (Iterator it = tldmgr.getTaglibTrackers().iterator();it.hasNext();)
+            {
+                TaglibTracker  tracker = (TaglibTracker) it.next();
+                
+                if (tracker.getURI().equals(uri))
+                {
+                    return (CMElementDeclaration) tracker.getElements().getNamedItem(tracker.getPrefix()+":"+elementName);
+                }
+            }
+	    }
+        // fallthrough
+        return null;
+	}
 
 	/**
 	 * give an element, get its namespace URI.
@@ -119,9 +158,19 @@
 	 * @return the namespace URI
 	 */
 	public static String getElementNamespaceURI(Element element) {
-		CMElementDeclaration decl = getElementDeclaration(element);
+	    //System.out.printf("uri for %s is %s\n", element.toString(), element.getNamespaceURI());
+
+	    CMElementDeclaration decl = getElementDeclaration(element);
 		if (decl == null) {
-			return null;
+		    
+		    // if the content model has nothing, see if the element 
+		    // itself has an xml namespace
+		    // TODO: should only apply this if the source document
+		    // is a valid XML doc?
+		    final String uri = element.getNamespaceURI();
+		    
+		    // may be null which the default state
+			return uri;
 		}
 
 		if (isJSP(decl)) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/IJSFConstants.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/IJSFConstants.java
index 7e49a03..4f2ee35 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/IJSFConstants.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/IJSFConstants.java
@@ -59,6 +59,11 @@
 	 */
 	final static public String TAG_PARAM = "param";
 
+    /**
+     * phaseListener tagname
+     */
+	final static public String TAG_PHASELISTENER = "phaseListener";
+	
 	/**
 	 * selectItem tagname
 	 */
@@ -70,6 +75,11 @@
 	final static public String TAG_SELECTITEMS = "selectItems";
 
 	/**
+	 * setPropertyActionListener tagname
+	 */
+	final static public String TAG_SETPROPERTYACTIONLISTENER = "setPropertyActionListener";
+	
+	/**
 	 * subview tagname
 	 */
 	final static public String TAG_SUBVIEW = "subview";
@@ -319,7 +329,193 @@
     final static TagIdentifier TAG_IDENTIFIER_GRAPHICIMAGE =
     	TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_GRAPHICIMAGE);
 
-	// attribute names
+    /**
+     * TagIdentifier for TAG_COMMANDBUTTON
+     */
+    final static TagIdentifier TAG_IDENTIFIER_COMMANDBUTTON =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_COMMANDBUTTON);
+
+    /**
+     * TagIdentifier for TAG_COMMANDLINK
+     */
+    final static TagIdentifier TAG_IDENTIFIER_COMMANDLINK =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_COMMANDLINK);
+
+    /**
+     * TagIdentifier for TAG_INPUTHIDDEN
+     */
+    final static TagIdentifier TAG_IDENTIFIER_INPUTHIDDEN =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_INPUTHIDDEN);
+
+    /**
+     * TagIdentifier for TAG_MESSAGE
+     */
+    final static TagIdentifier TAG_IDENTIFIER_MESSAGE =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_MESSAGE);
+
+    /**
+     * TagIdentifier for TAG_MESSAGES
+     */
+    final static  TagIdentifier TAG_IDENTIFIER_MESSAGES =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_MESSAGES);
+
+    /**
+     * TagIdentifier for TAG_OUTPUTFORMAT
+     */
+    final static TagIdentifier TAG_IDENTIFIER_OUTPUTFORMAT =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_OUTPUTFORMAT);
+
+    /**
+     * TagIdentifier for TAG_OUTPUTLINK
+     */
+    final static TagIdentifier TAG_IDENTIFIER_OUTPUTLINK =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_OUTPUTLINK);
+
+    /**
+     * TagIdentifier for TAG_PANELGROUP
+     */
+    final static TagIdentifier TAG_IDENTIFIER_PANEL_GROUP =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_PANELGROUP);
+
+    /**
+     * TagIdentifier for TAG_SELECTBOOLEANCHECKBOX
+     */
+    final static TagIdentifier TAG_IDENTIFIER_SELECTBOOLEANCHECKBOX = 
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_SELECTBOOLEANCHECKBOX);
+
+    /**
+     * TagIdentifier for TAG_SELECTMANYCHECKBOX
+     */
+    final static TagIdentifier TAG_IDENTIFIER_SELECTMANYCHECKBOX = 
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_SELECTMANYCHECKBOX);
+
+    /**
+     * TagIdentifier for TAG_SELECTMANYLISTBOX
+     */
+    final static TagIdentifier TAG_IDENTIFIER_SELECTMANYLISTBOX = 
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_SELECTMANYLISTBOX);
+
+    /**
+     * TagIdentifier for TAG_SELECTMANYMENU
+     */
+    final static  TagIdentifier TAG_IDENTIFIER_SELECTMANYMENU =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_SELECTMANYMENU);
+
+    /**
+     * TagIdentifier for TAG_SELECTONELISTBOX
+     */
+    final static TagIdentifier TAG_IDENTIFIER_SELECTONELISTBOX =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_SELECTONELISTBOX);
+    
+    /**
+     * TagIdentifier for TAG_SELECTONEMENU
+     */
+    final static TagIdentifier TAG_IDENTIFIER_SELECTONEMENU =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_SELECTONEMENU);
+
+    /**
+     * TagIdentifier for TAG_SELECTONERADIO
+     */
+    final static TagIdentifier TAG_IDENTIFIER_SELECTONERADIO =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_HTML, TAG_SELECTONERADIO);
+
+    /**
+     * TagIdentifier for TAG_ACTIONLISTENER
+     */
+    final static TagIdentifier TAG_IDENTIFIER_ACTIONLISTENER = 
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_ACTIONLISTENER);
+
+    /**
+     * TagIdentifier for TAG_ATTRIBUTE
+     */
+    final static TagIdentifier TAG_IDENTIFIER_ATTRIBUTE = 
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_ATTRIBUTE);
+
+    /**
+     * TagIdentifier for TAG_CONVERTDATETIME
+     */
+    final static TagIdentifier TAG_IDENTIFIER_CONVERTDATETIME = 
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_CONVERTDATETIME);
+
+    /**
+     * TagIdentifier for TAG_CONVERTNUMBER
+     */
+    final static TagIdentifier TAG_IDENTIFIER_CONVERTNUMBER = 
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_CONVERTNUMBER);
+
+    /**
+     * TagIdentifier for TAG_CONVERTER
+     */
+    final static TagIdentifier TAG_IDENTIFIER_CONVERTER = 
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_CONVERTER);
+
+    /**
+     * TagIdentifier for TAG_PARAM
+     */
+    final static TagIdentifier TAG_IDENTIFIER_PARAM =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_PARAM);
+
+    /**
+     * TagIdentifier for TAG_PHASELISTENER
+     */
+    final static TagIdentifier TAG_IDENTIFIER_PHASELISTENER =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_PHASELISTENER);
+
+    /**
+     * TagIdentifier for TAG_SELECTITEM
+     */
+    final static TagIdentifier TAG_IDENTIFIER_SELECTITEM = 
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_SELECTITEM);
+
+    /**
+     * TagIdentifier for TAG_SELECTITEMS
+     */
+    final static TagIdentifier TAG_IDENTIFIER_SELECTITEMS =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_SELECTITEMS);
+
+    /**
+     * TagIdentifier for TAG_SETPROPERTYACTIONLISTENER
+     */
+    final static TagIdentifier TAG_IDENTIFIER_SETPROPERTYACTIONLISTENER =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_SETPROPERTYACTIONLISTENER);
+
+    /**
+     * TagIdentifier for TAG_SUBVIEW
+     */
+    final static TagIdentifier TAG_IDENTIFIER_SUBVIEW =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_SUBVIEW);
+
+    /**
+     * TagIdentifier for TAG_VALIDATEDOUBLERANGE
+     */
+    final static TagIdentifier TAG_IDENTIFIER_VALIDATEDOUBLERANGE =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_VALIDATEDOUBLERANGE);
+
+    /**
+     * TagIdentifier for TAG_VALIDATELENGTH
+     */
+    final static TagIdentifier TAG_IDENTIFIER_VALIDATELENGTH =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_VALIDATELENGTH);
+
+    /**
+     * TagIdentifier for TAG_VALIDATELONGRANGE
+     */
+    final static TagIdentifier TAG_IDENTIFIER_VALIDATELONGRANGE =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_VALIDATELONGRANGE);
+
+    /**
+     * TagIdentifier for TAG_VALIDATOR
+     */
+    final static TagIdentifier TAG_IDENTIFIER_VALIDATOR =
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_VALIDATOR);
+
+    /**
+     * TagIdentifier for TAG_VALUECHANGELISTENER
+     */
+    final static TagIdentifier TAG_IDENTIFIER_VALUECHANGELISTENER = 
+        TagIdentifierFactory.createJSPTagWrapper(ITLDConstants.URI_JSF_CORE, TAG_VALUECHANGELISTENER);
+
+    // attribute names
 	/**
 	 * accept tag attribute name
 	 */
@@ -779,4 +975,5 @@
 	 * width tag attribute name
 	 */
 	final static public String ATTR_WIDTH = "width";
+
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/TLDTagIdentifier.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/TLDTagIdentifier.java
new file mode 100644
index 0000000..fdb5a23
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/TLDTagIdentifier.java
@@ -0,0 +1,33 @@
+package org.eclipse.jst.jsf.core.internal.tld;
+
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+
+final class TLDTagIdentifier extends TagIdentifier
+{
+    private final TLDElementDeclaration _tldDecl;
+
+    public TLDTagIdentifier(final TLDElementDeclaration tldDecl)
+    {
+        _tldDecl = tldDecl;
+    }
+    
+    @Override
+    public String getTagName()
+    {
+        return _tldDecl.getElementName();
+    }
+
+    @Override
+    public String getUri()
+    {
+        return  ((TLDDocument)_tldDecl.getOwnerDocument()).getUri();
+    }
+
+    @Override
+    public boolean isJSPTag()
+    {
+        return true;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/TagIdentifierFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/TagIdentifierFactory.java
index 0c8d702..c6fef07 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/TagIdentifierFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/tld/TagIdentifierFactory.java
@@ -11,6 +11,8 @@
 package org.eclipse.jst.jsf.core.internal.tld;
 
 import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
 import org.w3c.dom.Element;
 
 /**
@@ -42,6 +44,19 @@
         return new DocumentTagIdentifier(element);
     }
     
+    /**
+     * @param elementDecl
+     * @return a tag identifier that bridges a TLDElementDeclaration
+     */
+    public static TagIdentifier createTLDTagWrapper(final TLDElementDeclaration elementDecl)
+    {
+        if (!(elementDecl.getOwnerDocument() instanceof TLDDocument))
+        {
+            throw new IllegalArgumentException("Element decl must have a tlddoc for a parent: "+elementDecl.toString());
+        }
+        return new TLDTagIdentifier(elementDecl);
+    }
+    
     private TagIdentifierFactory()
     {
         // static class, no external instantiation
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/ArtifactEditJSFAppConfigProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/ArtifactEditJSFAppConfigProvider.java
index f9f39e9..50ba81a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/ArtifactEditJSFAppConfigProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/ArtifactEditJSFAppConfigProvider.java
@@ -92,7 +92,7 @@
 	 */
 	public boolean equals(Object otherObject) {
 		boolean equals = false;
-		if (otherObject != null && otherObject instanceof ArtifactEditJSFAppConfigProvider) {
+		if (otherObject instanceof ArtifactEditJSFAppConfigProvider) {
 			IFile otherAppConfigFile = ((ArtifactEditJSFAppConfigProvider)otherObject).appConfigFile;
 			if (appConfigFile != null) {
 				equals = appConfigFile.equals(otherAppConfigFile);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/ImplicitRuntimeJSFAppConfigProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/ImplicitRuntimeJSFAppConfigProvider.java
index eea8207..3483501 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/ImplicitRuntimeJSFAppConfigProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/ImplicitRuntimeJSFAppConfigProvider.java
@@ -95,6 +95,7 @@
 		components.add(createUIComponent("Input")); //$NON-NLS-1$
 		components.add(createUIComponent("Message")); //$NON-NLS-1$
 		components.add(createUIComponent("Messages")); //$NON-NLS-1$
+        components.add(createUIComponent("NamingContainer")); //$NON-NLS-1$
 		components.add(createUIComponent("Output")); //$NON-NLS-1$
 		components.add(createUIComponent("Panel")); //$NON-NLS-1$
 		components.add(createUIComponent("Parameter")); //$NON-NLS-1$
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JARFileJSFAppConfigProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JARFileJSFAppConfigProvider.java
index 84eca22..30c96a0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JARFileJSFAppConfigProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JARFileJSFAppConfigProvider.java
@@ -10,8 +10,14 @@
  *******************************************************************************/ 
 package org.eclipse.jst.jsf.core.jsfappconfig;
 
+import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.util.Collections;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.emf.common.util.EList;
@@ -58,7 +64,7 @@
 	 * Flag to track if load error has been logged at least once.
 	 */
 	protected boolean loadErrorLogged = false;
-
+	
 	/**
 	 * Creates an instance, storing the passed IProject instance and file name
 	 * String to be used for subsequent processing.
@@ -75,33 +81,13 @@
 	 */
 	public FacesConfigType getFacesConfigModel() {
 	    // TODO: should this job be pushed into the model?
-		if (facesConfig == null) {
-			if (filename != null) {
-				StringBuffer sb = new StringBuffer();
-				sb.append(JARFILE_URI_PREFIX);
-				sb.append(filename);
-				sb.append(FACES_CONFIG_IN_JAR_SUFFIX);
-				URI jarFileURI = URI.createURI(sb.toString());
-				FacesConfigResourceFactory resourceFactory = FacesConfigResourceFactory.createResourceFactoryForJar();
-				Resource resource = resourceFactory.createResource(jarFileURI);
-				try {
-					resource.load(Collections.EMPTY_MAP);
-					if (resource != null) {
-						EList resourceContents = resource.getContents();
-						if (resourceContents != null && resourceContents.size() > 0) {
-							facesConfig = (FacesConfigType)resourceContents.get(0);
-							if (facesConfig != null) {
-								jsfAppConfigLocater.getJSFAppConfigManager().addFacesConfigChangeAdapter(facesConfig);
-							}
-						}
-					}
-				} catch(IllegalStateException ise) {
-					//log error
-					logLoadError(ise);
-				} catch(IOException ioe) {
-					//log error
-					logLoadError(ioe);
-				}
+		if (facesConfig == null && filename != null) 
+		{
+			facesConfig = getFacesConfig();
+			
+			if (facesConfig != null)
+			{
+				jsfAppConfigLocater.getJSFAppConfigManager().addFacesConfigChangeAdapter(facesConfig);
 			}
 		}
 		return facesConfig;
@@ -170,4 +156,99 @@
 		return sb.toString();
 	}
 
+	private FacesConfigType getFacesConfig()
+	{
+		JarFile 		jarFile = null;
+		File    		tempFile = null;
+		OutputStream	tempFileStream = null;
+
+		try
+		{
+			jarFile = new JarFile(filename);
+			ZipEntry entry = jarFile.getEntry("META-INF/faces-config.xml");
+
+			if (entry != null)
+			{
+				InputStream stream = jarFile.getInputStream(entry);
+	
+				tempFile = File.createTempFile("tempfile", ".xml");
+				tempFileStream = new FileOutputStream(tempFile);
+	
+				int read = 0;
+				byte[]  buffer = new byte[4096];
+	
+				while ((read = stream.read(buffer)) != -1)
+				{
+					tempFileStream.write(buffer, 0, read);
+				}
+	
+				tempFileStream.close();
+				tempFileStream = null;
+	
+				FacesConfigResourceFactory factory = FacesConfigResourceFactory.createResourceFactoryForJar();
+				//FacesConfigResourceFactory.register(tempFile.toURI().toString());
+				Resource resource = factory.createResource(URI.createFileURI(tempFile.getAbsolutePath()));
+				
+				try {
+                    if (resource != null) {
+                        resource.load(Collections.EMPTY_MAP);
+						EList resourceContents = resource.getContents();
+						if (resourceContents != null && resourceContents.size() > 0) {
+							facesConfig = (FacesConfigType)resourceContents.get(0);
+							if (facesConfig != null) {
+								jsfAppConfigLocater.getJSFAppConfigManager().addFacesConfigChangeAdapter(facesConfig);
+							}
+						}
+					}
+				} catch(IllegalStateException ise) {
+					//log error
+					logLoadError(ise);
+				} catch(IOException ioe) {
+					//log error
+					logLoadError(ioe);
+				}
+			}
+
+			return facesConfig;
+		}
+		catch (IOException ioe)
+		{
+			logLoadError(ioe);
+			return null;
+		}
+		finally
+		{
+			if (jarFile != null)
+			{
+				try
+				{
+					jarFile.close();
+				}
+				catch (IOException ioe)
+				{
+					logLoadError(ioe);
+				}
+			}
+
+			if (tempFileStream != null)
+			{
+				try
+				{
+					tempFileStream.close();
+				}
+				catch(IOException ioe)
+				{
+					logLoadError(ioe);
+				}
+			}
+
+			if (tempFile != null && tempFile.exists())
+			{
+				if (!tempFile.delete())
+				{
+					tempFile.deleteOnExit();
+				}
+			}
+		}
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JSFAppConfigManager.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JSFAppConfigManager.java
index 381fc67..78ba56c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JSFAppConfigManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsfappconfig/JSFAppConfigManager.java
@@ -118,7 +118,7 @@
 		JSFAppConfigManager manager = null;
 		try {
 			Object obj = project.getSessionProperty(KEY_SESSIONPROPERTY);
-			if (obj != null && obj instanceof JSFAppConfigManager) {
+			if (obj instanceof JSFAppConfigManager) {
 				manager = (JSFAppConfigManager)obj;
 			}
 		} catch(CoreException ce) {
@@ -269,7 +269,7 @@
 					if (addedDeltas.length == 1) {
 						IResourceDelta addedDelta = addedDeltas[0];
 						IResource addedResource = addedDelta.getResource();
-						if (addedResource != null && addedResource instanceof IProject) {
+						if (addedResource instanceof IProject) {
 							changeProject((IProject)addedResource);
 						}
 					}
@@ -368,7 +368,7 @@
 	 */
 	public void notifyFacesConfigChangeListeners(Notification notification) {
 		Object emfFeature = notification.getFeature();
-		if (emfFeature != null && emfFeature instanceof EStructuralFeature) {
+		if (emfFeature instanceof EStructuralFeature) {
 			Class emfClass = ((EStructuralFeature)emfFeature).getEType().getInstanceClass();
 			IFacesConfigChangeListener listener = (IFacesConfigChangeListener)facesConfigChangeListeners.get(emfClass);
 			if (listener != null) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryConfigurationHelper.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryConfigurationHelper.java
index 0f9818f..3c29cb1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryConfigurationHelper.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryConfigurationHelper.java
@@ -70,4 +70,17 @@
 		IPath path = cpEntry.getPath();
 		return path != null && path.segmentCount() == 2 && JSF_LIBRARY_CP_CONTAINER_ID.equals(path.segment(0));
 	}
+	
+	/**
+	 * @param project
+	 * @return true if the JSF Faceted project is configured to use system supplied implementation
+	 */
+	public static boolean isConfiguredForSystemSuppliedImplementation(IProject project) {
+		Collection<JSFLibraryReference> refs = getJSFLibraryReferences(project);
+		for(JSFLibraryReference ref : refs){			
+			if (ref instanceof JSFLibraryReferenceServerSupplied)
+				return true;
+		}
+		return false;
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReference.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReference.java
index ee9ed62..9c77f03 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReference.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReference.java
@@ -16,7 +16,8 @@
 
 /**
  * Represents a reference to a JSF Library on a project
- *
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public abstract interface JSFLibraryReference {
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferencePluginProvided.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferencePluginProvided.java
index 7884124..c12f3c2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferencePluginProvided.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferencePluginProvided.java
@@ -11,10 +11,12 @@
 package org.eclipse.jst.jsf.core.jsflibraryconfiguration;
 
 /**
- * A reference to a plugin defined JSF Library
+ * A reference to a plugin-defined JSF Library
  *
+ * <p><b>Provisional API - subject to change</b></p>
  */
-public interface JSFLibraryReferencePluginProvided extends JSFLibraryReferenceUserDefined {
+@SuppressWarnings("deprecation")
+public interface JSFLibraryReferencePluginProvided extends JSFLibraryReferenceUserSpecified, JSFLibraryReferenceUserDefined {
 	/**
 	 * @return plugin id.  May return null if plugin id cannot be determined.  
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceServerSupplied.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceServerSupplied.java
index 50617b1..b03ece3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceServerSupplied.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceServerSupplied.java
@@ -11,8 +11,10 @@
 package org.eclipse.jst.jsf.core.jsflibraryconfiguration;
 
 /**
- * @author gekessle
- *
+ * A reference to a JSF Library where the implementation library is presumed to be coming from the 
+ * server
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public interface JSFLibraryReferenceServerSupplied extends
 		JSFLibraryReference {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceUserDefined.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceUserDefined.java
index 67d8808..f5e69d3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceUserDefined.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceUserDefined.java
@@ -12,7 +12,8 @@
 
 
 /**
- * Represents an reference to a user defined JSF Library
+ * Represents an reference to a user specified JSF Library
+ * @deprecated use JSFLibraryReferenceUserSpecified 
  */
 public interface JSFLibraryReferenceUserDefined extends JSFLibraryReference {
 	//
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceUserSpecified.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceUserSpecified.java
new file mode 100644
index 0000000..c0ba3a8
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFLibraryReferenceUserSpecified.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsf.core.jsflibraryconfiguration;
+
+
+/**
+ * Represents an reference to a user specified JSF Library
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ */
+public interface JSFLibraryReferenceUserSpecified extends JSFLibraryReference {
+	//
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFVersion.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFVersion.java
index a0f36cf..b4e14d4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFVersion.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/JSFVersion.java
@@ -11,8 +11,9 @@
 package org.eclipse.jst.jsf.core.jsflibraryconfiguration;
 
 /**
- * @author gekessle
+ * Enumeration of JavaServer Faces Versions
  *
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public enum JSFVersion {
 	
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/internal/JSFLibraryReferenceFacadeFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/internal/JSFLibraryReferenceFacadeFactory.java
index 8f371e5..cb15c67 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/internal/JSFLibraryReferenceFacadeFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/internal/JSFLibraryReferenceFacadeFactory.java
@@ -24,14 +24,14 @@
  */
 public class JSFLibraryReferenceFacadeFactory {
 	/**
-	 * Returns a JSFLibraryReferenceUserDefined or JSFLibraryReferencePluginProvided instance.
+	 * Returns a JSFLibraryReferenceUserSpecified (or JSFLibraryReferenceUserDefined})  or JSFLibraryReferencePluginProvided instance.
 	 * Will not create a JSFLibraryReferenceServerSupplied as there is no cp entry.   Use createServerSuppliedJSFLibRef instead.
-	 * @param cpEntry
-	 * @return an instance of JSFLibraryInternalReference.  Null will be returned if the cpEntry is not a 
+	 * @param classpathEntry
+	 * @return an instance of JSFLibraryInternalReference.  Null will be returned if the cpEntry is not a JSF Library reference.
 	 */
-	public static JSFLibraryReference create(final IClasspathEntry cpEntry) {
-		if (JSFLibraryConfigurationHelper.isJSFLibraryContainer(cpEntry)){
-			return createReference(cpEntry);
+	public static JSFLibraryReference create(final IClasspathEntry classpathEntry) {
+		if (JSFLibraryConfigurationHelper.isJSFLibraryContainer(classpathEntry)){
+			return createReference(classpathEntry);
 		}
 		return null;
 	}
@@ -45,26 +45,26 @@
 
 
 	/**
-	 * @param cpEntry
+	 * @param classpathEntry
 	 * @return {@link JSFLibraryReference}
 	 */
 	private static JSFLibraryReference createReference(
-			final IClasspathEntry cpEntry) {
+			final IClasspathEntry classpathEntry) {
 		
-		String libID = cpEntry.getPath().segment(1).toString();
+		String libID = classpathEntry.getPath().segment(1);
 		org.eclipse.jst.jsf.core.internal.jsflibraryconfig.JSFLibraryInternalReference libRef = JSFLibraryRegistryUtil.getInstance().getJSFLibraryReferencebyID(libID);
 		if (libRef!= null){
-			boolean isDeployed = getJ2EEModuleDependency(cpEntry);
-			if (libRef.getLibrary() != null && libRef.getLibrary() instanceof PluginProvidedJSFLibrary)
+			boolean isDeployed = getJ2EEModuleDependency(classpathEntry);
+			if (libRef.getLibrary() instanceof PluginProvidedJSFLibrary)
 				return new JSFLibraryReferencePluginProvidedImpl(libRef, isDeployed);
 			
-			return new JSFLibraryReferenceUserDefinedImpl(libRef, isDeployed);
+			return new JSFLibraryReferenceUserSpecifiedImpl(libRef, isDeployed);
 		}
 		return null;
 	}
 
-	private static boolean getJ2EEModuleDependency(IClasspathEntry cpEntry) {
-		IClasspathAttribute[] attrs = cpEntry.getExtraAttributes();
+	private static boolean getJ2EEModuleDependency(IClasspathEntry classpathEntry) {
+		IClasspathAttribute[] attrs = classpathEntry.getExtraAttributes();
 		for (int i=0;i<attrs.length;i++){
 			IClasspathAttribute attr = attrs[i];
 			if (attr.getName().equals(IClasspathDependencyConstants.CLASSPATH_COMPONENT_DEPENDENCY)){
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/internal/JSFLibraryReferenceUserSpecifiedImpl.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/internal/JSFLibraryReferenceUserSpecifiedImpl.java
new file mode 100644
index 0000000..833ed20
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/internal/JSFLibraryReferenceUserSpecifiedImpl.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.jsf.core.jsflibraryconfiguration.internal;
+
+import org.eclipse.jst.jsf.core.internal.jsflibraryconfig.JSFLibraryInternalReference;
+import org.eclipse.jst.jsf.core.jsflibraryconfiguration.JSFLibraryReferenceUserDefined;
+import org.eclipse.jst.jsf.core.jsflibraryconfiguration.JSFLibraryReferenceUserSpecified;
+
+/**
+ * Implementation of a reference to a user specified JSF Library  
+ *
+ */
+@SuppressWarnings("deprecation")
+public class JSFLibraryReferenceUserSpecifiedImpl extends AbstractJSFLibraryReferenceImpl implements JSFLibraryReferenceUserSpecified, JSFLibraryReferenceUserDefined{
+	/**
+	 * @param libRef of type {@link JSFLibraryInternalReference}
+	 * @param isDeployed
+	 */
+	public JSFLibraryReferenceUserSpecifiedImpl(
+			JSFLibraryInternalReference libRef, boolean isDeployed) {
+
+		super(libRef, isDeployed);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jst.jsf.core.jsflibraryconfiguration.internal.AbstractJSFLibraryReferenceImpl#toString()
+	 */
+	public String toString() {
+		StringBuffer buf = new StringBuffer("UserSpecified: (");
+		buf.append(super.toString());
+		buf.append(")");
+		
+		return buf.toString();
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/package-info.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/package-info.java
new file mode 100644
index 0000000..78bd2ce
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/jsflibraryconfiguration/package-info.java
@@ -0,0 +1,17 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+
+/**
+ * This package is used to provide adopters with a mechanism to deal with JSF Library references.
+ * <p><b>Provisional API - subject to change</b></p>
+ */
+package org.eclipse.jst.jsf.core.jsflibraryconfiguration;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/internal/metadata/HTMLContentModelMetaDataTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/HTMLContentModelMetaDataTranslator.java
similarity index 81%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/internal/metadata/HTMLContentModelMetaDataTranslator.java
rename to jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/HTMLContentModelMetaDataTranslator.java
index 2c24cec..64e707e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/internal/metadata/HTMLContentModelMetaDataTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/HTMLContentModelMetaDataTranslator.java
@@ -9,10 +9,11 @@
  *    Oracle - initial API and implementation
  *    
  ********************************************************************************/
-package org.eclipse.jst.pagedesigner.editors.palette.internal.metadata;
+package org.eclipse.jst.jsf.core.metadata.internal;
 
 import org.eclipse.jst.jsf.common.metadata.internal.AbstractTagLibDomainContentModelMetaDataTranslator;
 import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant;
+import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider;
 import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataTranslator;
 import org.eclipse.wst.html.core.internal.contentmodel.HTMLCMDocument;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
@@ -22,13 +23,20 @@
  */
 public class HTMLContentModelMetaDataTranslator extends AbstractTagLibDomainContentModelMetaDataTranslator implements IMetaDataTranslator {
 
+	public boolean canTranslate(IMetaDataSourceModelProvider modelProvider) {		
+		if (modelProvider != null &&			
+				modelProvider.getSourceModel() instanceof HTMLCMDocument)
+			return true;
+		return false;
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataTranslator#translate(org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant)
 	 */
 	public void translate(final IMetaDataModelMergeAssistant assistant) {
 		_assistant = assistant;
 		CMDocument doc = getSourceModel();
-		if (doc!= null && doc instanceof HTMLCMDocument){
+		if (doc instanceof HTMLCMDocument){
 			doTranslate(doc);			
 		}
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/src/org/eclipse/jst/pagedesigner/jsp/core/internal/metadata/JSPContentModelMetaDataTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/JSPContentModelMetaDataTranslator.java
similarity index 80%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/src/org/eclipse/jst/pagedesigner/jsp/core/internal/metadata/JSPContentModelMetaDataTranslator.java
rename to jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/JSPContentModelMetaDataTranslator.java
index d3b9c8d..95ed2a0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/src/org/eclipse/jst/pagedesigner/jsp/core/internal/metadata/JSPContentModelMetaDataTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/JSPContentModelMetaDataTranslator.java
@@ -9,10 +9,11 @@
  *    Oracle - initial API and implementation
  *    
  ********************************************************************************/
-package org.eclipse.jst.pagedesigner.jsp.core.internal.metadata;
+package org.eclipse.jst.jsf.core.metadata.internal;
 
 import org.eclipse.jst.jsf.common.metadata.internal.AbstractTagLibDomainContentModelMetaDataTranslator;
 import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant;
+import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider;
 import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataTranslator;
 import org.eclipse.wst.html.core.internal.contentmodel.JSPCMDocument;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
@@ -22,10 +23,17 @@
  */
 public class JSPContentModelMetaDataTranslator extends AbstractTagLibDomainContentModelMetaDataTranslator implements IMetaDataTranslator {
 
+	public boolean canTranslate(IMetaDataSourceModelProvider modelProvider) {		
+		if (modelProvider != null &&
+				modelProvider.getSourceModel() instanceof JSPCMDocument)
+			return true;
+		return false;
+	}
+	
 	public void translate(final IMetaDataModelMergeAssistant assistant) {
 		setAssistant(assistant);
 		CMDocument doc = getSourceModel();
-		if (doc!= null && doc instanceof JSPCMDocument){
+		if (doc instanceof JSPCMDocument){
 			doTranslate(doc);			
 		}
 	}
@@ -37,9 +45,7 @@
 		return "JSP Tags";
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.jsf.common.metadata.internal.AbstractTagLibDomainContentModelMetaDataTranslator#getURIDisplayLabel()
-	 */
+	@Override
 	protected String getURIDisplayLabel() {		
 		return "JSP";
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/src/org/eclipse/jst/pagedesigner/jsp/core/internal/metadata/TaglibMetaDataLocator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/TaglibMetaDataLocator.java
similarity index 98%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/src/org/eclipse/jst/pagedesigner/jsp/core/internal/metadata/TaglibMetaDataLocator.java
rename to jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/TaglibMetaDataLocator.java
index 78c7802..0275afc 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/src/org/eclipse/jst/pagedesigner/jsp/core/internal/metadata/TaglibMetaDataLocator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/TaglibMetaDataLocator.java
@@ -9,7 +9,7 @@
  *    Oracle - initial API and implementation
  *    
  ********************************************************************************/
-package org.eclipse.jst.pagedesigner.jsp.core.internal.metadata;
+package org.eclipse.jst.jsf.core.metadata.internal;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/src/org/eclipse/jst/pagedesigner/jsp/core/internal/metadata/TaglibMetaDataTLDTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/TaglibMetaDataTLDTranslator.java
similarity index 73%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/src/org/eclipse/jst/pagedesigner/jsp/core/internal/metadata/TaglibMetaDataTLDTranslator.java
rename to jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/TaglibMetaDataTLDTranslator.java
index a438b3e..73696da 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/src/org/eclipse/jst/pagedesigner/jsp/core/internal/metadata/TaglibMetaDataTLDTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/metadata/internal/TaglibMetaDataTLDTranslator.java
@@ -9,13 +9,16 @@
  *    Oracle - initial API and implementation
  *    
  ********************************************************************************/
-package org.eclipse.jst.pagedesigner.jsp.core.internal.metadata;
+package org.eclipse.jst.jsf.core.metadata.internal;
 
 import org.eclipse.jst.jsf.common.metadata.internal.AbstractTagLibDomainContentModelMetaDataTranslator;
 import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant;
+import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider;
 import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataTranslator;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDAttributeDeclaration;
 import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument;
 import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
 
@@ -25,13 +28,20 @@
  */
 public class TaglibMetaDataTLDTranslator extends AbstractTagLibDomainContentModelMetaDataTranslator implements IMetaDataTranslator {
 
+	public boolean canTranslate(IMetaDataSourceModelProvider modelProvider) {		
+		if (modelProvider != null && 
+				modelProvider.getSourceModel() instanceof TLDDocument)
+			return true;
+		return false;
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataTranslator#translate(org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant)
 	 */
 	public void translate(final IMetaDataModelMergeAssistant assistant) {
 		setAssistant(assistant);
 		CMDocument doc = getSourceModel();
-		if (doc != null && doc instanceof TLDDocument){
+		if (doc instanceof TLDDocument){
 			doTranslate(doc);
 			
 		}
@@ -109,4 +119,25 @@
 		return (TLDDocument)getSourceModel();
 	}
 
+	@Override
+	protected String getTagAttributeDescription(CMAttributeDeclaration cmAttr) {
+		String desc = ((TLDAttributeDeclaration)cmAttr).getDescription();
+		if (desc == null)
+			desc = super.getTagAttributeDescription(cmAttr);
+		return desc;
+	}
+
+	@Override
+	protected boolean getTagAttributeIsRequired(CMAttributeDeclaration cmAttr) {
+		// TODO Auto-generated method stub
+		return super.getTagAttributeIsRequired(cmAttr);
+	}
+	
+	@Override
+	protected String getTagAttributeDefaultValue(CMAttributeDeclaration cmAttr) {
+		String val = ((TLDAttributeDeclaration)cmAttr).getAttrType().generateInstanceValue();
+		if (val == null)
+			val = super.getTagAttributeDefaultValue(cmAttr);
+		return val;
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/set/constraint/MemberConstraint.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/set/constraint/MemberConstraint.java
index 3f74dcf..e6e69ca 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/set/constraint/MemberConstraint.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/set/constraint/MemberConstraint.java
@@ -16,9 +16,11 @@
 import org.eclipse.jst.jsf.common.sets.constraint.AbstractSetConstraint;
 
 /**
- * A set constraints that satisfies if a test set contains all of the specified
+ * A set constraint that is satisfied if a test set contains all of the specified
  * mustBeMembers.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/set/mapping/ElementToTagIdentifierMapping.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/set/mapping/ElementToTagIdentifierMapping.java
index a680a20..5af60bf 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/set/mapping/ElementToTagIdentifierMapping.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/set/mapping/ElementToTagIdentifierMapping.java
@@ -23,6 +23,8 @@
  * maintain immutability and idempotency as long as the input dom elements
  * do not change. 
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/EvaluationException.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/EvaluationException.java
index a72566a..0774212 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/EvaluationException.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/EvaluationException.java
@@ -12,6 +12,9 @@
 
 /**
  * Wraps an exception thrown during algorithm evaluation
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/InvalidExpressionException.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/InvalidExpressionException.java
index 806dd4e..2651db8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/InvalidExpressionException.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/InvalidExpressionException.java
@@ -11,9 +11,11 @@
 package org.eclipse.jst.jsf.core.tagmatcher;
 
 /**
- * Indicates an exception trapped will compiling or evaluating an
+ * Indicates an exception trapped while compiling or evaluating an
  * expression.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/TagMatchingAlgorithm.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/TagMatchingAlgorithm.java
index 3c159d2..11bce86 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/TagMatchingAlgorithm.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/TagMatchingAlgorithm.java
@@ -27,7 +27,9 @@
  *    the same node in the same DOM tree.
  * 2) evaluate must be able to be called on any number of nodes in order and always
  * produce the same result independent of what was called before and in what order.
- * 
+ *  
+ * <p><b>Provisional API - subject to change</b></p>
+ *
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/XPathMatchingAlgorithm.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/XPathMatchingAlgorithm.java
index 2bf0181..9ce74dd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/XPathMatchingAlgorithm.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/tagmatcher/XPathMatchingAlgorithm.java
@@ -31,6 +31,8 @@
  * an empty set (no match) unless the strictMatching flag is set to true, in which
  * case it will re-throw the exception wrapped as an unchecked EvaluationException.
  * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
  * @author cbateman
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DTAppManagerUtil.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DTAppManagerUtil.java
new file mode 100644
index 0000000..9d788e3
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DTAppManagerUtil.java
@@ -0,0 +1,114 @@
+package org.eclipse.jst.jsf.designtime;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler;
+import org.eclipse.jst.jsf.designtime.internal.view.IViewDefnAdapter;
+import org.eclipse.jst.jsf.designtime.internal.view.IViewDefnAdapterFactory;
+import org.eclipse.jst.jsf.designtime.internal.view.XMLViewDefnAdapter;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException;
+
+/**
+ * Utility methods for dealing with {@link DesignTimeApplicationManager}
+ * 
+ * @author cbateman
+ * 
+ */
+public class DTAppManagerUtil
+{
+    /**
+     * @param context
+     * @return the view adapter for context or null if none.
+     */
+    public static XMLViewDefnAdapter getXMLViewDefnAdapter(
+            final IStructuredDocumentContext context)
+    {
+        final IWorkspaceContextResolver wkResolver =
+                IStructuredDocumentContextResolverFactory.INSTANCE
+                        .getWorkspaceContextResolver(context);
+
+        final IProject project = wkResolver.getProject();
+        final IResource res = wkResolver.getResource();
+
+        if (project != null && res instanceof IFile)
+        {
+            return getXMLViewDefnAdapter(project, (IFile) res);
+        }
+        // not found
+        return null;
+    }
+
+    /**
+     * Equivalent to getXMLViewDefnAdapter(file.getProject(), file)
+     * 
+     * @param file
+     * @return the XMLViewDefnAdapter or null
+     */
+    public static XMLViewDefnAdapter getXMLViewDefnAdapter(final IFile file)
+    {
+        return getXMLViewDefnAdapter(file.getProject(), file);
+    }
+
+    /**
+     * @param project
+     * @param file
+     * @return an XMLViewDefnAdapter for file in project or null if not
+     *         applicable
+     */
+    public static XMLViewDefnAdapter getXMLViewDefnAdapter(
+            final IProject project, final IFile file)
+    {
+        final DesignTimeApplicationManager manager =
+                DesignTimeApplicationManager.getInstance(project);
+
+        if (manager == null)
+        {
+            return null;
+        }
+        final IDTViewHandler viewHandler =
+                DesignTimeApplicationManager.getInstance(project)
+                        .getViewHandler();
+        try
+        {
+            final DTFacesContext facesContext = manager.getFacesContext(file);
+            final IViewDefnAdapterFactory factory =
+                    viewHandler.getViewMetadataAdapterFactory(facesContext);
+            final IViewDefnAdapter adapter =
+                    factory.createAdapter(facesContext, viewHandler.getViewId(
+                            facesContext, file));
+
+            if (adapter instanceof XMLViewDefnAdapter)
+            {
+                return (XMLViewDefnAdapter) adapter;
+            }
+        }
+        catch (final ViewHandlerException e)
+        {
+            JSFCorePlugin.log(e, "");
+        }
+        return null;
+    }
+
+    /**
+     * @param project
+     * @return the view handler for project or null if none.
+     */
+    public static IDTViewHandler getViewHandler(final IProject project)
+    {
+        final DesignTimeApplicationManager manager =
+                DesignTimeApplicationManager.getInstance(project);
+
+        if (manager == null)
+        {
+            return null;
+        }
+        return DesignTimeApplicationManager.getInstance(project)
+                .getViewHandler();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DesignTimeApplicationManager.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DesignTimeApplicationManager.java
index 79abedc..849cf32 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DesignTimeApplicationManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/DesignTimeApplicationManager.java
@@ -22,18 +22,22 @@
 import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.core.jsfappconfig.JSFAppConfigUtils;
 import org.eclipse.jst.jsf.designtime.context.AbstractDTExternalContextFactory;
 import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
 import org.eclipse.jst.jsf.designtime.context.IExternalContextFactoryLocator;
 import org.eclipse.jst.jsf.designtime.el.AbstractDTMethodResolver;
 import org.eclipse.jst.jsf.designtime.el.AbstractDTPropertyResolver;
 import org.eclipse.jst.jsf.designtime.el.AbstractDTVariableResolver;
+import org.eclipse.jst.jsf.designtime.internal.view.DefaultDTViewHandler;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler;
 
 
 /**
  * Per-web-application manager that manages design time information for a corresponding
  * project.
  * 
+ * TODO: migrate to managed singleton
  * @author cbateman
  *
  */
@@ -80,14 +84,14 @@
         
     private static final String   DEFAULT_METHOD_RESOLVER_ID =
         "org.eclipse.jst.jsf.core.methodresolver.default"; //$NON-NLS-1$
-    
+
     /**
      * @param project
      * @return the app manager associated with project
      */
     public final static DesignTimeApplicationManager getInstance(IProject project)
     {
-        if (project == null)
+        if (!hasJSFDesignTime(project))
         {
             return null;
         }
@@ -96,16 +100,30 @@
         {
             synchronized(project)
             {
-                Object manager = 
-                    project.getSessionProperty(SESSION_PROPERTY_KEY_PROJECT);
-    
+                DesignTimeApplicationManager manager = 
+                    (DesignTimeApplicationManager) project.getSessionProperty(SESSION_PROPERTY_KEY_PROJECT);
+
+                
                 if (manager == null)
                 {
                     manager = new DesignTimeApplicationManager(project);
                     project.setSessionProperty(SESSION_PROPERTY_KEY_PROJECT, manager);
                 }
-                
-                return (DesignTimeApplicationManager) manager;
+                // bug 147729: if project was renamed, the project param will be
+                // valid, but it will not be in sync with the one for _project
+                // unfortunately, since we are using session propertie
+                else
+                {
+                    synchronized(manager)
+                    {
+                        if (!project.equals(manager._project))
+                        {
+                            manager._project = project;
+                        }
+                    }
+                }
+
+                return manager;
             }
         }
         catch (CoreException ce)
@@ -116,9 +134,30 @@
         return null;
     }
     
+    /**
+     * The criteria for a project having a JSF design time are:
+     * 
+     * - project is non-null.
+     * - project is accessible (project.isAccessible() == true)
+     * - project has a JSF facet (this implies that it's dependent facets are also present).
+     * 
+     * @param project
+     * @return true if project can have a JSF DesignTimeApplicationManager
+     * associated with it.  getInstance(project) uses this determine if should
+     * construct an instance for a project.
+     */
+    public static boolean hasJSFDesignTime(final IProject project)
+    {
+        return project != null && project.isAccessible() &&
+            JSFAppConfigUtils.isValidJSFProject(project);
+    }
+    
     // instance definition
-    private final IProject                              _project;
+    // _project must be writable in case the manager needs to be retargetted
+    // after a rename/move etc.
+    private IProject                                    _project;
     private final IExternalContextFactoryLocator        _locator;
+    private IDTViewHandler                              _viewHandler;
     
     private DesignTimeApplicationManager(IProject project)
     {
@@ -132,7 +171,10 @@
      */
     public DTFacesContext getFacesContext(IFile file)
     {
-        assert file != null;
+        if (!hasDTFacesContext(file))
+        {
+            return null;
+        }
         
         try
         {
@@ -142,7 +184,7 @@
                 
                 if (context == null)
                 {
-                    context = new DTFacesContext(_locator);
+                    context = new DTFacesContext(file, _locator);
                     file.setSessionProperty(SESSION_PROPERTY_KEY_PROJECT, context);
                 }
                 
@@ -162,6 +204,48 @@
     }
     
     /**
+     * Only files for which a runtime request context will be generated
+     * have a corresponding design time context.  This is generally confined
+     * to view definition files such as JSP's.
+     * 
+     * General criteria for a file to have a design time faces context are:
+     * 
+     * - the file is non-null and isAccessible()
+     * - the file has designtime view handler (getViewHandler(file) != null)
+     * and it supports the content type of file.
+     *
+     * getFacesContext uses this to decide whether to generate a context
+     * for an IFile.
+     * 
+     * @param file
+     * @return true if file has a design time faces context
+     */
+    public boolean hasDTFacesContext(final IFile file)
+    {
+        IDTViewHandler viewHandler = getViewHandler();
+        
+        if (file != null && file.isAccessible()&&
+                viewHandler != null && viewHandler.supportsViewDefinition(file))
+        {
+            return true;
+        }
+        return false;
+    }
+    /**
+     * @return the design time view handler for this webap (project).
+     */
+    public synchronized IDTViewHandler getViewHandler()
+    {
+        // TODO: lifecycle issues; extensibility.
+        if (_viewHandler == null)
+        {
+            _viewHandler = new DefaultDTViewHandler();
+        }
+        
+        return _viewHandler;
+    }
+    
+    /**
      * @param resolverPluginId
      * @throws CoreException
      */
@@ -214,6 +298,15 @@
                              DEFAULT_VARIABLE_RESOLVER_ID);
     }
     
+    /**
+     * @return the default property resolver that will be used if no other
+     * is provided.  The default property resolver is intended to match the
+     * similar resolver used by the runtime.
+     */
+    public synchronized AbstractDTPropertyResolver getDefaultPropertyResolver()
+    {
+        return JSFCorePlugin.getPropertyResolvers().get(DEFAULT_PROPERTY_RESOLVER_ID);
+    }
     
     /**
      * @return the designtime property resolver for this application 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/AbstractDTExternalContext.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/AbstractDTExternalContext.java
index 44c2fc6..ec65d43 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/AbstractDTExternalContext.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/AbstractDTExternalContext.java
@@ -87,4 +87,13 @@
     {
         return getMapForScope(ISymbolConstants.SYMBOL_SCOPE_NONE);
     }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.jsf.designtime.context.IDTExternalContext#getRequestContextPath()
+     */
+    public String getRequestContextPath() 
+    {
+        // API: do we need to support default behaviour here?
+        return null;
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/DTFacesContext.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/DTFacesContext.java
index d0ae967..a9f6333 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/DTFacesContext.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/DTFacesContext.java
@@ -13,7 +13,13 @@
 package org.eclipse.jst.jsf.designtime.context;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.designtime.DesignTimeApplicationManager;
+import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException;
 
 /**
  * Represents a design-time version of the JSF FacesContext for a particular
@@ -27,15 +33,28 @@
 public final class DTFacesContext 
 {
     private final IExternalContextFactoryLocator   _locator;
-    
+    private IAdaptable                             _contextObject;
+    private DTUIViewRoot                          _viewRoot;
+
+    /**
+     * @param contextObject
+     * @param locator
+     */
+    public DTFacesContext(final IAdaptable contextObject, final IExternalContextFactoryLocator locator)
+    {
+        _contextObject = contextObject;
+        _locator = locator;
+    }
+
     /**
      * @param locator
+     * @deprecated Use DTFacesContext(IAdaptable, IExternalContextFactoryLocator)
      */
     public DTFacesContext(final IExternalContextFactoryLocator locator)
     {
         _locator = locator;
     }
-    
+
     /**
      * @param contextObject -- the object corresponding to the external context.
      * Usually an IFile point to a file containing the external context.  It must
@@ -46,9 +65,8 @@
      */
     public IDTExternalContext getDTExternalContext(final IAdaptable contextObject)
     {
-        
         IDTExternalContext externalContext = null;
-        
+
         // if the context object is an IFile or can be adapted to one, create a
         // new externalContext for it
         if (contextObject instanceof IFile
@@ -58,14 +76,56 @@
             AbstractDTExternalContextFactory factory = _locator.getFactory();
             externalContext = factory.create(contextObject);
         }
-        
+
         return externalContext;
     }
+
+    /**
+     * @return the view root for the associated context object or null
+     * if there is no context object.
+     */
+    public DTUIViewRoot getViewRoot()
+    {
+        IResource contextResource = adaptContextObject();
+        // need to check for context object because of deprecated
+        // constructor.
+        if (contextResource != null)
+        {
+            if (_viewRoot == null)
+            {
+                // if the view root hasn't been created, then do so
+                // and populate it
+                IDTViewHandler  viewHandler = getViewHandler();
+                
+                if  (viewHandler != null)
+                {
+                    String viewId = viewHandler.getViewId(this, contextResource);
+                    
+                    try {
+                        _viewRoot = viewHandler.createView(this, viewId);
+                        
+                        // per the createView contract, the framework
+                        // will set the view id to the default value
+                        // if the viewHandler doesn't set it.
+                        if (_viewRoot.getViewId() == null)
+                        {
+                            _viewRoot.setViewId(viewId);
+                        }
+                    } catch (ViewHandlerException e) {
+                        JSFCorePlugin.log(e, "While creating dt viewroot for viewId: "+viewId);
+                    }
+                }
+            }
+        }
+        
+        return _viewRoot;
+    }
     
     private String _localeString = ""; //$NON-NLS-1$
     
     /**
      * @return the current locale string
+     * @deprecated Use IDTViewHandler.calculateLocale instead
      */
     public String getLocaleString()
     {
@@ -74,9 +134,47 @@
     
     /**
      * @param newLocaleString
+     * @deprecated Use IDTViewHandler.calculateLocale instead
      */
     public void setLocaleString(final String newLocaleString)
     {
         _localeString = newLocaleString;
     }
+    
+    private IDTViewHandler getViewHandler()
+    {
+        IDTViewHandler viewHandler = null;
+        IResource res = adaptContextObject();
+
+        if (res != null)
+        {
+            final DesignTimeApplicationManager manager =
+                DesignTimeApplicationManager.getInstance(res.getProject());
+            if (manager != null)
+            {
+                viewHandler = manager.getViewHandler();
+            }
+        }
+
+        return viewHandler;
+    }
+    
+    /**
+     * @return the resource correspondinng to context object or null
+     * if it cannot be adapted to an IResource
+     */
+    public IResource adaptContextObject()
+    {
+        if (_contextObject instanceof IResource)
+        {
+            return (IResource) _contextObject;
+        }
+        else if  (_contextObject != null && 
+                    _contextObject.getAdapter(IResource.class) != null)
+        {
+            return (IResource) _contextObject.getAdapter(IResource.class);
+        }
+        
+        return null;
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/DTJSPExternalContext.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/DTJSPExternalContext.java
index 6add410..8c870d1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/DTJSPExternalContext.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/DTJSPExternalContext.java
@@ -19,6 +19,7 @@
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jst.j2ee.web.componentcore.util.WebArtifactEdit;
 import org.eclipse.jst.jsf.common.JSFCommonPlugin;
 import org.eclipse.jst.jsf.context.symbol.ISymbol;
 import org.eclipse.jst.jsf.context.symbol.source.ISymbolConstants;
@@ -40,7 +41,7 @@
      * 
      */
     private final IFile     _jspFile;
-    
+
     /**
      * Construct a default external context
      * 
@@ -72,9 +73,10 @@
             throw new AssertionError("jspFile must be adapable to an IFile"); //$NON-NLS-1$
         }
     }
-    
+
     @Override
-    protected Map doGetMapForScope(final int scopeMask) {
+    protected Map doGetMapForScope(final int scopeMask) 
+    {
         final Map  map = new HashMap();
         
         for (final Iterator it = JSFCommonPlugin.getSymbolSourceProviders().iterator(); it.hasNext();)
@@ -89,11 +91,10 @@
                 map.put(symbols[i].getName(), symbols[i]);
             }
         }
-        
+
         return map;
     }
 
-    
     /**
      * @param stream
      */
@@ -104,7 +105,7 @@
                                 ISymbolConstants.SYMBOL_SCOPE_APPLICATION_STRING,
                                 ISymbolConstants.SYMBOL_SCOPE_NONE_STRING
                                 };
-        Map[]     symbolMaps = {getRequestMap(), getSessionMap(), getApplicationMap()};
+        Map[]     symbolMaps = {getRequestMap(), getSessionMap(), getApplicationMap(), getNoneMap()};
 
         for (int i = 0; i < scopeNames.length; i++)
         {
@@ -119,4 +120,54 @@
             }
         }
     }
+
+    @Override
+    public String getRequestContextPath() 
+    {
+        WebArtifactEdit  artifactEdit = null;
+        String path = null;
+        
+        try
+        {
+            // TODO: EARs?
+            artifactEdit = 
+                WebArtifactEdit.getWebArtifactEditForRead(_jspFile.getProject());
+            path = artifactEdit.getServerContextRoot();
+        }
+        finally
+        {
+            if (artifactEdit != null)
+            {
+                artifactEdit.dispose();
+            }
+        }
+        return path;
+    }
+
+//    @Override
+//    public String getRequestPathInfo() {
+//        // TODO Auto-generated method stub
+//        return super.getRequestPathInfo();
+//    }
+//
+//    @Override
+//    public String getRequestServletPath() {
+//        // TODO Auto-generated method stub
+//        return super.getRequestServletPath();
+//    }
+
+//    private void getWebApp()
+//    {
+//        final IProject project = _jspFile.getProject();
+//
+//        final IModelProvider provider = 
+//            ModelProviderManager.getModelProvider(project);
+//        Object webAppObj = provider.getModelObject();
+//        
+//        if (webAppObj != null)
+//        {
+//            //
+//        }
+//        
+//    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/IDTExternalContext.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/IDTExternalContext.java
index 3df048c..7c1cecc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/IDTExternalContext.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/context/IDTExternalContext.java
@@ -34,7 +34,7 @@
      * 
      * Map is unmodifiable (throws exception on mutation operations)
      */
-    public abstract Map<String, ISymbol> getMapForScope(int scopeMask);
+    Map<String, ISymbol> getMapForScope(int scopeMask);
 
     /**
      * @return a map of ISymbols representing the currently available
@@ -42,26 +42,42 @@
      * 
      * Map is unmodifiable (throws exception on mutation operations)
      */
-    public abstract Map<String, ISymbol> getRequestMap();
+    Map<String, ISymbol> getRequestMap();
 
     /**
      * @return a map of ISymbols representing the currently available
      * session scope variables.  Never null, empty if no symbols
      * Map is unmodifiable (throws exception on mutation operations)
      */
-    public abstract Map<String, ISymbol> getSessionMap();
+    Map<String, ISymbol> getSessionMap();
 
     /**
      * @return a map of ISymbols representing the currently available
      * application scope variables.  Never null, empty if no symbols
      * Map is unmodifiable (throws exception on mutation operations)
      */
-    public abstract Map<String, ISymbol> getApplicationMap();
+    Map<String, ISymbol> getApplicationMap();
     
     /**
      * @return a map of ISymbols representing the currently available
      * none scope variables.  Never null, empty if no symbols
      * Map is unmodifiable (throws exception on mutation operations)
      */
-    public abstract Map<String, ISymbol> getNoneMap();
+    Map<String, ISymbol> getNoneMap();
+    
+    /**
+     * Servlet 2.3_SRV.4.4: The context path of the application. 
+     * 
+     * @return the request context path
+     */
+    String getRequestContextPath();
+
+    /**
+     * Find all of the possible url-pattern's in the container that 
+     * could match the underlying resource.  Normally this will be single
+     * element list.  It will only 
+     * 
+     * @return
+     */
+//    List<String> getAllContainerMappings();
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/el/DefaultDTVariableResolver.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/el/DefaultDTVariableResolver.java
index 7b9aee5..44d53a2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/el/DefaultDTVariableResolver.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/el/DefaultDTVariableResolver.java
@@ -46,9 +46,9 @@
         // check implicits first
         final DefaultBuiltInSymbolProvider builtins =
             DefaultBuiltInSymbolProvider.getInstance();
-        
+
         ISymbol  symbol = builtins.getSymbol(name, externalContextKey, ISymbolConstants.SYMBOL_SCOPE_ALL);
-        
+
         if (symbol != null)
         {
             return symbol;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPDefaultSymbolFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPDefaultSymbolFactory.java
index 5edf7a9..f53de12 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPDefaultSymbolFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPDefaultSymbolFactory.java
@@ -22,11 +22,13 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jst.jsf.common.internal.types.TypeConstants;
 import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
 import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
 import org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver;
 import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.symbol.IBoundedJavaTypeDescriptor;
 import org.eclipse.jst.jsf.context.symbol.IComponentSymbol;
 import org.eclipse.jst.jsf.context.symbol.IMapTypeDescriptor;
 import org.eclipse.jst.jsf.context.symbol.ISymbol;
@@ -112,7 +114,8 @@
      */
     public boolean supports(IAdaptable context) 
     {
-        return context.getAdapter(IStructuredDocumentContext.class) != null;
+        return context != null && 
+        	context.getAdapter(IStructuredDocumentContext.class) != null;
     }
     
     private ISymbol handleHtmlTags(String symbolName, Node owningElement, Attr attr, IStructuredDocumentContext context, List problems)
@@ -197,6 +200,15 @@
                 {
                     problems.add(new Status(IStatus.ERROR, JSFCorePlugin.PLUGIN_ID, 0,Messages.getString("JSPDefaultSymbolFactory.Problem.ErrorCreatingVariable"), ce)); //$NON-NLS-1$
                 }
+                
+                final IBoundedJavaTypeDescriptor typeDesc = SymbolFactory.eINSTANCE.createIBoundedJavaTypeDescriptor();
+                typeDesc.setTypeSignatureDelegate( TypeConstants.TYPE_JAVAOBJECT );
+                final IComponentSymbol symbol = SymbolFactory.eINSTANCE.createIComponentSymbol();
+                symbol.setName(symbolName);
+                symbol.setTypeDescriptor(typeDesc);
+                symbol.setDetailedDescription(Messages.getString("JSPDefaultSymbolFactory.Resource.bundle.map.detailedDescription")+baseNameNode.getNodeValue()+"</i>"); //$NON-NLS-1$ //$NON-NLS-2$
+                
+                return symbol;
             }
         }
         return null;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java
index 18436fc..313262b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/JSPModelProcessor.java
@@ -18,15 +18,20 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.locks.ReentrantLock;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jst.jsf.common.JSFCommonPlugin;
+import org.eclipse.jst.jsf.common.internal.resource.IResourceLifecycleListener;
+import org.eclipse.jst.jsf.common.internal.resource.LifecycleListener;
+import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent;
+import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.EventType;
+import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.ReasonType;
 import org.eclipse.jst.jsf.common.metadata.Trait;
 import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper;
 import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
@@ -45,8 +50,6 @@
 import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
 import org.eclipse.jst.jsp.core.internal.domdocument.DOMModelForJSP;
 import org.eclipse.wst.sse.core.StructuredModelManager;
-import org.eclipse.wst.sse.core.internal.model.ModelLifecycleEvent;
-import org.eclipse.wst.sse.core.internal.provisional.IModelLifecycleListener;
 import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
 import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
@@ -64,148 +67,207 @@
  */
 public class JSPModelProcessor
 {
-    private final static String SESSION_PROPERTY_QUALIFIER = "net.eclipse.jst.jsf.jsp"; //$NON-NLS-1$
-    private final static String SESSION_PROPERTY_NAME_JSPMODELPROCESSOR = "JSPModelProcessor"; //$NON-NLS-1$
-    private final static QualifiedName SESSION_PROPERTY_JSPMODELPROCESSOR_KEY = 
-        new QualifiedName(SESSION_PROPERTY_QUALIFIER,SESSION_PROPERTY_NAME_JSPMODELPROCESSOR);
+    private final static Map<IFile, JSPModelProcessor>  RESOURCE_MAP = 
+        new HashMap<IFile, JSPModelProcessor>();
+    private final static java.util.concurrent.locks.Lock CRITICAL_SECTION =
+        new  ReentrantLock();
+    private static LifecycleListener  LIFECYCLE_LISTENER;
+
     /**
      * @param file The file to get the model processor for  
      * @return the processor for a particular model, creating it if it does not
      *         already exist
      * @throws CoreException if an attempt to get the model associated with file
      *         fails due to reasons other than I/O problems
-     * @throws IOException if an attempt to get the model associated with file
-     *         fails due to I/O problems
      */
-    public static JSPModelProcessor get(IFile file) throws CoreException, IOException
+    public static JSPModelProcessor get(IFile file) throws CoreException
     {
-        synchronized(file)
-        {
-            JSPModelProcessor processor = 
-                (JSPModelProcessor) file.getSessionProperty(SESSION_PROPERTY_JSPMODELPROCESSOR_KEY);
-            
-            if (processor == null)
-            {
-                processor = new JSPModelProcessor(file);
-                file.setSessionProperty(SESSION_PROPERTY_JSPMODELPROCESSOR_KEY, processor);        
-            }
-            return processor;        
-         }
-    }
-    
-    /**
-     * Disposes of the JSPModelProcessor associated with model
-     * @param file the file associated with the model processor to be disposed
-     */
-    public static void dispose(IFile  file)
-    {
+        CRITICAL_SECTION.lock();
         try
         {
-            synchronized(file)
+            if (!file.isAccessible())
             {
-                // TODO: do we need worry about the processor not being 
-                // disposed if the underlying file has been deleted?
-                // TODO: need isLocal check?
-                if (file.isAccessible())
-                {
-                    JSPModelProcessor processor = 
-                        get(file);
-                    
-                    if (processor != null
-                            && !processor.isDisposed)
-                    {
-                        file.setSessionProperty(SESSION_PROPERTY_JSPMODELPROCESSOR_KEY, null);
-                        processor.dispose();
-                    }
-                }
+                throw new CoreException(new Status(IStatus.ERROR, JSFCorePlugin.PLUGIN_ID, "File must be accessible"));
             }
+
+            JSPModelProcessor processor = RESOURCE_MAP.get(file);
+
+            if (processor == null)
+            {
+                if (LIFECYCLE_LISTENER == null)
+                {
+                    LIFECYCLE_LISTENER = new LifecycleListener(file);
+                }
+                else
+                {
+                    LIFECYCLE_LISTENER.addResource(file);
+                }
+
+                processor = new JSPModelProcessor(file,LIFECYCLE_LISTENER);
+                RESOURCE_MAP.put(file, processor);
+            }
+
+            return processor;
         }
-        catch (CoreException ce)
+        finally
         {
-            Platform.getLog(JSFCorePlugin.getDefault().getBundle()).log(
-                    new Status(IStatus.ERROR, JSFCorePlugin.getDefault().getBundle().getSymbolicName(), 0, "Problem disposing JSPModelProcessor", new Throwable(ce))); //$NON-NLS-1$
-        }
-        catch (IOException ioe)
-        {
-            Platform.getLog(JSFCorePlugin.getDefault().getBundle()).log(
-                    new Status(IStatus.ERROR, JSFCorePlugin.getDefault().getBundle().getSymbolicName(), 0, "Problem disposing JSPModelProcessor", new Throwable(ioe))); //$NON-NLS-1$
+            CRITICAL_SECTION.unlock();
         }
     }
-    
+
+    /**
+     * Disposes of the JSPModelProcessor associated with model
+     * @param file the model processor to be disposed
+     */
+    private static void dispose(IFile file)
+    {
+        CRITICAL_SECTION.lock();
+        try
+        {
+            JSPModelProcessor processor = RESOURCE_MAP.get(file);
+
+            if (processor != null)
+            {
+                RESOURCE_MAP.remove(file);
+                
+                if (!processor.isDisposed())
+                {
+                    processor.dispose();
+                    LIFECYCLE_LISTENER.removeResource(file);
+                }
+                
+            }
+
+            if (RESOURCE_MAP.size() == 0)
+            {
+                // if we no longer have any resources being tracked,
+                // then dispose the lifecycle listener
+                LIFECYCLE_LISTENER.dispose();
+                LIFECYCLE_LISTENER = null;
+            }
+        }
+        finally
+        {
+            CRITICAL_SECTION.unlock();
+        }
+    }
+
     private final IFile             _file;
-    private final DOMModelForJSP    _model;
-    private final ModelListener     _modelListener;
-    private boolean                 isDisposed;
+    private LifecycleListener       _lifecycleListener;
+    private IResourceLifecycleListener  _resListener;
+    private boolean                 _isDisposed;
     private Map<Object, ISymbol>    _requestMap;
     private Map<Object, ISymbol>    _sessionMap;
     private Map<Object, ISymbol>    _applicationMap;
     private Map<Object, ISymbol>    _noneMap;
     private long                    _lastModificationStamp;
-    
+
     // used to avoid infinite recursion in refresh.  Must never be null
     private final CountingMutex     _lastModificationStampMonitor = new CountingMutex();
-    
+
     /**
      * Construct a new JSPModelProcessor for model
      * 
      * @param model
      */
-    private JSPModelProcessor(IFile  file) throws CoreException, IOException
+    private JSPModelProcessor(final IFile  file, final LifecycleListener lifecycleListener)
     {
-        _model = getModelForFile(file);
-        _modelListener = new ModelListener();
-        _model.addModelLifecycleListener(_modelListener);
+        //_model = getModelForFile(file);
+        //_modelListener = new ModelListener();
+        //_model.addModelLifecycleListener(_modelListener);
         _file = file;
-        // a negative value guarantees that refresh(false) will 
+        _lifecycleListener = lifecycleListener;
+        _resListener = new IResourceLifecycleListener()
+        {
+            public EventResult acceptEvent(ResourceLifecycleEvent event)
+            {
+                final EventResult result = EventResult.getDefaultEventResult();
+
+                // not interested
+                if (!_file.equals(event.getAffectedResource()))
+                {
+                    return result; 
+                }
+
+                if (event.getEventType() == EventType.RESOURCE_INACCESSIBLE)
+                {
+                    dispose(_file);
+                }
+                else if (event.getEventType() == EventType.RESOURCE_CHANGED)
+                {
+                    // if the file has changed contents on disk, then
+                    // invoke an unforced refresh of the JSP file
+                    if (event.getReasonType() == ReasonType.RESOURCE_CHANGED_CONTENTS)
+                    {
+                        refresh(false);
+                    }
+                }
+
+                return result;
+            }
+        };
+
+        lifecycleListener.addListener(_resListener);
+        
+        // a negative value guarantees that refresh(false) will
         // force a refresh on the first run
         _lastModificationStamp = -1;
     }
-    
-    
-    private DOMModelForJSP getModelForFile(IFile file) 
+
+    private DOMModelForJSP getModelForFile(final IFile file)
             throws CoreException, IOException
     {
         final IModelManager modelManager = 
             StructuredModelManager.getModelManager();
 
         IStructuredModel model = modelManager.getModelForRead(file);
-        
+
         if (model instanceof DOMModelForJSP)
         {
             return (DOMModelForJSP) model;
         }
-
-        model.releaseFromRead();
+        else if (model != null)
+        {
+            // only release from read if we don't find a DOMModelForJSP
+            // if the model is correct, it will be released in dispose
+            model.releaseFromRead();
+        }
         
-        throw new CoreException(new Status(IStatus.ERROR, "org.eclipse.blah", 0,  //$NON-NLS-1$
-                        "model not of expected type", new Throwable())); //$NON-NLS-1$
+        throw new CoreException
+            (new Status(IStatus.ERROR
+                        , "org.eclipse.blah"
+                        , 0  //$NON-NLS-1$
+                        ,"model not of expected type"
+                        , new Throwable())); //$NON-NLS-1$
     }
-    
+
     private void dispose()
     {
-        if (!isDisposed)
+        if (!_isDisposed)
         {
-            _model.releaseFromRead();
-            _model.removeModelLifecycleListener(_modelListener);
-            
+            // ensure the resource listener is disposed
+            _lifecycleListener.removeListener(_resListener);
+            _resListener = null;
+            _lifecycleListener = null;
+
             if (_requestMap != null)
             {
                 _requestMap.clear();
                 _requestMap = null;
             }
-            
+
             if (_sessionMap != null)
             {
                 _sessionMap.clear();
                 _sessionMap = null;
             }
-            
+
             if (_applicationMap != null)
             {
                 _applicationMap.clear();
                 _applicationMap = null;
             }
-            
+
             if (_noneMap != null)
             {
                 _noneMap.clear();
@@ -213,17 +275,29 @@
             }
 
             // mark as disposed
-            isDisposed = true;
+            _isDisposed = true;
         }
     }
-    
+
     /**
      * @return true if this model processor has been disposed.  Disposed
      * processors should not be used.
      */
-    boolean isDisposed()
+    public boolean isDisposed()
     {
-        return isDisposed;
+        return _isDisposed;
+    }
+
+    /**
+     * If isModelDirty() returns true, then it means that a call
+     * to refresh(false) will trigger a reprocess of the underlying document.
+     *
+     * @return true if the underlying JSP model is considered to be dirty
+     */
+    public boolean isModelDirty()
+    {
+        final long currentModificationStamp = _file.getModificationStamp();
+        return _lastModificationStamp != currentModificationStamp;
     }
     
     /**
@@ -231,9 +305,15 @@
      * @param forceRefresh -- if true, always refreshes, if false,
      * then it only refreshes if the file's modification has changed
      * since the last refresh
+     * @throws IllegalStateException if isDisposed() == true
      */
     public void refresh(final boolean forceRefresh)
     {
+        if (isDisposed())
+        {
+            throw new IllegalStateException("Processor is disposed for file: "+_file.toString());
+        }
+
         synchronized(_lastModificationStampMonitor)
         {
             if (_lastModificationStampMonitor.isSignalled())
@@ -244,49 +324,58 @@
                 return;
             }
 
+            DOMModelForJSP  model = null;
             try
             {
                 _lastModificationStampMonitor.setSignalled(true);
                 
-                long currentModificationStamp;
-                
-                currentModificationStamp = _file.getModificationStamp();
-    
+
                 // only refresh if forced or if the underlying file has changed
                 // since the last run
                 if (forceRefresh
-                        || _lastModificationStamp != currentModificationStamp)
+                        || isModelDirty())
                 {
-                    refreshInternal();
+                    model = getModelForFile(_file);
+                    refreshInternal(model);
                     _lastModificationStamp = _file.getModificationStamp();
                 }
             }
+            catch (CoreException e) {
+               JSFCorePlugin.log(new RuntimeException(e), "Error refreshing internal model");
+            } catch (IOException e) {
+                JSFCorePlugin.log(new RuntimeException(e), "Error refreshing internal model");
+            }
             // make sure that we unsignal the monitor before releasing the
             // mutex
             finally
             {
+                if (model != null)
+                {
+                    model.releaseFromRead();
+                }
                 _lastModificationStampMonitor.setSignalled(false);
             }
         }
     }
     
-    private void refreshInternal()
+    private void refreshInternal(DOMModelForJSP model)
     {
         final IStructuredDocumentContext context = 
-            IStructuredDocumentContextFactory.INSTANCE.getContext(_model.getStructuredDocument(), -1);
+            IStructuredDocumentContextFactory.INSTANCE.getContext(model.getStructuredDocument(), -1);
         final ITaglibContextResolver taglibResolver =
             IStructuredDocumentContextResolverFactory.INSTANCE.getTaglibContextResolver(context);
-        IDOMDocument document = _model.getDocument();
+        IDOMDocument document = model.getDocument();
         getApplicationMap().clear();
         getRequestMap().clear();
         getSessionMap().clear();
         //long curTime = System.currentTimeMillis();
-        recurseChildNodes(document.getChildNodes(), taglibResolver);
+        recurseChildNodes(model, document.getChildNodes(), taglibResolver);
         //long netTime = System.currentTimeMillis() - curTime;
         //System.out.println("Net time to recurse document: "+netTime);
     }
-   
-    private void recurseChildNodes(final NodeList nodes, 
+
+    private void recurseChildNodes(final DOMModelForJSP model,
+                                   final NodeList nodes, 
                                     final ITaglibContextResolver taglibResolver)
     {
         for (int i = 0; i < nodes.getLength(); i++)
@@ -294,12 +383,12 @@
             final Node child = nodes.item(i);
             
             // process attributes at this node before recursing
-            processAttributes(child, taglibResolver);
-            recurseChildNodes(child.getChildNodes(), taglibResolver);
+            processAttributes(model, child, taglibResolver);
+            recurseChildNodes(model, child.getChildNodes(), taglibResolver);
         }
     }
-    
-    private void processAttributes(final Node node, 
+
+    private void processAttributes(final DOMModelForJSP model, final Node node, 
                                     final ITaglibContextResolver taglibResolver)
     {
         if (taglibResolver.hasTag(node))
@@ -312,13 +401,13 @@
             {
                 final Node attribute = node.getAttributes().item(i);
 
-                processSymbolContrib(uri, elementName, attribute);
+                processSymbolContrib(model, uri, elementName, attribute);
                 processSetsLocale(uri, elementName, attribute);
             }
         }
     }
 
-    private void processSymbolContrib(final String uri, final String elementName, Node attribute)
+    private void processSymbolContrib(final DOMModelForJSP model, final String uri, final String elementName, Node attribute)
     {
         final SymbolContribAggregator  aggregator =
             SymbolContribAggregator.
@@ -338,7 +427,7 @@
                     factory.create(symbolName, 
                                   ISymbolConstants.SYMBOL_SCOPE_REQUEST, //TODO:
                                   IStructuredDocumentContextFactory.INSTANCE.
-                                      getContext(_model.getStructuredDocument(), 
+                                      getContext(model.getStructuredDocument(), 
                                                  attribute),
                                   problems);
 
@@ -361,6 +450,7 @@
         }
     }
     
+    @SuppressWarnings("deprecation")
     private void processSetsLocale(final String uri, final String elementName, Node attribute)
     {
         LocaleSetAggregator  aggregator = LocaleSetAggregator.create(_file.getProject(), uri, elementName, attribute.getLocalName());
@@ -369,12 +459,15 @@
         {
             DesignTimeApplicationManager  dtAppMgr =
                 DesignTimeApplicationManager.getInstance(_file.getProject());
-            
-            DTFacesContext facesContext = dtAppMgr.getFacesContext(_file);
-            
-            if (facesContext != null)
+
+            if (dtAppMgr != null)
             {
-                facesContext.setLocaleString(attribute.getNodeValue());
+                DTFacesContext facesContext = dtAppMgr.getFacesContext(_file);
+                
+                if (facesContext != null)
+                {
+                    facesContext.setLocaleString(attribute.getNodeValue());
+                }
             }
         }
     }
@@ -392,14 +485,14 @@
         {
             return Collections.unmodifiableMap(map);
         }
-        
+
         return Collections.EMPTY_MAP;
     }
-    
+
     private void updateMap(ISymbol symbol, String  scopeName)
     {
         final Map<Object, ISymbol> map = getMapForScopeInternal(scopeName);
-        
+
         if (map != null)
         {
             map.put(symbol.getName(), symbol);
@@ -475,32 +568,6 @@
     }
 
     /**
-     * Listens to the JSP model and reacts to changes
-     * @author cbateman
-     *
-     */
-    private class ModelListener implements IModelLifecycleListener
-    {
-        public void processPostModelEvent(ModelLifecycleEvent event)
-        {
-            // TODO: figure this event structure out seems like it is possibly
-            // broken...
-            if (((event.getType() & ModelLifecycleEvent.MODEL_DIRTY_STATE) != 0
-                    && !_model.isDirty()) // if the dirty state changed as now not dirty, then we have a save
-                )//|| (event.getType() & ModelLifecycleEvent.MODEL_REINITIALIZED) != 0)
-            {
-                // refresh if modified on disk
-                refresh(false);
-            }
-        }
-
-        public void processPreModelEvent(ModelLifecycleEvent arg0) {
-            // do nothing
-        }
-    }
-    
-    
-    /**
      * Aggregates the sets-locale meta-data
      * 
      * @author cbateman
@@ -512,8 +579,8 @@
         static LocaleSetAggregator create(IProject project, 
                                               final String uri, 
                                               final String elementName, final String attributeName)
-        {            
-        	final ITaglibDomainMetaDataModelContext mdContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(project, uri);
+        {
+            final ITaglibDomainMetaDataModelContext mdContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(project, uri);
             Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(mdContext, elementName+"/"+attributeName, SETS_LOCALE); //$NON-NLS-1$
 
             if (TraitValueHelper.getValueAsBoolean(trait))
@@ -544,12 +611,12 @@
          * @return a new instance only if attributeName is a symbol contributor
          */
         static SymbolContribAggregator create(final IProject project, 
-        									  final String uri, 
+                                              final String uri, 
                                               final String elementName, 
                                               final String attributeName)
         {
-        	final String entityKey = elementName+"/"+attributeName; //$NON-NLS-1$
-        	final ITaglibDomainMetaDataModelContext mdContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(project, uri);
+            final String entityKey = elementName+"/"+attributeName; //$NON-NLS-1$
+            final ITaglibDomainMetaDataModelContext mdContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(project, uri);
             Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(mdContext, entityKey, CONTRIBUTES_VALUE_BINDING);
 
             boolean contribsValueBindings = TraitValueHelper.getValueAsBoolean(trait);
@@ -562,10 +629,10 @@
                 trait = TaglibDomainMetaDataQueryHelper.getTrait(mdContext, entityKey, VALUE_BINDING_SCOPE);
                 scope = TraitValueHelper.getValueAsString(trait);
 
-                if (scope != null & !scope.equals("")) //$NON-NLS-1$
+                if (scope != null && !scope.equals("")) //$NON-NLS-1$
                 {
-                	trait = TaglibDomainMetaDataQueryHelper.getTrait(mdContext, entityKey, VALUE_BINDING_SYMBOL_FACTORY);
-                	symbolFactory = TraitValueHelper.getValueAsString(trait);                      
+                    trait = TaglibDomainMetaDataQueryHelper.getTrait(mdContext, entityKey, VALUE_BINDING_SYMBOL_FACTORY);
+                    symbolFactory = TraitValueHelper.getValueAsString(trait);                      
                 }
 
                 return new SymbolContribAggregator(scope, symbolFactory);
@@ -595,8 +662,7 @@
          */
         public AbstractContextSymbolFactory getFactory()
         {
-            return (AbstractContextSymbolFactory) 
-                JSFCommonPlugin.getSymbolFactories().get(_metadata.get("factory")); //$NON-NLS-1$
+            return JSFCommonPlugin.getSymbolFactories().get(_metadata.get("factory")); //$NON-NLS-1$
         }
     }
     
@@ -617,7 +683,5 @@
         public synchronized void setSignalled(boolean signalled) {
             this._signalled = signalled;
         }
-        
-
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/StartupHandler.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/StartupHandler.java
index 954390e..b3b4377 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/StartupHandler.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/jsp/StartupHandler.java
@@ -39,8 +39,8 @@
 public class StartupHandler implements IStartup 
 {
     private final JSPEditorListener    _partListener = new JSPEditorListener();
-    
-	public void earlyStartup() 
+
+    public void earlyStartup() 
     {
         PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable()
         {
@@ -67,73 +67,69 @@
                     }
                     windows[i].getPartService().addPartListener(_partListener);
                 }
-                
+
                 // TODO: register with all windows?
                 PlatformUI.getWorkbench().addWindowListener(new IWindowListener()
                 {
-        
                     public void windowActivated(IWorkbenchWindow window) {
                         // do nothing
                     }
-        
+
                     public void windowDeactivated(IWorkbenchWindow window) {
                         // do nothing
                     }
-        
+
                     public void windowClosed(IWorkbenchWindow window) {
                         window.getPartService().removePartListener(_partListener);
                     }
-        
+
                     public void windowOpened(IWorkbenchWindow window) {
                         window.getPartService().addPartListener(_partListener);
                     }
-                });    
+                });
             }
         });
-	}
+    }
 
-	private static class JSPEditorListener implements IPartListener2
-	{
-		public void partActivated(IWorkbenchPartReference partRef) {
-			// do nothing
-			
-		}
+    private static class JSPEditorListener implements IPartListener2
+    {
+        private JSPModelProcessor         _processor;
 
-		public void partBroughtToTop(IWorkbenchPartReference partRef) {
-			// do nothing
-		}
+        public void partActivated(IWorkbenchPartReference partRef) {
+            // do nothing
+        }
+
+        public void partBroughtToTop(IWorkbenchPartReference partRef) {
+            // do nothing
+        }
 
         public void partClosed(IWorkbenchPartReference partRef) {
-            if (isValidJSPEditor(partRef))
-            {
-                releaseJSPModelListener((IEditorReference) partRef);
-            }
-		}
+            // do nothing
+        }
 
-		public void partDeactivated(IWorkbenchPartReference partRef) {
-			// do nothing
-		}
+        public void partDeactivated(IWorkbenchPartReference partRef) {
+            // do nothing
+        }
 
-		public void partOpened(IWorkbenchPartReference partRef) {
+        public void partOpened(IWorkbenchPartReference partRef) {
             if (isValidJSPEditor(partRef))
             {
                 setJSPModelListener((IEditorReference)partRef);
             }
-		}
+        }
 
-		public void partHidden(IWorkbenchPartReference partRef) {
-			// do nothing
-		}
+        public void partHidden(IWorkbenchPartReference partRef) {
+            // do nothing
+        }
 
-		public void partVisible(IWorkbenchPartReference partRef) {
-			// do nothing
-		}
+        public void partVisible(IWorkbenchPartReference partRef) {
+            // do nothing
+        }
 
-		public void partInputChanged(IWorkbenchPartReference partRef) {
-			// do nothing
-			
-		}
-       
+        public void partInputChanged(IWorkbenchPartReference partRef) {
+            // do nothing
+        }
+
         private boolean isJSPEditor(IEditorReference editorRef)
         {
             IFile file = getIFile(editorRef);
@@ -145,7 +141,7 @@
 
             return false;
         }
-        
+
         /**
          * @param editorRef
          * @return true if the editor is editing the JSP content type and
@@ -159,18 +155,17 @@
                     JSFAppConfigUtils.isValidJSFProject(file.getProject()) &&
                         isJSPEditor(editorRef);
         }
-        
-        
+
         boolean isValidJSPEditor(IWorkbenchPartReference partRef)
         {
             if (partRef instanceof IEditorReference)
             {
                 return isValidJSPEditor((IEditorReference)partRef);
             }
-            
+
             return false;
         }
-        
+
         void setJSPModelListener(IEditorReference editorRef)
         {
             IFile file = getIFile(editorRef);
@@ -180,8 +175,8 @@
                 try
                 {
                     // implicitly creates if not present
-                    JSPModelProcessor processor = JSPModelProcessor.get(file);
-                    processor.refresh(false);
+                    _processor = JSPModelProcessor.get(file);
+                    _processor.refresh(false);
                 }
                 catch (Exception e)
                 {
@@ -189,17 +184,7 @@
                 }
             }
         }
-        
-        void releaseJSPModelListener(IEditorReference editorRef)
-        {
-            IFile file = getIFile(editorRef);
-            
-            if (file != null)
-            {
-                JSPModelProcessor.dispose(file);
-            }
-        }
-        
+
         IFile getIFile(IEditorReference editorRef)
         {
             try
@@ -216,8 +201,8 @@
             {
                 JSFCorePlugin.getDefault().getLog().log(new Status(IStatus.ERROR, JSFCorePlugin.PLUGIN_ID, 0, "Error acquiring editor input",excp)); //$NON-NLS-1$
             }
-            
+
             return null;
         }
-	}
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resolver/ViewBasedTaglibResolverFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resolver/ViewBasedTaglibResolverFactory.java
new file mode 100644
index 0000000..42c67ee
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/resolver/ViewBasedTaglibResolverFactory.java
@@ -0,0 +1,207 @@
+package org.eclipse.jst.jsf.designtime.internal.resolver;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsf.context.IModelContext;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IMetadataContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.ITextRegionContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.designtime.DTAppManagerUtil;
+import org.eclipse.jst.jsf.designtime.internal.view.XMLViewDefnAdapter;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * A Taglib resolver that delegates to the design tieme view handler so that it
+ * is independent of the tag definition type in use. Document must still be an
+ * IStructuredDocument.
+ * 
+ */
+public class ViewBasedTaglibResolverFactory implements
+        IStructuredDocumentContextResolverFactory, IAdaptable
+{
+    public IDOMContextResolver getDOMContextResolver(
+            final IStructuredDocumentContext context)
+    {
+        // no dom resolver
+        return null;
+    }
+
+    public IMetadataContextResolver getMetadataContextResolver(
+            final IStructuredDocumentContext context)
+    {
+        // no metadata resolver
+        return null;
+    }
+
+    public ITaglibContextResolver getTaglibContextResolver(
+            final IStructuredDocumentContext context)
+    {
+        if (context.getStructuredDocument() instanceof IStructuredDocument)
+        {
+            final IWorkspaceContextResolver resolver = INSTANCE
+                    .getWorkspaceContextResolver(context);
+            if (resolver != null)
+            {
+                final IProject project = resolver.getProject();
+                final IResource res = resolver.getResource();
+
+                if (project != null && res instanceof IFile)
+                {
+                    final IFile file = (IFile) res;
+
+                    try
+                    {
+                        return new ViewBasedTaglibResolver(context, file,
+                                project);
+                    }
+                    catch (IllegalArgumentException e)
+                    {
+                        // the constructor will throw this if the view
+                        // definition
+                        // adapter for file is not of the base type it needs
+                        // just fall through, no need to log
+                    }
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * A taglib resolver that goes through the design time view handler to
+     * resolve tags. This allows us to abstract the definition format (XML) from
+     * the kind of tag handlers that process it (JSP vs. Facelets vs. others).
+     * 
+     */
+    private static class ViewBasedTaglibResolver implements
+            ITaglibContextResolver
+    {
+        private final IProject                   _project;
+        private final IFile                      _file;
+        private final IStructuredDocumentContext _context;
+
+        /**
+         * @param context
+         * @param file
+         * @param project
+         */
+        private ViewBasedTaglibResolver(
+                final IStructuredDocumentContext context, final IFile file,
+                final IProject project)
+        {
+            super();
+            _context = context;
+            _file = file;
+            _project = project;
+
+            if (DTAppManagerUtil.getXMLViewDefnAdapter(project, file) == null)
+            {
+                throw new IllegalArgumentException(
+                        "View definition adapter not found");
+            }
+        }
+
+        public String getTagPrefixForURI(final String uri)
+        {
+            // TODO:
+            return null;
+        }
+
+        public String getTagURIForNodeName(final Node node)
+        {
+            final ITagElement tagElement = getTagElement(node);
+            
+            if  (tagElement != null)
+            {
+                return tagElement.getUri();
+            }
+            return null;
+        }
+
+        public NodeList getTagsByNamespaceURI(final String uri,
+                final String tagName)
+        {
+            // TODO: what is the purpose of this API? deprecate?
+            return null;
+        }
+
+        public boolean hasTag(final Node node)
+        {
+            // it is sufficient to check that the view adapter will give us
+            // a non-null tag element
+            return getTagElement(node) != null;
+        }
+
+        public boolean canResolveContext(final IModelContext modelContext)
+        {
+            // must be a JSP page
+            Object adapter = modelContext.getAdapter(IStructuredDocumentContext.class);
+            
+            if (adapter instanceof IStructuredDocumentContext)
+            {
+                return ((IStructuredDocumentContext)adapter).getStructuredDocument() instanceof IStructuredDocument;
+            }
+            return false;
+        }
+
+        private ITagElement getTagElement(Node node)
+        {
+            Node checkNode = node;
+
+            if (node instanceof Attr)
+            {
+                checkNode = ((Attr) node).getOwnerElement();
+            }
+
+            XMLViewDefnAdapter adapter = 
+                DTAppManagerUtil.getXMLViewDefnAdapter(_project, _file);
+
+            if (adapter != null)
+            {
+                return adapter.mapToTagElement(checkNode, _context
+                        .getStructuredDocument());
+            }
+            // shouldn't happen since the constuctor throws an exceptino
+            // if can't get the adapter
+            JSFCorePlugin.log("Unexpected case",
+                    new Throwable(_file.toString()));
+            return null;
+        }
+    }
+
+
+    public ITextRegionContextResolver getTextRegionResolver(
+            final IStructuredDocumentContext context)
+    {
+        // no text region resolver
+        return null;
+    }
+
+    public IWorkspaceContextResolver getWorkspaceContextResolver(
+            final IStructuredDocumentContext context)
+    {
+        // no workspace resolver
+        return null;
+    }
+
+    public Object getAdapter(Class adapter)
+    {
+        if (adapter.isInstance(this))
+        {
+            return this;
+        }
+        return null;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/JSPTagVariableSymbolSourceProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/JSPTagVariableSymbolSourceProvider.java
index bc477dd..ca109f7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/JSPTagVariableSymbolSourceProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/JSPTagVariableSymbolSourceProvider.java
@@ -51,10 +51,11 @@
         
         if (isProvider(fileContext))
         {
+        	JSPModelProcessor modelProcessor = null;
+        	
             try
             {
-                final JSPModelProcessor modelProcessor =
-                    JSPModelProcessor.get(fileContext);
+                modelProcessor = JSPModelProcessor.get(fileContext);
                 
                 // ensure internal model is sync'ed with document
                 // but don't force refresh
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/ResourceBundleMapSource.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/ResourceBundleMapSource.java
index 145c62d..4e7d66c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/ResourceBundleMapSource.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/symbols/ResourceBundleMapSource.java
@@ -14,6 +14,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.AbstractMap;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -21,44 +22,84 @@
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IStorage;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jst.jsf.common.internal.resource.IResourceLifecycleListener;
+import org.eclipse.jst.jsf.common.internal.resource.LifecycleListener;
+import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent;
+import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.EventType;
 import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
 import org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil;
 
 class ResourceBundleMapSource extends AbstractMap
 {
-    private static final String   PROPERTY_QUALIFIER = "org.eclipse.jst.jsf.designtime.internal.jsp"; //$NON-NLS-1$
-    private static final String   SESSION_PROPERTY_NAME_PROJECT = "ResourceBundleMapSource"; //$NON-NLS-1$
-    private static final QualifiedName  SESSION_PROPERTY_KEY_PROJECT 
-        = new QualifiedName(PROPERTY_QUALIFIER, SESSION_PROPERTY_NAME_PROJECT);
- 
+    private static final String   PROPERTY_QUALIFIER = 
+    	"org.eclipse.jst.jsf.designtime.internal.jsp"; //$NON-NLS-1$
+    private static final String   SESSION_PROPERTY_NAME_PROJECT = 
+    	"ResourceBundleMapSource"; //$NON-NLS-1$
+    private static final QualifiedName  SESSION_PROPERTY_KEY_PROJECT = 
+        new QualifiedName(PROPERTY_QUALIFIER, SESSION_PROPERTY_NAME_PROJECT);
+
     private static IFile    getCachedBundleFile(final IProject project, final String baseName)
     {
         if (project != null)
         {
-            return (IFile) getBundleFileCache(project).get(baseName);
+            Map bundleFileCache = getBundleFileCache(project);
+            
+            if (bundleFileCache != null)
+            {
+                return (IFile) bundleFileCache.get(baseName);
+            }
         }
-        
+
         return null;
     }
-    
-    private static Map getBundleFileCache(IProject project)
+
+    private static Map getBundleFileCache(final IProject project)
     {
         synchronized(project)
         {
             Map bundleFileCache = null;
-            
+
             try
             {
                 bundleFileCache = 
                     (Map) project.getSessionProperty(SESSION_PROPERTY_KEY_PROJECT);
-            
+
                 if (bundleFileCache == null)
                 {
                     bundleFileCache = new HashMap();
+                    LifecycleListener listener = new LifecycleListener(project);
+                    listener.addListener(new IResourceLifecycleListener()
+                    {
+                        public EventResult acceptEvent(ResourceLifecycleEvent event) 
+                        {
+                            EventResult result = EventResult.getDefaultEventResult();
+                            
+                            if (event.getEventType() == EventType.RESOURCE_INACCESSIBLE)
+                            {
+                                try
+                                {
+                                    Map bundleCache = 
+                                        (Map) project.getSessionProperty(SESSION_PROPERTY_KEY_PROJECT);
+                                    bundleCache.clear();
+                                    project.setSessionProperty(SESSION_PROPERTY_KEY_PROJECT, null);
+                                }
+                                catch (CoreException ce)
+                                {
+                                    JSFCorePlugin.log("Error clearing bundle file cache", ce); //$NON-NLS-1$
+                                }
+                                result = EventResult.getDisposeAfterEventResult();
+                            }
+                            
+                            return result;
+                        }
+                    }
+                    );
+
                     project.setSessionProperty(SESSION_PROPERTY_KEY_PROJECT, bundleFileCache);
                 }
             }
@@ -66,19 +107,20 @@
             {
                 JSFCorePlugin.log("Error creating bundle file cache", ce); //$NON-NLS-1$
             }
-            
+
             return bundleFileCache;
         }
     }
-    
-    private static IFile    createCachedBundleFile(final IProject project, 
+
+    private static IFile createCachedBundleFile(final IProject project, 
                                                    final String  resourcePathStr)
-                      throws IOException, JavaModelException, CoreException
+                      throws IOException, CoreException
     {
-        IStorage storage = LoadBundleUtil.getLoadBundleResource(project, resourcePathStr);
-          
+        IStorage storage = 
+            LoadBundleUtil.getLoadBundleResource(project, resourcePathStr);
+
         IFile bundleRes = null;
-         
+
         if (storage != null
                 && storage.getAdapter(IFile.class) != null)
         {
@@ -86,71 +128,103 @@
             getBundleFileCache(project).put(resourcePathStr, bundleRes);
             return bundleRes;
         }
-          
+
         throw new IOException("Bundle "+resourcePathStr+" not found in classpath for project: "+project.getName()); //$NON-NLS-1$ //$NON-NLS-2$
     }
-    
+
     private Properties                  _resourceBundle; // = null; set on first access or changes
     private final IFile                 _bundleFile;   // the resource
+    private final String                _resourcePathStr; // the key used in the file cache
     // as returned by IResource.getModificationStamp() 
     // the last time _resourceBundle was loaded
     private long                        _lastModificationStamp;
-    
+
     ResourceBundleMapSource(final IProject context, 
                             final String  resourcePathStr)
                                 throws IOException, JavaModelException, CoreException
     {
         IFile cachedBundleFile = getCachedBundleFile(context, resourcePathStr);
-        
+
         if (cachedBundleFile == null)
         {
             cachedBundleFile = createCachedBundleFile(context, resourcePathStr);
         }
-        
+
         _bundleFile = cachedBundleFile;
+        _resourcePathStr = resourcePathStr;
     }
 
     private void checkAndRefreshBundle()
     {
-        if (_resourceBundle == null
-                || _bundleFile.getModificationStamp() != _lastModificationStamp)
+        if (_bundleFile.isAccessible())
         {
-            InputStream  bundleStream = null;
-            try
+            if (_resourceBundle == null  // doesn't exist yet
+                    // exists but ws is out of sync
+                    || !_bundleFile.isSynchronized(IResource.DEPTH_ZERO)
+                    // exists but user has changed in workspace
+                    || _bundleFile.getModificationStamp() 
+                            != _lastModificationStamp)
             {
-                bundleStream = _bundleFile.getContents();
-                _resourceBundle = new Properties();
-                _resourceBundle.load(bundleStream);
-                _lastModificationStamp = _bundleFile.getModificationStamp();
-            }
-            catch (CoreException ce)
-            {
-                JSFCorePlugin.log("Error refreshing bundle", ce); //$NON-NLS-1$
-            }
-            catch (IOException ioe)
-            {
-                JSFCorePlugin.log("Error refreshing bundle", ioe); //$NON-NLS-1$
-            }
-            finally
-            {
-                if (bundleStream != null)
+                InputStream  bundleStream = null;
+                try
                 {
-                    try
+                    // force refresh if out of sync
+                    bundleStream = _bundleFile.getContents(true);
+                    _resourceBundle = new Properties();
+                    _resourceBundle.load(bundleStream);
+                    _lastModificationStamp = _bundleFile.getModificationStamp();
+                }
+                catch (CoreException ce)
+                {
+                    JSFCorePlugin.log("Error refreshing bundle", ce); //$NON-NLS-1$
+                }
+                catch (IOException ioe)
+                {
+                    JSFCorePlugin.log("Error refreshing bundle", ioe); //$NON-NLS-1$
+                }
+                finally
+                {
+                    if (bundleStream != null)
                     {
-                        bundleStream.close();
-                    }
-                    catch (IOException ioe)
-                    {
-                        JSFCorePlugin.log("Error closing bundle", ioe); //$NON-NLS-1$
+                        try
+                        {
+                            bundleStream.close();
+                        }
+                        catch (IOException ioe)
+                        {
+                            JSFCorePlugin.log("Error closing bundle", ioe); //$NON-NLS-1$
+                        }
                     }
                 }
             }
         }
+        else
+        {
+            // bundle no longer exists so remove it
+            Map bundleFileCache = getBundleFileCache(_bundleFile.getProject());
+
+            if (bundleFileCache != null &&
+                    bundleFileCache.containsKey(_resourcePathStr))
+            {
+                bundleFileCache.remove(_resourcePathStr);
+            }
+            // in either case, clear the bundle entry
+            if (_resourceBundle != null)
+            {
+                _resourceBundle.clear();
+                _resourceBundle = null;
+            }
+        }
     }
-    
+
     public Set entrySet() 
     {
         checkAndRefreshBundle();
+
+        if (_resourceBundle == null)
+        {
+        	return Collections.EMPTY_SET;
+        }
         return _resourceBundle.entrySet();
     }
 
@@ -162,6 +236,11 @@
     public Object get(Object key) 
     {
         checkAndRefreshBundle();
+
+        if (_resourceBundle == null)
+        {
+        	return null;
+        }
         return _resourceBundle.get(key);
     }
 }
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractDTViewHandler.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractDTViewHandler.java
new file mode 100644
index 0000000..0ba828a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractDTViewHandler.java
@@ -0,0 +1,82 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+
+/**
+ * All IDTViewHandler's must sub-class this abstract class.
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class AbstractDTViewHandler implements IDTViewHandler 
+{
+    /**
+     * the path separator
+     */
+    public static final String PATH_SEPARATOR = "/";
+
+    public abstract String calculateLocale(DTFacesContext context) throws ViewHandlerException;
+
+    public DTUIViewRoot createView(final DTFacesContext facesContext, final String viewId)
+                                    throws ViewHandlerException
+    {
+        final DTUIViewRoot viewRoot = internalCreateView(facesContext, viewId);
+        viewRoot.setViewId(viewId);
+        return viewRoot;
+    }
+        
+    /**
+     * @param facesContext 
+     * @param viewId 
+     * @return internal construction of the view root.
+     */
+    protected abstract DTUIViewRoot internalCreateView(final DTFacesContext facesContext, final String viewId);
+    
+    public abstract IResource getActionDefinition(DTFacesContext context, String viewId)
+            throws ViewHandlerException;
+
+    public abstract IPath getActionURL(DTFacesContext context, IResource resource,
+            IPath requestPath) throws ViewHandlerException;
+
+    public abstract IPath getRelativeActionPath(DTFacesContext context,
+        String relativeToViewId, String uri) throws ViewHandlerException;
+
+    public abstract IViewDefnAdapterFactory getViewMetadataAdapterFactory(
+        DTFacesContext context) throws ViewHandlerException;
+
+
+//    public abstract IDTUIViewRoot populateView(DTFacesContext context,
+//        IDTUIViewRoot viewRoot) throws ViewHandlerException;
+
+    public abstract boolean supportsViewDefinition(IFile file);
+
+    public String getViewId(final DTFacesContext context,final IResource res) 
+    {
+        // TODO: sync with WebrootUtil?
+        String strWebrootPath = "";
+        final IProject project = res.getProject();
+        final IPath path = res.getFullPath();
+        final IPath webContentPath = getWebContentPath(project);
+        if (webContentPath != null && webContentPath.isPrefixOf(path)) {
+            final int start = path.matchingFirstSegments(webContentPath);
+            final String[] segments = path.segments();
+            for (int i = start, n = path.segmentCount(); i < n; i++) {
+                strWebrootPath = strWebrootPath
+                        + PATH_SEPARATOR + segments[i];
+            }
+        }
+        return strWebrootPath;
+    }
+
+    private IPath getWebContentPath(final IProject project) {
+        if (project != null) {
+            return ComponentCore.createComponent(project).getRootFolder().getUnderlyingFolder().getFullPath();
+        }
+        return null;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractViewDefnAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractViewDefnAdapter.java
new file mode 100644
index 0000000..aeaf426
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractViewDefnAdapter.java
@@ -0,0 +1,39 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import java.util.List;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.ViewObject;
+import org.eclipse.jst.jsf.common.runtime.internal.model.datatypes.ELExpression;
+import org.eclipse.jst.jsf.context.IModelContext;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException;
+
+/**
+ * All view definition adapters must sub-class this abstract class.
+ * 
+ * @author cbateman
+ * @param <VIEW_DEFN_BASE_TYPE>
+ * @param <VIEW_CONTAINER_TYPE>
+ * 
+ */
+public abstract class AbstractViewDefnAdapter<VIEW_DEFN_BASE_TYPE, VIEW_CONTAINER_TYPE>
+        implements IViewDefnAdapter<VIEW_DEFN_BASE_TYPE, VIEW_CONTAINER_TYPE>
+{
+
+    public abstract ViewObject mapToViewObject(
+            VIEW_DEFN_BASE_TYPE viewDefnObject,
+            ViewObjectConstructionStrategy<? extends VIEW_DEFN_BASE_TYPE> constructionData,
+            VIEW_CONTAINER_TYPE viewContainer);
+
+    public abstract String getId(VIEW_DEFN_BASE_TYPE viewDefnObject)
+            throws IllegalArgumentException;
+
+    public abstract VIEW_CONTAINER_TYPE getContainer(DTFacesContext context,
+            String viewId);
+
+    public abstract List<VIEW_DEFN_BASE_TYPE> getViewDefnRoots(
+            VIEW_CONTAINER_TYPE container);
+
+    public abstract ELExpression getELExpression(final IModelContext context)
+            throws ViewHandlerException;
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractViewDefnAdapterFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractViewDefnAdapterFactory.java
new file mode 100644
index 0000000..6ed639e
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/AbstractViewDefnAdapterFactory.java
@@ -0,0 +1,21 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+
+/**
+ * Factories that create view definition adapters must extend this
+ * class.
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class AbstractViewDefnAdapterFactory implements IViewDefnAdapterFactory 
+{
+    /**
+     * @param context
+     * @param viewId
+     * @return a view adapter for the viewid or null if this factory
+     * cannot produce an adapter for the underlying view definition.
+     */
+    public abstract IViewDefnAdapter createAdapter(DTFacesContext context, String viewId); 
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/ComponentConstructionData.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/ComponentConstructionData.java
new file mode 100644
index 0000000..eeeb440
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/ComponentConstructionData.java
@@ -0,0 +1,80 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+
+/**
+ * Encapsulates information required to construct a component
+ * 
+ * @author cbateman
+ * 
+ */
+public class ComponentConstructionData
+{
+    private ComponentInfo _parent;
+    private int _idCounter;
+    private final IProject _project;
+
+    /**
+     * @param idCounter
+     * @param parent
+     * @param project
+     */
+    public ComponentConstructionData(final int idCounter,
+            final ComponentInfo parent, final IProject project)
+    {
+        _parent = parent;
+        _idCounter = idCounter;
+        _project = project;
+    }
+
+    /**
+     * @return the parent id
+     */
+    public final ComponentInfo getParent()
+    {
+        return _parent;
+    }
+
+    /**
+     * @return the id counter
+     */
+    public final int getIdCounter()
+    {
+        return _idCounter;
+    }
+
+    /**
+     * Increment the counter by 1 and return the old value
+     * 
+     * @return the old value
+     */
+    public final int increment()
+    {
+        return _idCounter++;
+    }
+
+    /**
+     * @param parent
+     */
+    public final void setParent(final ComponentInfo parent)
+    {
+        _parent = parent;
+    }
+
+    /**
+     * @param idCounter
+     */
+    public final void setIdCounter(final int idCounter)
+    {
+        _idCounter = idCounter;
+    }
+
+    /**
+     * @return the project that this component construction is associated with
+     */
+    public final IProject getProject()
+    {
+        return _project;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/ComponentTreeConstructionStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/ComponentTreeConstructionStrategy.java
new file mode 100644
index 0000000..f8f0add
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/ComponentTreeConstructionStrategy.java
@@ -0,0 +1,22 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+
+/**
+ * @author cbateman
+ *
+ * @param <VIEW_DEFN_BASE_TYPE>
+ * @param <VIEW_CONTAINER_TYPE>
+ */
+public abstract class ComponentTreeConstructionStrategy<VIEW_DEFN_BASE_TYPE, VIEW_CONTAINER_TYPE>
+{
+    /**
+     * @param context 
+     * @param viewRoot 
+     * @return a component tree rooted
+     * XXX: need to accommodate different cases of fragments, invalid multiple roots
+     * etc, perhaps with special surrogate root type
+     */
+    public abstract ComponentInfo createComponentTree(DTFacesContext context, DTUIViewRoot viewRoot);
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTComponentIntrospector.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTComponentIntrospector.java
new file mode 100644
index 0000000..53c481f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTComponentIntrospector.java
@@ -0,0 +1,361 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jem.internal.proxy.core.IBeanTypeProxy;
+import org.eclipse.jem.internal.proxy.core.IStandardBeanTypeProxyFactory;
+import org.eclipse.jem.internal.proxy.core.ProxyFactoryRegistry;
+import org.eclipse.jem.internal.proxy.ide.IDERegistration;
+import org.eclipse.jst.jsf.common.internal.types.TypeInfoCache;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorTypeInfo;
+import org.eclipse.jst.jsf.common.util.JDTBeanIntrospector;
+import org.eclipse.jst.jsf.common.util.JDTBeanProperty;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.core.internal.jem.BeanProxyUtil.BeanProxyWrapper;
+import org.eclipse.jst.jsf.core.internal.jem.BeanProxyUtil.ProxyException;
+import org.eclipse.jst.jsf.core.jsfappconfig.JSFAppConfigManager;
+import org.eclipse.jst.jsf.facesconfig.emf.ComponentType;
+import org.eclipse.jst.jsf.facesconfig.emf.ConverterType;
+import org.eclipse.jst.jsf.facesconfig.emf.ValidatorType;
+
+/**
+ * Utility class for finding and bean introspecting component and related
+ * classes.
+ * 
+ * @author cbateman
+ * 
+ */
+public final class DTComponentIntrospector
+{
+    /**
+     * A shared type cache for doing tag class introspection. The cache stores
+     * type hierarchies and updates them on detected changes to reduce the
+     * overhead of doing such lookups
+     */
+    private static TypeInfoCache TYPE_CACHE; // lazily created, don't access
+
+    // directly
+
+    /**
+     * @return the type cache used by all DTComponentIntrospector internally.
+     */
+    public static TypeInfoCache getSharedTypeCache()
+    {
+        if (TYPE_CACHE == null)
+        {
+            TYPE_CACHE = TypeInfoCache.createNewInstance();
+        }
+        return TYPE_CACHE;
+    }
+
+    /**
+     * @param classType
+     * @param className
+     * @param project
+     * @return the component type info for the class type or null if none.
+     */
+    public static ComponentTypeInfo getComponent(final String classType,
+            final String className, final IProject project)
+    {
+        final ProxyFactoryRegistry registry = getProxyFactoryRegistry(project);
+
+        if (registry != null)
+        {
+            final IStandardBeanTypeProxyFactory factory = registry
+                    .getBeanTypeProxyFactory();
+            final IBeanTypeProxy classTypeProxy = factory
+                    .getBeanTypeProxy(className);
+            final BeanProxyWrapper classTypeWrapper = new BeanProxyWrapper(
+                    classTypeProxy);
+
+            try
+            {
+                classTypeWrapper.init();
+                final String family = classTypeWrapper
+                        .callStringMethod("getFamily");
+                final String renderer = classTypeWrapper
+                        .callStringMethod("getRendererType");
+
+                IType type = null;
+
+                try
+                {
+                    type = JavaCore.create(project).findType(className);
+                }
+                catch (JavaModelException e)
+                {
+                    // fall through;
+                }
+
+                List<String> interfaces = new ArrayList<String>();
+                List<String> superClasses = new ArrayList<String>();
+
+                if (type != null)
+                {
+                    TypeInfoCache typeCache = getSharedTypeCache();
+
+                    IType[] interfaceTypes = typeCache
+                            .cacheInterfaceTypesFor(type);
+                    for (IType interfaze : interfaceTypes)
+                    {
+                        interfaces.add(interfaze.getFullyQualifiedName());
+                    }
+
+                    IType[] superClassTypes = typeCache
+                            .cacheSupertypesFor(type);
+
+                    for (IType superClass : superClassTypes)
+                    {
+                        superClasses.add(superClass.getFullyQualifiedName());
+                    }
+                }
+
+                return new ComponentTypeInfo(classType, className, superClasses
+                        .toArray(new String[0]), interfaces
+                        .toArray(new String[0]), family, renderer);
+            }
+            catch (final ProxyException tp)
+            {
+                // fall through
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @param converterId
+     * @param converterClass
+     * @return a new converter type info for the converter id.
+     */
+    public static ConverterTypeInfo getConverter(final String converterId,
+            final String converterClass)
+    {
+        return new ConverterTypeInfo(converterClass, converterId);
+    }
+
+    /**
+     * @param validatorId
+     * @param validatorClass
+     * @return a new validator type info for the validator id
+     */
+    public static ValidatorTypeInfo getValidator(final String validatorId,
+            final String validatorClass)
+    {
+        return new ValidatorTypeInfo(validatorClass, validatorId);
+    }
+
+    /**
+     * @param componentType
+     * @param project
+     * @return the configured class name for the JSF component type id or null
+     *         if not found.
+     */
+    public static String findComponentClass(final String componentType,
+            final IProject project)
+    {
+        final JSFAppConfigManager manager = JSFAppConfigManager
+                .getInstance(project);
+        final List components = manager.getComponents();
+
+        for (final Iterator it = components.iterator(); it.hasNext();)
+        {
+            final ComponentType component = (ComponentType) it.next();
+            final String type = component.getComponentType().getTextContent()
+                    .trim();
+
+            if (componentType.equals(type))
+            {
+                return component.getComponentClass().getTextContent().trim();
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @param converterId
+     * @param project
+     * @return a fully qualified class name corresponding to converterId or null
+     *         if none.
+     */
+    public static String findConverterClass(final String converterId,
+            final IProject project)
+    {
+        final JSFAppConfigManager manager = JSFAppConfigManager
+                .getInstance(project);
+        final List converters = manager.getConverters();
+
+        for (final Iterator it = converters.iterator(); it.hasNext();)
+        {
+            final ConverterType converter = (ConverterType) it.next();
+
+            if (converter != null && converter.getConverterId() != null
+                    && converter.getConverterId().getTextContent() != null)
+            {
+                final String type = converter.getConverterId().getTextContent()
+                        .trim();
+
+                if (converterId.equals(type))
+                {
+                    if (converter.getConverterClass() != null && converter.getConverterClass().getTextContent()!=null)
+                    {
+                        return converter.getConverterClass().getTextContent()
+                                .trim();
+                    }
+                    return null;
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @param validatorId
+     * @param project
+     * @return a fully qualified class name corresponding to the validatorId or
+     *         null if none.
+     */
+    public static String findValidatorClass(final String validatorId,
+            final IProject project)
+    {
+        final JSFAppConfigManager manager = JSFAppConfigManager
+                .getInstance(project);
+        final List converters = manager.getValidators();
+
+        for (final Iterator it = converters.iterator(); it.hasNext();)
+        {
+            final ValidatorType validatorType = (ValidatorType) it.next();
+            
+            if (validatorType != null && validatorType.getValidatorId() != null && 
+                    validatorType.getValidatorId().getTextContent() != null)
+            {
+                final String type = validatorType.getValidatorId().getTextContent()
+                        .trim();
+    
+                if (validatorId.equals(type))
+                {
+                    return validatorType.getValidatorClass().getTextContent()
+                            .trim();
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @param type
+     * @param checkInstanceOf
+     * @return true if type resolves to a type that is an instance of one of the
+     *         types in checkInstanceOf.
+     */
+    public static boolean isTypeNameInstanceOfClass(final IType type,
+            final Set<String> checkInstanceOf)
+    {
+        if (type != null)
+        {
+            // first and foremost, are these exactly droids you're
+            // looking for and not just their predecessors?
+            if (checkInstanceOf.contains(type.getFullyQualifiedName()))
+            {
+                return true;
+            }
+
+            for (final IType supertype : getSharedTypeCache()
+                    .cacheSupertypesFor(type))
+            {
+                if (checkInstanceOf.contains(supertype.getFullyQualifiedName()))
+                {
+                    return true;
+                }
+            }
+
+            for (final IType interfaces : getSharedTypeCache()
+                    .cacheInterfaceTypesFor(type))
+            {
+                if (checkInstanceOf
+                        .contains(interfaces.getFullyQualifiedName()))
+                {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * @param typeInfo
+     * @param project
+     * @return a list of all bean properties (using the POJO method) on
+     *         typeInfo. List may be empty, never null.
+     */
+    public static Map<String, JDTBeanProperty> getBeanProperties(
+            final ComponentTypeInfo typeInfo, final IProject project)
+    {
+        Map<String, JDTBeanProperty> properties = new HashMap<String, JDTBeanProperty>();
+
+        IJavaProject javaProject = JavaCore.create(project);
+        try
+        {
+            IType type = javaProject.findType(typeInfo.getClassName());
+
+            if (type != null)
+            {
+                // TODO: should be able to use type cache for this
+                final JDTBeanIntrospector introspector = new JDTBeanIntrospector(
+                        type);
+                properties = introspector.getProperties();
+            }
+        }
+        catch (JavaModelException e)
+        {
+            JSFCorePlugin.log("Error finding component type", e);
+        }
+
+        return properties;
+    }
+
+    /**
+     * @param project
+     * @return a new proxy factory registry or null;
+     * 
+     * TODO: caching?
+     */
+    private static ProxyFactoryRegistry getProxyFactoryRegistry(
+            final IProject project)
+    {
+        try
+        {
+            return IDERegistration.startAnImplementation(null, false, project,
+                    project.getName(), JSFCorePlugin.PLUGIN_ID,
+                    new NullProgressMonitor());
+        }
+        catch (final CoreException e)
+        {
+            JSFCorePlugin.log("Error starting vm for project: "
+                    + project.getName(), e);
+        }
+
+        return null;
+    }
+
+    private DTComponentIntrospector()
+    {
+        // no external instantiation
+    }
+
+    // private static class
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTUIViewRoot.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTUIViewRoot.java
new file mode 100644
index 0000000..84792c1
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DTUIViewRoot.java
@@ -0,0 +1,50 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo;
+
+/**
+ * The interface for all design view root objects.
+ *
+ */
+public abstract class DTUIViewRoot extends ComponentInfo
+{
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -6375907116774572269L;
+
+    /*package*/ DTUIViewRoot(final String id, final ComponentInfo parent,
+            final ComponentTypeInfo componentTypeInfo) {
+        super(id, parent, componentTypeInfo, true);
+    }
+
+    /**
+     * @return the view id
+     */
+    public abstract String getViewId();
+    
+    /**
+     * @param viewId 
+     * 
+     */
+    public abstract void setViewId(final String viewId);
+    
+    /**
+     * <p>Update the view root to synchronize it with the corresponding
+     * view definition.  It is up to the view handler that created the view
+     * handler to configure the root so it knows how to access its view definition</p>
+     * 
+     * <p>This method may cause long running operations to be performed.  If
+     * you provide a non-null runnable for runAfter, refresh() will run long 
+     * running operation on a background thread and return quickly to the caller.
+     * runAfter will be executed on successful (non-cancelled) completion of the
+     * refresh operations.  Passing null will cause the calling thread to block
+     * until necessary operations are complete.
+     * 
+     * No guarantee is made as to what thread runAfter will run on.
+     * </p>
+     * @param runAfter 
+     */
+    public abstract void refresh(final Runnable runAfter);
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTUIViewRoot.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTUIViewRoot.java
new file mode 100644
index 0000000..17b5663
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTUIViewRoot.java
@@ -0,0 +1,114 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jst.jsf.common.internal.RunOnCompletionPattern;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.eclipse.jst.jsf.designtime.internal.view.DefaultDTViewHandler.DefaultViewDefnAdapterFactory;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException;
+import org.w3c.dom.Node;
+
+/**
+ * The default view root implementation
+ * 
+ * @author cbateman
+ * 
+ */
+class DefaultDTUIViewRoot extends DTUIViewRoot
+{
+    /**
+     * serializable
+     */
+    private static final long serialVersionUID = -6948413077931237435L;
+    private final DefaultDTViewHandler _viewHandler;
+    private final DTFacesContext _context;
+    private DefaultViewDefnAdapterFactory _viewDefnAdapterFactory;
+    private String _viewId;
+    private XMLComponentTreeConstructionStrategy _constructionStrategy;
+
+    /**
+     * @param viewHandler
+     *            TODO: should we decouple from the viewHandler by creating and
+     *            update proxy?
+     */
+    DefaultDTUIViewRoot(final DTFacesContext context,
+            final DefaultDTViewHandler viewHandler)
+    {
+        // TODO: refactor constants
+        super(null, null, new ComponentTypeInfo("javax.faces.ViewRoot",
+                "javax.faces.component.UIViewRoot", "javax.faces.ViewRoot",
+                null));
+        _context = context;
+        _viewHandler = viewHandler;
+        try
+        {
+            _viewDefnAdapterFactory =
+            // TODO: not extensible
+            (DefaultViewDefnAdapterFactory) _viewHandler
+                    .getViewMetadataAdapterFactory(context);
+        }
+        catch (final ViewHandlerException e)
+        {
+            JSFCorePlugin.log(e, "Trying to get view adapter factory");
+        }
+    }
+
+    @Override
+    public String getViewId()
+    {
+        return _viewId;
+    }
+
+    @Override
+    public void setViewId(final String viewId)
+    {
+        _viewId = viewId;
+    }
+
+    @Override
+    public void refresh(final Runnable runAfter)
+    {
+        if (_constructionStrategy == null)
+        {
+            final IViewDefnAdapter<Node, IDocument> adapter = _viewDefnAdapterFactory
+                    .createAdapter(_context, _viewId);
+            _constructionStrategy = new XMLComponentTreeConstructionStrategy(
+                    (XMLViewDefnAdapter) adapter, _context.adaptContextObject()
+                            .getProject());
+        }
+
+        final Job refreshTreeJob = new RefreshTreeJob(_constructionStrategy,
+                _context, this);
+        
+        new RunOnCompletionPattern(refreshTreeJob, runAfter).run();
+    }
+
+    private static class RefreshTreeJob extends Job
+    {
+        private final XMLComponentTreeConstructionStrategy _strategy;
+        private final DTFacesContext _facesContext;
+        private final DTUIViewRoot _root;
+
+        public RefreshTreeJob(
+                final XMLComponentTreeConstructionStrategy strategy,
+                final DTFacesContext facesContext, final DTUIViewRoot root)
+        {
+            super("Refresh Tree Job");
+            _strategy = strategy;
+            _facesContext = facesContext;
+            _root = root;
+        }
+
+        @Override
+        protected IStatus run(final IProgressMonitor monitor)
+        {
+            _strategy.createComponentTree(_facesContext, _root);
+            return Status.OK_STATUS;
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTViewHandler.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTViewHandler.java
new file mode 100644
index 0000000..866fa10
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/DefaultDTViewHandler.java
@@ -0,0 +1,126 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jst.jsf.common.internal.JSPUtil;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry.TLDTagRegistry;
+import org.w3c.dom.Node;
+
+/**
+ * A default implementation of the design time view handler meant to parallel
+ * the default runtime ViewHandler required by the JSF spec.
+ * 
+ */
+public class DefaultDTViewHandler extends AbstractDTViewHandler
+{
+
+    @Override
+    public String calculateLocale(final DTFacesContext context)
+            throws ViewHandlerException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public IResource getActionDefinition(final DTFacesContext context,
+            final String viewId) throws ViewHandlerException
+    {
+        // TODO: this seems like a bit of a cope out...
+        return context.adaptContextObject();
+    }
+
+    @Override
+    public IPath getActionURL(final DTFacesContext context,
+            final IResource resource, final IPath requestPath)
+            throws ViewHandlerException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public IPath getRelativeActionPath(final DTFacesContext context,
+            final String relativeToViewId, final String uri)
+            throws ViewHandlerException
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public IViewDefnAdapterFactory getViewMetadataAdapterFactory(
+            final DTFacesContext context) throws ViewHandlerException
+    {
+        final IResource res = context.adaptContextObject();
+
+        if (res instanceof IFile)
+        {
+            return new DefaultViewDefnAdapterFactory(this);
+        }
+
+        return null;
+    }
+
+    static class DefaultViewDefnAdapterFactory extends
+            AbstractViewDefnAdapterFactory
+    {
+        private final DefaultDTViewHandler _myViewHandler;
+
+        DefaultViewDefnAdapterFactory(final DefaultDTViewHandler viewHandler)
+        {
+            _myViewHandler = viewHandler;
+        }
+
+        @Override
+        public IViewDefnAdapter<Node, IDocument> createAdapter(
+                final DTFacesContext context, final String viewId)
+        {
+            try
+            {
+                final IResource res =
+                        _myViewHandler.getActionDefinition(context, viewId);
+
+                if (res instanceof IFile)
+                {
+                    final IProject proj = res.getProject();
+                    final TLDTagRegistry registry =
+                            TLDTagRegistry.getRegistry(proj);
+                    final IFile srcFile = (IFile) res;
+                    if (JSPUtil.isJSPContentType(srcFile) && registry != null)
+                    {
+                        // if we have a jsp file, then return the default
+                        // adapter
+                        return new JSPViewDefnAdapter(registry);
+                    }
+                }
+            }
+            catch (final ViewHandlerException vhe)
+            {
+                JSFCorePlugin.log(vhe, "While acquiring view adapter");
+            }
+
+            // not found or failed
+            return null;
+        }
+    }
+
+    @Override
+    protected DTUIViewRoot internalCreateView(
+            final DTFacesContext facesContext, final String viewId)
+    {
+        return new DefaultDTUIViewRoot(facesContext, this);
+    }
+
+    @Override
+    public boolean supportsViewDefinition(IFile file)
+    {
+        // currently only JSP content type is supported
+        return (JSPUtil.isJSPContentType(file));
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/IDTViewHandler.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/IDTViewHandler.java
new file mode 100644
index 0000000..699b013
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/IDTViewHandler.java
@@ -0,0 +1,225 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+
+/**
+ * <p>Defines the basic interface for all design time view handlers that
+ * parallel custom runtime view handlers (extenders of ViewHandler).</p>
+ * 
+ * @author cbateman
+ *
+ */
+public interface IDTViewHandler 
+{
+    /**
+     * <p>Creates and returns the view root.  This method <i>may</i> optionally
+     * intialize the view root with any data that need only be done
+     * once per instance.  Generally, this will include providing the root
+     * access to itself or its IViewDefnAdapterFactory so that it can refresh
+     * itself. </p>
+     * <p>If the call does not initialize the viewId on the viewRoot to a 
+     * non-null value, the framework will set it to viewId 
+     * (normally the implementer should always setViewId on the new
+     * root to viewId).</p>
+     * 
+     * @param facesContext
+     * @param viewId
+     * @return a designtime view root instance of viewId under
+     * the given faces context
+     * @throws ViewHandlerException 
+     */
+    DTUIViewRoot createView(DTFacesContext facesContext, String viewId) throws ViewHandlerException;
+    
+    // TODO: I think this is better done by the view root itself.
+    /**
+     * Populate the view root with the component tree for the view definition
+     * associated with context.  The returned value *must* have the same viewId
+     * as viewRoot, but the implementer can return a different instance of
+     * IDTUIViewRoot so long as the assertion:
+     * 
+     * viewRoot.getViewId().equals(populateView(facesContext, viewRoot).getViewId())
+     * 
+     * holds true.  For a given view, this method may be called many times
+     * on the same view root to synchronizes changes in the associated view
+     * definition (i.e. a JSP).
+     * 
+     * @param context
+     * @param viewRoot
+     * @param viewId
+     * @return the populated view root.  Normally this will be the same
+     * as viewRoot but the implementer need not guarantee this.
+     * @throws ViewHandlerException 
+     */
+//    IDTUIViewRoot populateView(DTFacesContext context, IDTUIViewRoot viewRoot)throws ViewHandlerException;
+
+    /**
+     * Calculate the locale for the current view context.  The return string must
+     * conform to the standard format proscribed by java.util.Locale.
+     * 
+     * @param context
+     * @return the locale string for the view definition referred to by context
+     * @throws ViewHandlerException
+     */
+    String calculateLocale(DTFacesContext context) throws ViewHandlerException;
+    
+    /**
+     * Given that resource is the view definition source and requestPath is the
+     * current servlet uri for a request relative to the web content root, map 
+     * it to the actual request uri that would be required at runtime to invoke
+     * the view definition in resource.  DTFacesContext will contain an external
+     * context that may be used to derive servlet mapping configuration.
+     * 
+     * @param context
+     * @param resource
+     * @param requestPath
+     * @return the IPath representing the newly mapped request path
+     * @throws ViewHandlerException 
+     */
+    IPath getActionURL(DTFacesContext context, IResource resource, IPath requestPath) throws ViewHandlerException;
+    
+    /**
+     * TODO: if we already have context, must we already know what the source is?
+     * 
+     * The IResource need not exist.
+     * 
+     * @param context
+     * @param viewId
+     * @return the resource containing the view definition for viewId.
+     * @throws ViewHandlerException 
+     */
+    IResource getActionDefinition(DTFacesContext context, String viewId) throws ViewHandlerException;
+    
+    /**
+     * Given that a request is made for uri from within the view named by
+     * relativeToViewId at runtime, return the path to the resource containing
+     * that view definition.  The path need not point to a resource that
+     * currently exists.
+     * 
+     * @param context
+     * @param relativeToViewId
+     * @param uri
+     * @return the path to the resource named by uri relative to the view
+     * named by relativeToViewId
+     * @throws ViewHandlerException 
+     */
+    IPath getRelativeActionPath(DTFacesContext context, String relativeToViewId, String uri) throws ViewHandlerException;
+    
+    /**
+     * Translate a workspace resource to the view id it will have at runtime.
+     * 
+     * @param context 
+     * @param res
+     * @return the view id for res or null if there is no meaningful value
+     */
+    String getViewId(DTFacesContext context, IResource res);
+
+    /**
+     * @param context
+     * @return a view definition adapter
+     * @throws ViewHandlerException 
+     */
+    IViewDefnAdapterFactory getViewMetadataAdapterFactory(DTFacesContext context) throws ViewHandlerException;
+
+
+    /**
+     * @param file
+     * @return true if the contents of the file is of a format that this
+     * view handler supports.  Generally, this is decided by a combination
+     * of content type and, in the case of XML formats, schema.
+     */
+    boolean supportsViewDefinition(final IFile file);
+    
+    /**
+     * General exception class for problems that a custom view handler
+     * wants to propagate to the framework in a well-defined way.
+     *
+     */
+    public static final class ViewHandlerException extends Exception
+    {
+        private final Cause  _causeCode;
+        
+        /**
+         * Enumerates the known failure causes
+         *
+         */
+        public enum Cause 
+        {
+            /**
+             * thrown from getELExpression when the context passed does
+             * not refer to a parsable EL expression in the view definition
+             */
+            EL_NOT_FOUND,
+            /**
+             * thrown from getELExpression when an exception occurs during
+             * EL parsing.  The ViewHandlerException should wrap the causing
+             * exception in this cause
+             */
+            EL_EXCEPTION_CAUGHT_WHILE_PARSING,
+            /**
+             * an undefined exception cause indicating something not foreseen
+             * by the framework.
+             */
+            UNDEFINED
+        }
+        
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 2109525340402345111L;
+
+        /**
+         * Construct an exception with an undefined cause
+         */
+        public ViewHandlerException() {
+            this(Cause.UNDEFINED);
+        }
+
+        
+        /**
+         * @param cause
+         */
+        public ViewHandlerException(final Cause cause) {
+            super();
+            _causeCode = cause;
+        }
+
+        /**
+         * @param message
+         * @param caught
+         * @param cause
+         */
+        public ViewHandlerException(final String message, final Throwable caught, final Cause cause) {
+            super(message, caught);
+            _causeCode = cause;
+        }
+
+        /**
+         * @param message
+         * @param cause
+         */
+        public ViewHandlerException(final String message, final Cause cause) {
+            super(message);
+            _causeCode = cause;
+        }
+
+        /**
+         * @param caught
+         * @param cause
+         */
+        public ViewHandlerException(final Throwable caught, final Cause cause) {
+            super(caught);
+            _causeCode = cause;
+        }
+
+
+        /**
+         * @return the cause code
+         */
+        public final Cause getCauseCode() {
+            return _causeCode;
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/IViewDefnAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/IViewDefnAdapter.java
new file mode 100644
index 0000000..e608f2b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/IViewDefnAdapter.java
@@ -0,0 +1,97 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import java.util.List;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.ViewObject;
+import org.eclipse.jst.jsf.common.runtime.internal.model.datatypes.ELExpression;
+import org.eclipse.jst.jsf.context.IModelContext;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException;
+
+/**
+ * <p>
+ * A generic adapter used to adapt arbitrary view definitions to framework
+ * objects.
+ * </p>
+ * 
+ * @author cbateman
+ * @param <VIEW_DEFN_BASE_TYPE>
+ *            the base type of all view definition objects
+ * @param <VIEW_CONTAINER_TYPE>
+ *            the type of the container that is expeccted to hold the view defn
+ * 
+ */
+public interface IViewDefnAdapter<VIEW_DEFN_BASE_TYPE, VIEW_CONTAINER_TYPE>
+{
+    /**
+     * @param viewDefnObject
+     * @param constructionData
+     * @param viewContainer
+     * @return a view object corresponding to the viewDefnBaseType object or
+     *         null if none.
+     */
+    ViewObject mapToViewObject(
+            VIEW_DEFN_BASE_TYPE viewDefnObject,
+            ViewObjectConstructionStrategy<? extends VIEW_DEFN_BASE_TYPE> constructionData,
+            VIEW_CONTAINER_TYPE viewContainer);
+
+    /**
+     * @param viewDefnObject
+     * @return the id for the viewDefnObject or null if none. Generally, null
+     *         should indicate that no id is present but could be. This is
+     *         distinct from the case where viewDefnObject can never define an
+     *         id, in which case IllegalArgumentException should be thrown.
+     * 
+     * @throws IllegalArgumentException
+     *             may be thrown to indicate that viewDefnObject does not
+     *             correspond to a ViewObject type that has an id.
+     * 
+     */
+    String getId(VIEW_DEFN_BASE_TYPE viewDefnObject)
+            throws IllegalArgumentException;
+
+    /**
+     * Normally this is a workspace resource (IFile) or higher level document
+     * type like an IDocument.
+     * 
+     * @param context
+     * @param viewId
+     * @return the container resource for the viewId in context.
+     */
+    VIEW_CONTAINER_TYPE getContainer(DTFacesContext context, String viewId);
+
+    /**
+     * @param container
+     * @return the view roots for the definition in container or empty if none.
+     *         MUST NOT BE NULL.
+     */
+    List<VIEW_DEFN_BASE_TYPE> getViewDefnRoots(VIEW_CONTAINER_TYPE container);
+
+    /**
+     * <p>
+     * The view definition adapter must be able to extract all EL expressions
+     * from a view definition. Given a model context that points into the view
+     * definition it must return the EL expression in that context.
+     * </p>
+     * 
+     * <p>
+     * If the model context provided does not refer to a valid view definition
+     * for this handler, then ViewHandlerException(EL_NOT_FOUND) should be
+     * thrown. If an exception occurs while trying to extract the EL expression
+     * at context, then ViewHandlerException(caughtException,
+     * EL_EXCEPTION_CAUGHT_WHILE_PARSING) should be thrown.
+     * </p>
+     * 
+     * <p>
+     * Note that any reference to parsing here means extraction from the
+     * document and not building an AST for the expression itself.</p>
+     * 
+     * @param context
+     * @return the text (stripped of any escaping such as #{} in JSP) of the EL
+     *         expression referred to by context or null if there is no valid EL
+     *         expression at context.
+     * @throws ViewHandlerException
+     */
+    ELExpression getELExpression(IModelContext context) throws ViewHandlerException;
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/IViewDefnAdapterFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/IViewDefnAdapterFactory.java
new file mode 100644
index 0000000..3e5f068
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/IViewDefnAdapterFactory.java
@@ -0,0 +1,20 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+
+/**
+ * <p>Interface for a factory that creates view definition adapters.</p>
+ * 
+ * @author cbateman
+ *
+ */
+public interface IViewDefnAdapterFactory 
+{
+    /**
+     * @param context
+     * @param viewId
+     * @return a view adapter for the viewid or null if this factory
+     * cannot produce an adapter for the underlying view definition.
+     */
+    IViewDefnAdapter<?,?> createAdapter(DTFacesContext context, String viewId); 
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/JSPViewDefnAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/JSPViewDefnAdapter.java
new file mode 100644
index 0000000..4dca378
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/JSPViewDefnAdapter.java
@@ -0,0 +1,292 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jst.jsf.common.runtime.internal.model.ViewObject;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.Namespace;
+import org.eclipse.jst.jsf.context.IModelContext;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.ITextRegionContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException.Cause;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry.TLDTagRegistry;
+import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TaglibTracker;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument;
+import org.eclipse.jst.jsp.core.internal.domdocument.DOMModelForJSP;
+import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * <p>
+ * A view definition adapter that adapts JSF view definitions based on the
+ * standard JSP view description language.
+ * </p>
+ * 
+ * @author cbateman
+ * 
+ */
+public class JSPViewDefnAdapter extends XMLViewDefnAdapter
+{
+    private final TLDTagRegistry _tldTagRegistry;
+
+    JSPViewDefnAdapter(final TLDTagRegistry tldTagRegistry)
+    {
+        _tldTagRegistry = tldTagRegistry;
+    }
+
+    @Override
+    public IDocument getContainer(final DTFacesContext context,
+            final String viewId)
+    {
+        final IResource viewDefn = context.adaptContextObject();
+
+        if (viewDefn instanceof IFile)
+        {
+            final IFile viewDefnFile = (IFile) viewDefn;
+            IStructuredModel model = null;
+            try
+            {
+                model =
+                    StructuredModelManager.getModelManager()
+                    .getModelForRead(viewDefnFile);
+
+                if (model instanceof DOMModelForJSP)
+                {
+                    return model.getStructuredDocument();
+                }
+            }
+            catch (final IOException e)
+            {
+                JSFCorePlugin.log(e, "Acquiring model for view root");
+            }
+            catch (final CoreException e)
+            {
+                JSFCorePlugin.log(e, "Acquiring model for view root");
+            }
+            finally
+            {
+                if (model != null)
+                {
+                    model.releaseFromRead();
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public ViewObject mapToViewObject(
+            final Node viewDefnObject,
+            final ViewObjectConstructionStrategy<? extends Node> constructionData,
+            final IDocument document)
+    {
+        switch (viewDefnObject.getNodeType())
+        {
+            case Node.ELEMENT_NODE:
+                return createFromElement(
+                        (Element) viewDefnObject,
+                        (ViewObjectConstructionStrategy<Element>) constructionData,
+                        document);
+        }
+
+        return null;
+    }
+
+    @Override
+    protected final String getNamespace(final Element element,
+            final IDocument doc)
+    {
+        final String prefix = element.getPrefix();
+
+        // TODO: merge back with JSPUtil.findUri()
+        final TLDCMDocumentManager m =
+            TaglibController.getTLDCMDocumentManager(doc);
+
+        if (prefix == null || m == null)
+        {
+            return null;
+        }
+        final List<?> trackers = m.getTaglibTrackers();
+        for (final Object name : trackers)
+        {
+            final TaglibTracker tracker = (TaglibTracker) name;
+            if (prefix.equals(tracker.getPrefix()))
+            {
+                final CMDocument cmdoc = tracker.getDocument();
+                if (cmdoc instanceof TLDDocument)
+                {
+                    return ((TLDDocument) cmdoc).getUri();
+                }
+                break; // fall out and return null
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @param node
+     * @param document
+     * @return the tag element for node or null if none.
+     */
+    @Override
+    protected ITagElement findTagElement(final Element node,
+            final IDocument document)
+    {
+        final String uri = getNamespace(node, document);
+        final String tagName = node.getLocalName();
+
+        if (uri != null)
+        {
+            // currently tied to JSP, need to abstract for others
+            final Namespace lib = _tldTagRegistry.getTagLibrary(uri);
+
+            if (lib != null)
+            {
+                return findTagElement(tagName, lib);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public String getId(final Node viewDefnObject)
+    throws IllegalArgumentException
+    {
+        if (viewDefnObject instanceof Element)
+        {
+            return ((Element) viewDefnObject).getAttribute("id");
+        }
+        throw new IllegalArgumentException(
+        "Only Elements can define view object ids");
+    }
+
+    @Override
+    public List<Node> getViewDefnRoots(final IDocument container)
+    {
+        final List<Node> roots = new ArrayList<Node>();
+
+        final IStructuredDocumentContext context =
+            IStructuredDocumentContextFactory.INSTANCE.getContext(
+                    container, -1);
+
+        if (context != null)
+        {
+            final IDOMContextResolver resolver =
+                IStructuredDocumentContextResolverFactory.INSTANCE
+                .getDOMContextResolver(context);
+
+            if (resolver != null)
+            {
+                final Document doc = resolver.getDOMDocument();
+
+                if (doc != null)
+                {
+                    roots.add(doc);
+                }
+            }
+        }
+
+        return roots;
+    }
+
+    @Override
+    public DTELExpression getELExpression(final IModelContext genericContext)
+    throws ViewHandlerException
+    {
+        final IStructuredDocumentContext context =
+            (IStructuredDocumentContext) genericContext
+            .getAdapter(IStructuredDocumentContext.class);
+
+        if (context == null)
+        {
+            throw new ViewHandlerException(Cause.EL_NOT_FOUND);
+        }
+
+        ITextRegionContextResolver resolver =
+            IStructuredDocumentContextResolverFactory.INSTANCE
+            .getTextRegionResolver(context);
+
+        String elText = null;
+
+        if (resolver != null)
+        {
+            final String regionType = resolver.getRegionType();
+
+            if (regionType != null && resolver.matchesRelative(new String[]
+                              { DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE }))
+            {
+                // if we are in the EL content, then get the current region
+                // text
+                if (DOMJSPRegionContexts.JSP_VBL_CONTENT.equals(regionType))
+                {
+                    elText = resolver.getRegionText().trim();
+                }
+                // otherwise, we may be at the end of a content region but
+                // at
+                // the beginning of a closing brace so check to see if the
+                // previous
+                // region was a VBL_CONTENT
+                else if (regionType.equals(DOMJSPRegionContexts.JSP_VBL_CLOSE))
+                {
+                    final IStructuredDocumentContext previousContext =
+                        resolver.getPreviousContext();
+
+                    final ITextRegionContextResolver prevResolver =
+                        IStructuredDocumentContextResolverFactory.INSTANCE
+                        .getTextRegionResolver(previousContext);
+
+                    if (prevResolver != null)
+                    {
+                        if (DOMJSPRegionContexts.JSP_VBL_CONTENT
+                                .equals(prevResolver.getRegionType()))
+                        {
+                            resolver = prevResolver;
+                            elText = prevResolver.getRegionText().trim();
+                        }
+                        else if (DOMJSPRegionContexts.JSP_VBL_OPEN
+                                .equals(prevResolver.getRegionType()))
+                        {
+                            elText = ""; //$NON-NLS-1$
+                        }
+                    }
+                }
+            }
+        }
+
+        if (elText != null)
+        {
+            final IStructuredDocumentContext elContext =
+                IStructuredDocumentContextFactory.INSTANCE.getContext(
+                        context.getStructuredDocument(), resolver
+                        .getStartOffset());
+            return new DTELExpression(elContext, elText);
+        }
+        return null;
+    }
+
+    @Override
+    public String getGeneratedIdPrefix()
+    {
+        return "_idJsp";
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/ViewObjectConstructionStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/ViewObjectConstructionStrategy.java
new file mode 100644
index 0000000..9f2668c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/ViewObjectConstructionStrategy.java
@@ -0,0 +1,23 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.ViewObject;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+
+/**
+ * A strategy for constructing a new view object from a tag element
+ * @author cbateman
+ * @param <VIEW_DEFN_BASE_TYPE> 
+ *
+ */
+public abstract class ViewObjectConstructionStrategy<VIEW_DEFN_BASE_TYPE>
+{
+    /**
+     * For a tag element return the corresponding view object or null if
+     * there is no such object.
+     * 
+     * @param viewBase the source object in the source
+     * @param tagElement
+     * @return a new view object or null if we can't do so
+     */
+    public abstract ViewObject createViewObject(VIEW_DEFN_BASE_TYPE viewBase, ITagElement tagElement); 
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/XMLComponentTreeConstructionStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/XMLComponentTreeConstructionStrategy.java
new file mode 100644
index 0000000..b51dadb
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/XMLComponentTreeConstructionStrategy.java
@@ -0,0 +1,153 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jst.jsf.common.runtime.internal.model.ViewObject;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentFactory;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterDecorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.Decorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorDecorator;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * A component tree construction strategy based on XML view definition
+ * 
+ * @author cbateman
+ * 
+ */
+public class XMLComponentTreeConstructionStrategy extends
+        ComponentTreeConstructionStrategy<Node, IDocument>
+{
+    private final XMLViewDefnAdapter                _adapter;
+    private final XMLViewObjectConstructionStrategy _objectConstructionStrategy;
+
+    /**
+     * @param adapter
+     * @param project
+     */
+    public XMLComponentTreeConstructionStrategy(
+            final XMLViewDefnAdapter adapter, final IProject project)
+    {
+        _adapter = adapter;
+        _objectConstructionStrategy =
+                new XMLViewObjectConstructionStrategy(adapter,
+                        new ComponentConstructionData(0, null, project));
+    }
+
+    @Override
+    public ComponentInfo createComponentTree(final DTFacesContext context,
+            final DTUIViewRoot viewRoot)
+    {
+        final IDocument container =
+                _adapter.getContainer(context, viewRoot.getViewId());
+        final List<Node> roots = _adapter.getViewDefnRoots(container);
+
+        if (roots.size() > 0)
+        {
+            _objectConstructionStrategy.getConstructionData().setIdCounter(0);
+            // can only handle a single root for XML; should be the DOM root
+            return buildComponentTree(roots.get(0), viewRoot, container);
+        }
+
+        return viewRoot;
+    }
+
+    private ComponentInfo buildComponentTree(final Node root,
+            final DTUIViewRoot viewRoot, final IDocument document)
+    {
+        final ComponentInfo dummyRoot =
+                ComponentFactory.createComponentInfo(null, null, null, true);
+        recurseDOMModel(root, dummyRoot, document);
+
+        ComponentInfo foundRoot = null;
+
+        // TODO: additional cases:
+        // 1) Valid case: view is a fragment and has one or more non-view root
+        // children
+        // 2) Invalid case: not a fragment and has no view root
+        // 3) Invalid case: any definition and has more than one view root
+        // 4) Invalid case: any definition and has component siblings to the
+        // view root
+        FIND_VIEWROOT: for (final Iterator it =
+                dummyRoot.getChildren().iterator(); it.hasNext();)
+        {
+            final ComponentInfo topLevelChild = (ComponentInfo) it.next();
+
+            if ("javax.faces.ViewRoot".equals(topLevelChild
+                    .getComponentTypeInfo().getComponentType()))
+            {
+                foundRoot = topLevelChild;
+                break FIND_VIEWROOT;
+            }
+        }
+
+        if (foundRoot != null)
+        {
+            for (final Iterator it = foundRoot.getChildren().iterator(); it
+                    .hasNext();)
+            {
+                final ComponentInfo child = (ComponentInfo) it.next();
+                final String facetName = foundRoot.getFacetName(child);
+
+                // if not a facet, add as a normal child
+                if (facetName == null)
+                {
+                    viewRoot.addChild(child);
+                }
+                // if it is a facet, add as a facet
+                else
+                {
+                    viewRoot.addFacet(facetName, child);
+                }
+            }
+        }
+
+        return viewRoot;
+    }
+
+    private void recurseDOMModel(final Node node, final ComponentInfo parent,
+            final IDocument document)
+    {
+        ViewObject mappedObject = null;
+
+        _objectConstructionStrategy.getConstructionData().setParent(parent);
+
+        mappedObject =
+                _adapter.mapToViewObject(node, _objectConstructionStrategy,
+                        document);
+
+        ComponentInfo newParent = parent;
+
+        if (mappedObject instanceof ComponentInfo)
+        {
+            parent.addChild((ComponentInfo) mappedObject);
+            newParent = (ComponentInfo) mappedObject;
+        }
+        else if (mappedObject instanceof ConverterDecorator)
+        {
+            // TODO: validate for parent is not a ValueHolder
+            parent.addDecorator((Decorator) mappedObject,
+                    ComponentFactory.CONVERTER);
+        }
+        else if (mappedObject instanceof ValidatorDecorator)
+        {
+            // TODO: validate for parent is a not an EditableValueHolder
+            parent.addDecorator((Decorator) mappedObject,
+                    ComponentFactory.VALIDATOR);
+        }
+
+        final NodeList children = node.getChildNodes();
+        final int numChildren = children.getLength();
+
+        for (int i = 0; i < numChildren; i++)
+        {
+            recurseDOMModel(children.item(i), newParent, document);
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/XMLViewDefnAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/XMLViewDefnAdapter.java
new file mode 100644
index 0000000..e081818
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/XMLViewDefnAdapter.java
@@ -0,0 +1,196 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jst.jsf.common.runtime.internal.model.ViewObject;
+import org.eclipse.jst.jsf.common.runtime.internal.model.datatypes.ELExpression;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.Namespace;
+import org.eclipse.jst.jsf.context.IModelContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+
+/**
+ * A view definition adapter base class for view definition that use XML to
+ * define the view.
+ * 
+ * @author cbateman
+ * 
+ */
+public abstract class XMLViewDefnAdapter extends
+        AbstractViewDefnAdapter<Node, IDocument>
+{
+    private static final String GENERATED_ID = "_generatedId";
+
+    @Override
+    public abstract IDocument getContainer(DTFacesContext context, String viewId);
+
+    @Override
+    public abstract String getId(Node viewDefnObject)
+            throws IllegalArgumentException;
+
+    @Override
+    public abstract ViewObject mapToViewObject(Node viewDefnObject,
+            ViewObjectConstructionStrategy<? extends Node> constructionData,
+            IDocument viewContainer);
+
+    /**
+     * @param viewDefnObject
+     * @param viewContainer
+     * @return the tag element corresponding to viewDefnObject in the context of
+     *         viewContainer or null if not found. Node must be an Element in
+     *         order for this work.
+     */
+    public ITagElement mapToTagElement(Node viewDefnObject,
+            IDocument viewContainer)
+    {
+        if (viewDefnObject instanceof Element)
+        {
+            return findTagElement((Element) viewDefnObject, viewContainer);
+        }
+        return null;
+    }
+
+    @Override
+    public abstract List<Node> getViewDefnRoots(IDocument container);
+
+    @Override
+    public abstract DTELExpression getELExpression(IModelContext context)
+            throws ViewHandlerException;
+
+    // TODO: need to extend to other objects
+    /**
+     * @param element
+     * @param constructionData
+     * @param document
+     * @return the component info for element
+     */
+    protected ViewObject createFromElement(final Element element,
+            final ViewObjectConstructionStrategy<Element> constructionData,
+            final IDocument document)
+    {
+        final ITagElement tagElement = findTagElement(element, document);
+        return constructionData.createViewObject(element, tagElement);
+    }
+
+    /**
+     * @param element
+     * @param doc
+     * @return the namespace uri for element in doc
+     */
+    protected abstract String getNamespace(Element element, IDocument doc);
+
+    /**
+     * @param node
+     * @param document
+     * @return the tag element for node in document or null if none
+     */
+    protected abstract ITagElement findTagElement(final Element node,
+            final IDocument document);
+
+    /**
+     * @param nodeName
+     * @param lib
+     * @return the tag element with local name nodeName in lib or null if none.
+     */
+    protected static ITagElement findTagElement(final String nodeName,
+            final Namespace lib)
+    {
+        return lib.getViewElement(nodeName);
+    }
+
+    /**
+     * @param namespaces
+     * @param uri
+     * @return the namespace object in namespaces with uri, 'uri', or null if
+     *         none.
+     */
+    protected static Namespace getTaglib(
+            final Collection<? extends Namespace> namespaces, final String uri)
+    {
+        for (final Namespace namespace : namespaces)
+        {
+            if (uri.equals(namespace.getNSUri()))
+            {
+                return namespace;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @return the prefix string to which a running count will be added to
+     *         produced the default generated id
+     */
+    public String getGeneratedIdPrefix()
+    {
+        return GENERATED_ID;
+    }
+
+    /**
+     * @param element
+     * @param componentAttrName
+     * @return the attribute on element matching the component attribute called
+     *         componentAttrName or null if not found (this may indicate either
+     *         no such attribute or that it simply not populated on element; no
+     *         guarantee is made as to which it is)
+     */
+    public Attr mapAttributeToComponent(final Element element,
+            final String componentAttrName)
+    {
+        // TODO: need to make meta-data type driven and validate bad conversion
+
+        boolean mapByBeanName = true; // TODO: getMetadata for mapping instead
+
+        if (mapByBeanName)
+        {
+            return element.getAttributeNode(componentAttrName);
+        }
+
+        return null;
+    }
+
+    /**
+     * A design time EL expression
+     *
+     */
+    public static class DTELExpression extends ELExpression
+    {
+        private final IStructuredDocumentContext _documentContext;
+        private final String                     _originalText;
+
+        /**
+         * @param doc
+         * @param text
+         */
+        public DTELExpression(final IStructuredDocumentContext doc,
+                final String text)
+        {
+            _documentContext = doc;
+            _originalText = text;
+        }
+
+        @Override
+        public String getText()
+        {
+            return _originalText;
+        }
+
+        /**
+         * @return the document context.  The document relative position of
+         * the start of the EL expression is used 
+         * 
+         */
+        public IStructuredDocumentContext getDocumentContext()
+        {
+            return _documentContext;
+        }
+        
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/XMLViewObjectConstructionStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/XMLViewObjectConstructionStrategy.java
new file mode 100644
index 0000000..146a09e
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/XMLViewObjectConstructionStrategy.java
@@ -0,0 +1,326 @@
+package org.eclipse.jst.jsf.designtime.internal.view;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jdt.core.Signature;
+import org.eclipse.jst.jsf.common.internal.types.TypeConstants;
+import org.eclipse.jst.jsf.common.runtime.internal.model.ViewObject;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.ActionSourceInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.ActionSourceInfo2;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.EditableValueHolderInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.INamingContainerInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.behavioural.ValueHolderInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentFactory;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterDecorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorDecorator;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IComponentTagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IConverterTagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IValidatorTagElement;
+import org.eclipse.jst.jsf.common.util.JDTBeanProperty;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+
+/**
+ * A strategy for constructing view objects.
+ * 
+ * @author cbateman
+ * 
+ */
+public class XMLViewObjectConstructionStrategy extends
+        ViewObjectConstructionStrategy<Element>
+{
+    private static final String             GENERATED_ID = "_generatedId";
+    private final ComponentConstructionData _constructionData;
+    private final XMLViewDefnAdapter        _adapter;
+
+    /**
+     * @param adapter
+     * @param constructionData
+     */
+    public XMLViewObjectConstructionStrategy(final XMLViewDefnAdapter adapter,
+            final ComponentConstructionData constructionData)
+    {
+        super();
+        _constructionData = constructionData;
+        _adapter = adapter;
+    }
+
+    @Override
+    public ViewObject createViewObject(final Element element,
+            final ITagElement tagElement)
+    {
+        try
+        {
+            if (tagElement instanceof IComponentTagElement)
+            {
+                final ComponentTypeInfo typeInfo = ((IComponentTagElement) tagElement)
+                        .getComponent();
+                String id = null;
+
+                // only generate ids for non-viewroot components. This will
+                // make the generated id's more faithful to runtime since the
+                // running count won't be incremented for view roots (as they
+                // won't
+                // at runtime).
+                if (!"javax.faces.ViewRoot".equals(typeInfo.getComponentType()))
+                {
+                    id = calculateId(element, _constructionData);
+                }
+                return findBestComponent(element, id, typeInfo);
+            }
+            else if (tagElement instanceof IConverterTagElement)
+            {
+                final ConverterTypeInfo typeInfo = ((IConverterTagElement) tagElement)
+                        .getConverter();
+                // TODO: validate when no parent
+                return new ConverterDecorator(_constructionData.getParent(),
+                        typeInfo);
+            }
+            else if (tagElement instanceof IValidatorTagElement)
+            {
+                final ValidatorTypeInfo typeInfo = ((IValidatorTagElement) tagElement)
+                        .getValidator();
+                return new ValidatorDecorator(_constructionData.getParent(),
+                        typeInfo);
+            }
+        }
+        catch (Exception e)
+        {
+            // log and ignore if an individual construction fails
+            JSFCorePlugin.log(e, "Error constructing view object");
+        }
+        return null;
+    }
+
+    private ComponentInfo findBestComponent(final Element srcElement,
+            final String id, final ComponentTypeInfo typeInfo)
+    {
+        ComponentInfo bestComponent = null;
+
+        final ComponentInfo parent = _constructionData.getParent();
+
+        final Map<String, Object> initMap = new HashMap();
+        populateInitMap(initMap, srcElement, typeInfo);
+
+        if (initMap.get("id") == null)
+        {
+            // id must be set
+            initMap.put("id", id);
+        }
+
+        // if we have a well-established base type, try that first
+        // sub-classes must occur before superclasses to ensure most accurate
+        // detection.
+        if (typeInfo.isInstanceOf(ComponentFactory.BASE_CLASS_UIINPUT))
+        {
+            bestComponent = ComponentFactory.createUIInputInfo(parent,
+                    typeInfo, initMap);
+        }
+        else if (typeInfo.isInstanceOf(ComponentFactory.BASE_CLASS_UIOUTPUT))
+        {
+            bestComponent = ComponentFactory.createUIOutputInfo(parent,
+                    typeInfo, initMap);
+        }
+        else if (typeInfo.isInstanceOf(ComponentFactory.BASE_CLASS_UICOMMAND))
+        {
+            bestComponent = ComponentFactory.createUICommandInfo(parent,
+                    typeInfo, initMap);
+        }
+        else if (typeInfo.isInstanceOf(ComponentFactory.BASE_CLASS_UIDATA))
+        {
+            bestComponent = ComponentFactory.createUIDataInfo(parent, typeInfo,
+                    initMap);
+        }
+        else if (typeInfo.isInstanceOf(ComponentFactory.BASE_CLASS_UIFORM))
+        {
+            // TODO: how handle prepend ids?
+            bestComponent = ComponentFactory.createUIFormInfo(parent, typeInfo,
+                    initMap);
+        }
+        else
+        {
+            // default
+            bestComponent = ComponentFactory.createComponentInfo(
+                    _constructionData.getParent(), typeInfo, initMap);
+        }
+
+        addTypeAdapters(bestComponent);
+        // populateAttributes(srcElement, bestComponent);
+        return bestComponent;
+    }
+
+    private void populateInitMap(final Map initMap, final Element srcElement,
+            final ComponentTypeInfo typeInfo)
+    {
+        final Map<String, JDTBeanProperty> properties = DTComponentIntrospector
+                .getBeanProperties(typeInfo, _constructionData.getProject());
+
+        for (final Map.Entry<String, JDTBeanProperty> propertyEntry : properties
+                .entrySet())
+        {
+            final String name = propertyEntry.getKey();
+
+            // see if there is an attribute on srcElement
+            final Attr valueAttr = _adapter.mapAttributeToComponent(srcElement,
+                    name);
+
+            if (valueAttr != null)
+            {
+                final String value = valueAttr.getNodeValue();
+
+                // TODO: need to handle EL cases
+                if (value != null)
+                {
+                    Object convertedValue = convertFromString(value,
+                            propertyEntry.getValue());
+                    initMap.put(name, convertedValue);
+                }
+            }
+        }
+    }
+
+    private Object convertFromString(final String convertValue,
+            final JDTBeanProperty ofThisType)
+    {
+        final String signature = ofThisType.getTypeSignature();
+
+        Object result = null;
+        switch (Signature.getTypeSignatureKind(signature))
+        {
+        case Signature.BASE_TYPE_SIGNATURE:
+            result = convertFromBaseType(convertValue, signature);
+            break;
+
+        case Signature.CLASS_TYPE_SIGNATURE:
+            if (TypeConstants.TYPE_STRING.equals(signature))
+            {
+                result = convertValue;
+            }
+            else if (TypeConstants.TYPE_JAVAOBJECT.equals(signature))
+            {
+                result = convertValue;
+            }
+            break;
+        }
+
+        return result;
+    }
+
+    // TODO: does this belong somewhere else?
+    private Object convertFromBaseType(final String convertValue,
+            final String signature)
+    {
+        if (Signature.SIG_BOOLEAN.equals(signature))
+        {
+            return Boolean.valueOf(convertValue);
+        }
+        else if (Signature.SIG_INT.equals(signature)
+                || Signature.SIG_BYTE.equals(signature)
+                || Signature.SIG_SHORT.equals(signature))
+        {
+            return Integer.valueOf(convertValue);
+        }
+        else if (Signature.SIG_LONG.equals(convertValue))
+        {
+            return Long.valueOf(convertValue);
+        }
+
+        return null;
+    }
+
+    private void addTypeAdapters(final ComponentInfo component)
+    {
+        final String[] interfaceNames = component.getComponentTypeInfo()
+                .getInterfaces();
+        final Set interfaceNameSets = new HashSet();
+
+        for (final String interfaceName : interfaceNames)
+        {
+            interfaceNameSets.add(interfaceName);
+        }
+
+        // don't replace intrinsic adapters
+        if (interfaceNameSets.contains(ComponentFactory.INTERFACE_ACTIONSOURCE))
+        {
+            // an ActionSource2 is-a ActionSource
+            if (interfaceNameSets
+                    .contains(ComponentFactory.INTERFACE_ACTIONSOURCE2)
+                    && component.getAdapter(ComponentFactory.ACTION_SOURCE2) == null)
+            {
+                component.addAdapter(ComponentFactory.ACTION_SOURCE2,
+                        new ActionSourceInfo2(null, null, false, null));
+            }
+
+            if (component.getAdapter(ComponentFactory.ACTION_SOURCE) == null)
+            {
+                component.addAdapter(ComponentFactory.ACTION_SOURCE,
+                        new ActionSourceInfo(null, null, false));
+            }
+        }
+
+        if (interfaceNameSets.contains(ComponentFactory.INTERFACE_VALUEHOLDER))
+        {
+            // a EditableValueHolder is-a ValueHolder
+            if (interfaceNameSets
+                    .contains(ComponentFactory.INTERFACE_EDITABLEVALUEHOLDER)
+                    && component
+                            .getAdapter(ComponentFactory.EDITABLE_VALUE_HOLDER) == null)
+            {
+                component.addAdapter(ComponentFactory.EDITABLE_VALUE_HOLDER,
+                        new EditableValueHolderInfo(null, null, null, false,
+                                false, true, false, null, null, null));
+            }
+
+            if (component.getAdapter(ComponentFactory.VALUE_HOLDER) == null)
+            {
+                component.addAdapter(ComponentFactory.VALUE_HOLDER,
+                        new ValueHolderInfo(null, null, null));
+            }
+        }
+
+        if (interfaceNameSets
+                .contains(ComponentFactory.INTERFACE_NAMINGCONTAINER)
+                && component.getAdapter(ComponentFactory.NAMING_CONTAINER) == null)
+        {
+            component.addAdapter(ComponentFactory.NAMING_CONTAINER,
+                    INamingContainerInfo.ADAPTER);
+        }
+    }
+
+    /**
+     * @param element
+     * @param constructionData
+     * @return the id for element either derived from the element using getId or
+     *         if not present, using a generation algorithm
+     */
+    protected String calculateId(final Element element,
+            final ComponentConstructionData constructionData)
+    {
+        final String id = _adapter.getId(element);
+        if (id != null)
+        {
+            return id;
+        }
+        // TODO: improve this
+        final String prefix = _adapter.getGeneratedIdPrefix();
+        return (prefix != null ? prefix : GENERATED_ID)
+                + constructionData.increment();
+    }
+
+    /**
+     * @return the construction data for this strategy
+     */
+    public final ComponentConstructionData getConstructionData()
+    {
+        return _constructionData;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/ITagRegistry.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/ITagRegistry.java
new file mode 100644
index 0000000..50f20a0
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/ITagRegistry.java
@@ -0,0 +1,136 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EventListener;
+import java.util.EventObject;
+import java.util.List;
+
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.Namespace;
+
+/**
+ * A registry for tags for a given context TODO: generally tied to project, but
+ * may also need a tie to specific tag-in-use type. For example, if JSPs and
+ * Facelets are used at the same time?
+ * 
+ * @author cbateman
+ * 
+ */
+public interface ITagRegistry
+{
+
+    /**
+     * @return true if this registry is disposed. It is an error to use a
+     *         disposed registry and behaviour of such a registry is not
+     *         guaranteed.
+     */
+    public abstract boolean isDisposed();
+
+    /**
+     * This method may cause long-running operations to be executed. If runAfter
+     * is non-null, any long running operations will schedule asynchronously on
+     * a separate thread and on successful completion, runAfter will be executed
+     * (no assumption should be made about what thread it is run on).
+     * 
+     * @param runAfter
+     * 
+     */
+    public abstract void refresh(final Runnable runAfter);
+
+    /**
+     * @return all tag libraries for a project tag registry
+     */
+    public abstract Collection<? extends Namespace> getAllTagLibraries();
+
+    /**
+     * @param uri
+     * @return the tag library corresponding to uri or null if none.
+     */
+    public abstract Namespace getTagLibrary(final String uri);
+    
+    /**
+     * Adds the listener to the list of objects that receive change events
+     * from this tag registry instance.  If listener is already in the list,
+     * it will not be added again.
+     * 
+     * @param listener
+     */
+    public abstract void addListener(ITagRegistryListener listener);
+    
+    /**
+     * Remove listener from the list of objects that receive change events
+     * from this tag registry instance.
+     * 
+     * @param listener
+     */
+    public abstract void removeListener(ITagRegistryListener listener);
+    
+
+    /**
+     * Marks a listener that receives tag registry change events
+     *
+     */
+    interface ITagRegistryListener extends EventListener
+    {
+        /**
+         * @param changeEvent
+         */
+        void registryChanged(final TagRegistryChangeEvent changeEvent);
+    }
+    
+    /**
+     * A change event object that communicates a single type of change to
+     * a single tag registry
+     *
+     */
+    static class TagRegistryChangeEvent extends EventObject
+    {
+        public enum EventType
+        {
+            // if the type is any of these three, then getAffectedObjects()
+            // will return one or more Namespace objects that have changed.
+            ADDED_NAMESPACE,
+            REMOVED_NAMESPACE,
+            CHANGED_NAMESPACE,
+            
+            // if the type is is this one, then the event is being called
+            // before dispose operation on getSource().
+            REGISTRY_DISPOSED
+        }
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 6559096306615373552L;
+        private final List<? extends Namespace> _affectedObjects;
+        private final EventType _type;
+
+        public TagRegistryChangeEvent(ITagRegistry source, EventType type)
+        {
+            this(source, type, Collections.EMPTY_LIST);
+        }
+        
+        public TagRegistryChangeEvent(ITagRegistry source, EventType type, 
+                List<? extends Namespace> affectedObjects)
+        {
+            super(source);
+            _affectedObjects = affectedObjects;
+            _type = type;
+        }
+
+        @Override
+        public ITagRegistry getSource()
+        {
+            return (ITagRegistry) super.getSource();
+        }
+
+        public List<? extends Namespace> getAffectedObjects()
+        {
+            return _affectedObjects;
+        }
+
+        public EventType getType()
+        {
+            return _type;
+        }
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/AbstractTagResolvingStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/AbstractTagResolvingStrategy.java
new file mode 100644
index 0000000..c8d07a3
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/AbstractTagResolvingStrategy.java
@@ -0,0 +1,25 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+
+/**
+ * Implements the tag resolving strategy.
+ * EWJ 
+ * @author cbateman
+ *
+ * @param <TLDELEMENT>
+ * @param <IDTYPE> 
+ */
+public abstract class AbstractTagResolvingStrategy<TLDELEMENT, IDTYPE> implements
+        ITagResolvingStrategy<TLDELEMENT, IDTYPE>
+{
+
+    public ITagElement getNotFoundIndicator()
+    {
+        return null;
+    }
+
+    public abstract ITagElement resolve(TLDELEMENT element);
+
+    public abstract IDTYPE getId();   
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/CompositeTagResolvingStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/CompositeTagResolvingStrategy.java
new file mode 100644
index 0000000..c761868
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/CompositeTagResolvingStrategy.java
@@ -0,0 +1,96 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.jst.jsf.common.internal.policy.IdentifierOrderedIteratorPolicy;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+
+/**
+ * @author cbateman
+ * 
+ * @param <TLDELEMENT>
+ */
+public class CompositeTagResolvingStrategy<TLDELEMENT> extends
+        AbstractTagResolvingStrategy<TLDELEMENT, String>
+{
+    private static final String ID = "org.eclipse.jst.jsf.designtime.CompositeTagResolvingStrategy";
+
+    private final Map<String, ITagResolvingStrategy<TLDELEMENT, String>> _strategies;
+    private IdentifierOrderedIteratorPolicy<String> _policy;
+
+    /**
+     * 
+     */
+    public CompositeTagResolvingStrategy()
+    {
+        _strategies = new HashMap<String, ITagResolvingStrategy<TLDELEMENT, String>>();
+    }
+
+    @Override
+    public ITagElement resolve(final TLDELEMENT element)
+    {
+        // by default just go in the order added
+        Iterator<String> strategyIterator = _strategies.keySet().iterator();
+        
+        if (_policy != null)
+        {
+            strategyIterator = _policy.getIterator(_strategies.keySet());
+        }
+        
+        while (strategyIterator.hasNext())
+        {
+            final String key = strategyIterator.next();
+            final ITagResolvingStrategy<TLDELEMENT, String> strategy =
+                _strategies.get(key);
+            
+            final ITagElement tagElement = strategy.resolve(element);
+            
+            if (tagElement != strategy.getNotFoundIndicator())
+            {
+                return tagElement;
+            }
+        }
+        
+        return getNotFoundIndicator();
+    }
+
+    /**
+     * Set the optional ordering policy. If set to non-null, then it will be
+     * used to decide order in which the strategies are executed.
+     * 
+     * @param policy
+     */
+    public void setOrderingPolicy(final IdentifierOrderedIteratorPolicy<String> policy)
+    {
+        _policy = policy;
+    }
+
+    /**
+     * Adds the strategy to the composite using the getId to judge uniqueness
+     * @param strategy
+     */
+    public void addStrategy(final ITagResolvingStrategy<TLDELEMENT, String> strategy)
+    {
+        _strategies.put(strategy.getId(), strategy);
+    }
+
+    /**
+     * Remove the strategy corresponding to id.
+     * 
+     * @param id
+     * @return the item removed or null
+     */
+    public ITagResolvingStrategy<TLDELEMENT, String> removeStrategy(final String id)
+    {
+        return _strategies.remove(id);
+    }
+    
+    @Override
+    public String getId()
+    {
+        return ID;
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/DefaultJSPTagResolver.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/DefaultJSPTagResolver.java
new file mode 100644
index 0000000..a73225a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/DefaultJSPTagResolver.java
@@ -0,0 +1,584 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.types.TypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IHandlerTagElement.TagHandlerType;
+import org.eclipse.jst.jsf.core.JSFVersion;
+import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
+import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
+import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory;
+import org.eclipse.jst.jsf.core.jsfappconfig.JSFAppConfigUtils;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+
+/**
+ * ** TEMPORARY CLASS UNTIL META-DATA STRATEGY IS AVAILABLE **
+ * 
+ * @author cbateman
+ * 
+ */
+public class DefaultJSPTagResolver extends JSPTagResolvingStrategy
+{
+    /**
+     * strategy id
+     */
+    public final static String ID = "org.eclipse.jst.jsf.THISISTEMPORARY";
+    private final static Set<String> URI_IS_A_JSF_LIB;
+
+    static
+    {
+        final Set<String> libs = new HashSet<String>();
+        libs.add(ITLDConstants.URI_JSF_CORE);
+        libs.add(ITLDConstants.URI_JSF_HTML);
+        URI_IS_A_JSF_LIB = Collections.unmodifiableSet(libs);
+    }
+
+    private final IProject _project;
+
+    /**
+     * @param project
+     */
+    public DefaultJSPTagResolver(final IProject project)
+    {
+        _project = project;
+    }
+
+    @Override
+    public ITagElement resolve(final TLDElementDeclaration elementDecl)
+    {
+        final TagIdentifier tagId = TagIdentifierFactory
+                .createTLDTagWrapper(elementDecl);
+        final TypeInfo elementType = getTypeInfo(tagId);
+
+        if (elementType instanceof ComponentTypeInfo)
+        {
+            return new TLDComponentTagElement(elementDecl,
+                    (ComponentTypeInfo) elementType);
+        }
+        else if (elementType instanceof ConverterTypeInfo)
+        {
+            return new TLDConverterTagElement(elementDecl,
+                    (ConverterTypeInfo) elementType);
+        }
+        else if (elementType instanceof ValidatorTypeInfo)
+        {
+            return new TLDValidatorTagElement(elementDecl,
+                    (ValidatorTypeInfo) elementType);
+        }
+        else if (elementType instanceof TagHandlerType)
+        {
+            return new TLDTagHandlerElement(elementDecl,
+                    (TagHandlerType) elementType);
+        }
+        else if (URI_IS_A_JSF_LIB.contains(tagId.getUri()))
+        {
+            return new TLDTagElement(elementDecl);
+        }
+
+        // not found
+        return null;
+    }
+
+    private TypeInfo getTypeInfo(final TagIdentifier tagId)
+    {
+        final IProjectFacetVersion version = JSFAppConfigUtils
+                .getProjectFacet(_project);
+        final String versionAsString = version.getVersionString();
+        final JSFVersion jsfVersion = JSFVersion.valueOfString(versionAsString);
+
+        switch (jsfVersion)
+        {
+            case V1_0:
+            case V1_1:
+                return JSF11_ELEMENTS.get(tagId);
+
+            case V1_2:
+                return JSF12_ELEMENTS.get(tagId);
+
+            default:
+                return null;
+        }
+    }
+
+    @Override
+    public String getId()
+    {
+        return ID;
+    }
+
+    private static final ComponentTypeInfo COMPINFO_PARAM = new ComponentTypeInfo(
+            "javax.faces.Parameter", "javax.faces.component.UIParameter",
+            new String[]
+            { "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.StateHolder", }, "javax.faces.Parameter",
+            null);
+
+    private static final ComponentTypeInfo COMPINFO_SELECTITEM = new ComponentTypeInfo(
+            "javax.faces.SelectItem", "javax.faces.component.UISelectItem",
+            new String[]
+            { "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.StateHolder", }, "javax.faces.SelectItem",
+            null);
+
+    private static final ComponentTypeInfo COMPINFO_SELECTITEMS = new ComponentTypeInfo(
+            "javax.faces.SelectItems", "javax.faces.component.UISelectItems",
+            new String[]
+            { "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.StateHolder", },
+            "javax.faces.SelectItems", null);
+
+    private static final ComponentTypeInfo COMPINFO_SUBVIEW = new ComponentTypeInfo(
+            "javax.faces.NamingContainer",
+            "javax.faces.component.UINamingContainer", new String[]
+            { "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.NamingContainer",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.NamingContainer", null);
+
+    private static final ComponentTypeInfo COMPINFO_VERBATIM = new ComponentTypeInfo(
+            "javax.faces.Output", "javax.faces.component.UIOutput",
+            new String[]
+            { "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.Output", "javax.faces.Text");
+
+    private static final ComponentTypeInfo COMPINFO_VIEW = new ComponentTypeInfo(
+            "javax.faces.ViewRoot", "javax.faces.component.UIViewRoot",
+            new String[]
+            { "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.StateHolder", }, "javax.faces.ViewRoot",
+            null);
+
+    // expected type info for jsf/html components
+    private static final ComponentTypeInfo COMPINFO_COLUMN = new ComponentTypeInfo(
+            "javax.faces.Column", "javax.faces.component.UIColumn",
+            new String[]
+            { "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object" },
+            new String[]
+            { "javax.faces.component.StateHolder" }, "javax.faces.Column", null);
+    private static final ComponentTypeInfo COMPINFO_COMMAND = new ComponentTypeInfo(
+            "javax.faces.HtmlCommandButton",
+            "javax.faces.component.html.HtmlCommandButton", new String[]
+            { "javax.faces.component.UICommand",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object" },
+            new String[]
+            { "javax.faces.component.ActionSource",
+                    "javax.faces.component.StateHolder" },
+            "javax.faces.Command", "javax.faces.Button");
+    private static final ComponentTypeInfo COMPINFO_COMMANDLINK = new ComponentTypeInfo(
+            "javax.faces.HtmlCommandLink",
+            "javax.faces.component.html.HtmlCommandLink",
+            "javax.faces.Command", "javax.faces.Link");
+    private static final ComponentTypeInfo COMPINFO_DATATABLE = new ComponentTypeInfo(
+            "javax.faces.HtmlDataTable",
+            "javax.faces.component.html.HtmlDataTable", new String[]
+            { "javax.faces.component.UIData",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object"},
+            new String[]
+            { "javax.faces.component.NamingContainer",
+                    "javax.faces.component.StateHolder"},
+
+            "javax.faces.Data", "javax.faces.Table");
+    private static final ComponentTypeInfo COMPINFO_FORM = new ComponentTypeInfo(
+            "javax.faces.HtmlForm", "javax.faces.component.html.HtmlForm",
+            new String[]
+            { "javax.faces.component.UIForm",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object" },
+            new String[]
+            { "javax.faces.component.NamingContainer",
+                    "javax.faces.component.StateHolder" }, "javax.faces.Form",
+            "javax.faces.Form");
+    private static final ComponentTypeInfo COMPINFO_GRAPHIC = new ComponentTypeInfo(
+            "javax.faces.HtmlGraphicImage",
+            "javax.faces.component.html.HtmlGraphicImage", new String[]
+            { "javax.faces.component.UIGraphic",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.StateHolder", }, "javax.faces.Graphic",
+            "javax.faces.Image");
+    private static final ComponentTypeInfo COMPINFO_HIDDEN = new ComponentTypeInfo(
+            "javax.faces.HtmlInputHidden",
+            "javax.faces.component.html.HtmlInputHidden", new String[]
+            { "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.Input", "javax.faces.Hidden");
+    private static final ComponentTypeInfo COMPINFO_SECRET = new ComponentTypeInfo(
+            "javax.faces.HtmlInputSecret",
+            "javax.faces.component.html.HtmlInputSecret", new String[]
+            { "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder" }, "javax.faces.Input",
+            "javax.faces.Secret");
+    private static final ComponentTypeInfo COMPINFO_INPUTTEXT = new ComponentTypeInfo(
+            "javax.faces.HtmlInputText",
+            "javax.faces.component.html.HtmlInputText", new String[]
+            { "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object" },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder" }, "javax.faces.Input",
+            "javax.faces.Text");
+    private static final ComponentTypeInfo COMPINFO_INPUTTEXTAREA = new ComponentTypeInfo(
+            "javax.faces.HtmlInputTextarea",
+            "javax.faces.component.html.HtmlInputTextarea", new String[]
+            { "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.Input", "javax.faces.Textarea");
+    private static final ComponentTypeInfo COMPINFO_MESSAGE = new ComponentTypeInfo(
+            "javax.faces.HtmlMessage",
+            "javax.faces.component.html.HtmlMessage", new String[]
+            { "javax.faces.component.UIMessage",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.StateHolder", }, "javax.faces.Message",
+            "javax.faces.Message");
+    private static final ComponentTypeInfo COMPINFO_MESSAGES = new ComponentTypeInfo(
+            "javax.faces.HtmlMessages",
+            "javax.faces.component.html.HtmlMessages", new String[]
+            { "javax.faces.component.UIMessages",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.StateHolder", }, "javax.faces.Messages",
+            "javax.faces.Messages");
+    private static final ComponentTypeInfo COMPINFO_OUTPUTFORMAT = new ComponentTypeInfo(
+            "javax.faces.HtmlOutputFormat",
+            "javax.faces.component.html.HtmlOutputFormat", new String[]
+            { "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.Output", "javax.faces.Format");
+    private static final ComponentTypeInfo COMPINFO_OUTPUTLABEL = new ComponentTypeInfo(
+            "javax.faces.HtmlOutputLabel",
+            "javax.faces.component.html.HtmlOutputLabel", new String[]
+            { "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.Output", "javax.faces.Label");
+    private static final ComponentTypeInfo COMPINFO_OUTPUTLINK = new ComponentTypeInfo(
+            "javax.faces.HtmlOutputLink",
+            "javax.faces.component.html.HtmlOutputLink", new String[]
+            { "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.Output", "javax.faces.Link");
+    private static final ComponentTypeInfo COMPINFO_OUTPUTTEXT = new ComponentTypeInfo(
+            "javax.faces.HtmlOutputText",
+            "javax.faces.component.html.HtmlOutputText", new String[]
+            { "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.Output", "javax.faces.Text");
+    private static final ComponentTypeInfo COMPINFO_PANELGRID = new ComponentTypeInfo(
+            "javax.faces.HtmlPanelGrid",
+            "javax.faces.component.html.HtmlPanelGrid", new String[]
+            { "javax.faces.component.UIPanel",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.StateHolder", }, "javax.faces.Panel",
+            "javax.faces.Grid");
+    private static final ComponentTypeInfo COMPINFO_PANELGROUP = new ComponentTypeInfo(
+            "javax.faces.HtmlPanelGroup",
+            "javax.faces.component.html.HtmlPanelGroup", new String[]
+            { "javax.faces.component.UIPanel",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.StateHolder", }, "javax.faces.Panel",
+            "javax.faces.Group");
+    private static final ComponentTypeInfo COMPINFO_SELECTBOOLEANCHECKBOX = new ComponentTypeInfo(
+            "javax.faces.HtmlSelectBooleanCheckbox",
+            "javax.faces.component.html.HtmlSelectBooleanCheckbox",
+            new String[]
+            { "javax.faces.component.UISelectBoolean",
+                    "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.SelectBoolean", "javax.faces.Checkbox");
+    private static final ComponentTypeInfo COMPINFO_SELECTMANYCHECKBOX = new ComponentTypeInfo(
+            "javax.faces.HtmlSelectManyCheckbox",
+            "javax.faces.component.html.HtmlSelectManyCheckbox", new String[]
+            { "javax.faces.component.UISelectMany",
+                    "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.SelectMany", "javax.faces.Checkbox");
+    private static final ComponentTypeInfo COMPINFO_SELECTMANYLISTBOX = new ComponentTypeInfo(
+            "javax.faces.HtmlSelectManyListbox",
+            "javax.faces.component.html.HtmlSelectManyListbox", new String[]
+            { "javax.faces.component.UISelectMany",
+                    "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.SelectMany", "javax.faces.Listbox");
+    private static final ComponentTypeInfo COMPINFO_SELECTMANYMENU = new ComponentTypeInfo(
+            "javax.faces.HtmlSelectManyMenu",
+            "javax.faces.component.html.HtmlSelectManyMenu", new String[]
+            { "javax.faces.component.UISelectMany",
+                    "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.SelectMany", "javax.faces.Menu");
+    private static final ComponentTypeInfo COMPINFO_SELECTONELISTBOX = new ComponentTypeInfo(
+            "javax.faces.HtmlSelectOneListbox",
+            "javax.faces.component.html.HtmlSelectOneListbox", new String[]
+            { "javax.faces.component.UISelectOne",
+                    "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.SelectOne", "javax.faces.Listbox");
+    private static final ComponentTypeInfo COMPINFO_SELECTONEMENU = new ComponentTypeInfo(
+            "javax.faces.HtmlSelectOneMenu",
+            "javax.faces.component.html.HtmlSelectOneMenu", new String[]
+            { "javax.faces.component.UISelectOne",
+                    "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.SelectOne", "javax.faces.Menu");
+    private static final ComponentTypeInfo COMPINFO_SELECTONERADIO = new ComponentTypeInfo(
+            "javax.faces.HtmlSelectOneRadio",
+            "javax.faces.component.html.HtmlSelectOneRadio", new String[]
+            { "javax.faces.component.UISelectOne",
+                    "javax.faces.component.UIInput",
+                    "javax.faces.component.UIOutput",
+                    "javax.faces.component.UIComponentBase",
+                    "javax.faces.component.UIComponent", "java.lang.Object", },
+            new String[]
+            { "javax.faces.component.EditableValueHolder",
+                    "javax.faces.component.ValueHolder",
+                    "javax.faces.component.StateHolder", },
+            "javax.faces.SelectOne", "javax.faces.Radio");
+
+    // default converters
+    private static final ConverterTypeInfo CONVERTERINFO_DATETIME = new ConverterTypeInfo(
+            "javax.faces.convert.DateTimeConverter", "javax.faces.DateTime");
+
+    private static final ConverterTypeInfo CONVERTERINFO_NUMBER = new ConverterTypeInfo(
+            "javax.faces.convert.NumberConverter", "javax.faces.Number");
+
+    // default validators
+    private static final ValidatorTypeInfo VALIDATORINFO_DOUBLERANGE = new ValidatorTypeInfo(
+            "javax.faces.validator.DoubleRangeValidator",
+            "javax.faces.DoubleRange");
+
+    private static final ValidatorTypeInfo VALIDATORINFO_LENGTH = new ValidatorTypeInfo(
+            "javax.faces.validator.LengthValidator", "javax.faces.Length");
+
+    private static final ValidatorTypeInfo VALIDATORINFO_LONGRANGE = new ValidatorTypeInfo(
+            "javax.faces.validator.LongRangeValidator", "javax.faces.LongRange");
+
+    private static Map<TagIdentifier, TypeInfo> JSF11_ELEMENTS;
+    private static Map<TagIdentifier, TypeInfo> JSF12_ELEMENTS;
+
+    static
+    {
+        final Map<TagIdentifier, TypeInfo> elements = new HashMap<TagIdentifier, TypeInfo>();
+        // IJSFConstants.TAG_IDENTIFIER_PHASELISTENER);
+        // IJSFConstants.TAG_IDENTIFIER_SETPROPERTYACTIONLISTENER);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_ACTIONLISTENER,
+                TagHandlerType.ACTIONLISTENER);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_ATTRIBUTE,
+                TagHandlerType.ATTRIBUTE);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_CONVERTDATETIME,
+                CONVERTERINFO_DATETIME);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_CONVERTER,
+                ConverterTypeInfo.UNKNOWN);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_CONVERTNUMBER,
+                CONVERTERINFO_NUMBER);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_FACET, TagHandlerType.FACET);
+        // elements.put(IJSFConstants.TAG_IDENTIFIER_LOADBUNDLE,
+        // TagHandlerType.);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_PARAM, COMPINFO_PARAM);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_SELECTITEM,
+                COMPINFO_SELECTITEM);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_SELECTITEMS,
+                COMPINFO_SELECTITEMS);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_SUBVIEW, COMPINFO_SUBVIEW);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_VALIDATEDOUBLERANGE,
+                VALIDATORINFO_DOUBLERANGE);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_VALIDATELENGTH,
+                VALIDATORINFO_LENGTH);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_VALIDATELONGRANGE,
+                VALIDATORINFO_LONGRANGE);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_VALIDATOR,
+                ValidatorTypeInfo.UNKNOWN);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_VALUECHANGELISTENER,
+                TagHandlerType.VALUECHANGELISTENER);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_VERBATIM, COMPINFO_VERBATIM);
+        elements.put(IJSFConstants.TAG_IDENTIFIER_VIEW, COMPINFO_VIEW);
+
+        // JSF 1.2 core elements
+        // none currently...
+
+        // JSF 1.1/1.2 HTML tags
+        // html verifier
+        elements.put(IJSFConstants.TAG_IDENTIFIER_COLUMN, COMPINFO_COLUMN);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_COMMANDBUTTON,
+                COMPINFO_COMMAND);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_COMMANDLINK,
+                COMPINFO_COMMANDLINK);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_DATA_TABLE,
+                COMPINFO_DATATABLE);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_FORM, COMPINFO_FORM);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_GRAPHICIMAGE,
+                COMPINFO_GRAPHIC);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_INPUTHIDDEN, COMPINFO_HIDDEN);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_INPUTSECRET, COMPINFO_SECRET);
+
+        elements
+                .put(IJSFConstants.TAG_IDENTIFIER_INPUTTEXT, COMPINFO_INPUTTEXT);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_INPUTTEXTAREA,
+                COMPINFO_INPUTTEXTAREA);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_MESSAGE, COMPINFO_MESSAGE);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_MESSAGES, COMPINFO_MESSAGES);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_OUTPUTFORMAT,
+                COMPINFO_OUTPUTFORMAT);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_OUTPUTLABEL,
+                COMPINFO_OUTPUTLABEL);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_OUTPUTLINK,
+                COMPINFO_OUTPUTLINK);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_OUTPUTTEXT,
+                COMPINFO_OUTPUTTEXT);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_PANEL_GRID,
+                COMPINFO_PANELGRID);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_PANEL_GROUP,
+                COMPINFO_PANELGROUP);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_SELECTBOOLEANCHECKBOX,
+                COMPINFO_SELECTBOOLEANCHECKBOX);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_SELECTMANYCHECKBOX,
+                COMPINFO_SELECTMANYCHECKBOX);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_SELECTMANYLISTBOX,
+                COMPINFO_SELECTMANYLISTBOX);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_SELECTMANYMENU,
+                COMPINFO_SELECTMANYMENU);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_SELECTONELISTBOX,
+                COMPINFO_SELECTONELISTBOX);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_SELECTONEMENU,
+                COMPINFO_SELECTONEMENU);
+
+        elements.put(IJSFConstants.TAG_IDENTIFIER_SELECTONERADIO,
+                COMPINFO_SELECTONERADIO);
+
+        JSF11_ELEMENTS = Collections.unmodifiableMap(elements);
+
+        JSF12_ELEMENTS = Collections
+                .unmodifiableMap(new HashMap<TagIdentifier, TypeInfo>(elements));
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/ITagResolvingStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/ITagResolvingStrategy.java
new file mode 100644
index 0000000..36f240a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/ITagResolvingStrategy.java
@@ -0,0 +1,27 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.jst.jsf.common.internal.policy.IIdentifiable;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+
+/**
+ * Describes an algorithm that can produce ITagElements from <TLD> objects.
+ * 
+ * @author cbateman
+ * @param <TLDELEMENT> the object type that describes a tag library.
+ * @param <IDTYPE> 
+ * 
+ */
+public interface ITagResolvingStrategy<TLDELEMENT, IDTYPE> extends IIdentifiable<IDTYPE>
+{
+    /**
+     * @param element
+     * @return a new tag element or {@link #getNotFoundIndicator()} if not found
+     */
+    ITagElement resolve(TLDELEMENT element);
+
+    /**
+     * @return the ITagElement (may be null) that indicates that
+     *         resolve(TLDELEMENT) could not resolve a tag.
+     */
+    ITagElement getNotFoundIndicator();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/JSPTagResolvingStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/JSPTagResolvingStrategy.java
new file mode 100644
index 0000000..8b5ba04
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/JSPTagResolvingStrategy.java
@@ -0,0 +1,19 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+
+/**
+ * A strategy for resolving JSP TLDs.
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class JSPTagResolvingStrategy extends
+        AbstractTagResolvingStrategy<TLDElementDeclaration, String>
+{
+    @Override
+    public abstract ITagElement resolve(TLDElementDeclaration element);
+
+    public abstract String getId();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDComponentTagElement.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDComponentTagElement.java
new file mode 100644
index 0000000..431fe99
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDComponentTagElement.java
@@ -0,0 +1,45 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IComponentTagElement;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+
+
+
+/**
+ * A TLD-defined tag (i.e. JSP) that maps one-to-one with a JSF UIComponent
+ * @author cbateman
+ *
+ */
+public class TLDComponentTagElement extends TLDJSFTagElement implements
+        IComponentTagElement 
+{
+    private final ComponentTypeInfo     _componentTypeInfo;
+    
+    /**
+     * @param elementDecl
+     * @param componentTypeInfo
+     */
+    public TLDComponentTagElement(final TLDElementDeclaration elementDecl, final ComponentTypeInfo componentTypeInfo) 
+    {
+        super(elementDecl);
+        _componentTypeInfo = componentTypeInfo;
+    }
+
+    public ComponentTypeInfo getComponent() 
+    {
+        return _componentTypeInfo;
+    }
+
+    @Override
+    public TagType getType()
+    {
+        return TagType.COMPONENT;
+    }
+
+    @Override
+    public String toString()
+    {
+        return _componentTypeInfo.toString();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDConverterTagElement.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDConverterTagElement.java
new file mode 100644
index 0000000..db5dfd3
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDConverterTagElement.java
@@ -0,0 +1,46 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IConverterTagElement;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+
+/**
+ * A TLD-defined tag (i.e. JSP) that maps one-to-one with a JSF Converter
+ * 
+ * @author cbateman
+ *
+ */
+public class TLDConverterTagElement extends TLDJSFTagElement implements IConverterTagElement
+{
+    private final ConverterTypeInfo     _converterTypeInfo;
+    
+    /**
+     * @param elementDecl
+     * @param converterTypeInfo
+     */
+    public TLDConverterTagElement(TLDElementDeclaration elementDecl, ConverterTypeInfo converterTypeInfo)
+    {
+        super(elementDecl);
+        _converterTypeInfo = converterTypeInfo;
+    }
+
+    @Override
+    public TagType getType()
+    {
+        return TagType.CONVERTER;
+    }
+
+    /**
+     * @return the type info for this converter
+     */
+    public final ConverterTypeInfo getConverter()
+    {
+        return _converterTypeInfo;
+    }
+    
+    @Override
+    public String toString()
+    {
+        return _converterTypeInfo.toString();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDJSFTagElement.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDJSFTagElement.java
new file mode 100644
index 0000000..07bcefc
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDJSFTagElement.java
@@ -0,0 +1,25 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IJSFTagElement;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+
+/**
+ * A JSF tag element.
+ * 
+ * @author cbateman
+ * 
+ */
+public abstract class TLDJSFTagElement extends TLDTagElement implements
+        IJSFTagElement
+{
+    /**
+     * @param elementDecl
+     */
+    public TLDJSFTagElement(final TLDElementDeclaration elementDecl)
+    {
+        super(elementDecl);
+    }
+
+    public abstract TagType getType();
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDNamespace.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDNamespace.java
new file mode 100644
index 0000000..a044e30
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDNamespace.java
@@ -0,0 +1,167 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.jobs.ILock;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.Namespace;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
+
+/**
+ * Represents a JSP tag library namespace
+ * 
+ * @author cbateman
+ * 
+ */
+public class TLDNamespace extends Namespace
+{
+    private final TLDDocument _tldDoc;
+    private final ITagResolvingStrategy<TLDElementDeclaration, String> _tagResolver;
+    private final ILock _tagMapReadWriteLock;
+
+    private Map<String, ITagElement> _tags; // lazy init in initializeTags
+
+    /**
+     * @param tldDoc
+     * @param tagResolver
+     */
+    public TLDNamespace(
+            final TLDDocument tldDoc,
+            final ITagResolvingStrategy<TLDElementDeclaration, String> tagResolver)
+    {
+        _tldDoc = tldDoc;
+        _tagResolver = tagResolver;
+        _tagMapReadWriteLock = Job.getJobManager().newLock();
+    }
+
+    @Override
+    public final String getDisplayName()
+    {
+        return _tldDoc.getDisplayName();
+    }
+
+    @Override
+    public final String getNSUri()
+    {
+        return _tldDoc.getUri();
+    }
+
+    
+    @Override
+    public boolean isInitialized()
+    {
+        int numTags = _tldDoc.getElements().getLength();
+        int tagMapSize = getOrCreateMap(3).size();
+        
+        // we are only initialized if the tag map is the equal in size
+        // to the number of tags in the tld.
+        return numTags == tagMapSize;
+    }
+
+    /**
+     * mapSizeHint will be used
+     * 
+     * @param mapSizeHint
+     * @return the map
+     */
+    private synchronized Map<String, ITagElement> getOrCreateMap(
+            final int mapSizeHint)
+    {
+        if (_tags == null)
+        {
+            final float loadFactor = 0.75f;
+            final int initSize = ((int) (mapSizeHint / loadFactor)) + 1;
+            _tags = Collections
+                    .synchronizedMap(new HashMap<String, ITagElement>(initSize));
+        }
+        return _tags;
+    }
+
+    private ITagElement getOrCreateTagElement(final String name,
+            final Map<String, ITagElement> tags)
+    {
+        ITagElement tagElement = null;
+
+        _tagMapReadWriteLock.acquire();
+
+        try
+        {
+            tagElement = tags.get(name);
+
+            if (tagElement == null)
+            {
+                CMNode cmNode = _tldDoc.getElements().getNamedItem(name);
+
+                if (cmNode instanceof TLDElementDeclaration)
+                {
+                    tagElement = _tagResolver
+                            .resolve((TLDElementDeclaration) cmNode);
+
+                    if (tagElement != _tagResolver.getNotFoundIndicator())
+                    {
+                        tags.put(tagElement.getName(), tagElement);
+                    }
+                    else
+                    {
+                        // the not-found indicator may not be null.
+                        tagElement = null;
+                    }
+                }
+            }
+        }
+        finally
+        {
+            _tagMapReadWriteLock.release();
+        }
+
+        return tagElement;
+    }
+
+    public final ITagElement getViewElement(final String name)
+    {
+        // bias the table small if this creates it
+        final Map<String, ITagElement> tags = getOrCreateMap(3);
+
+        return getOrCreateTagElement(name, tags);
+    }
+
+    @Override
+    public final Collection<? extends ITagElement> getViewElements()
+    {
+        return Collections.unmodifiableCollection(initializeTags().values());
+    }
+
+    @Override
+    public final boolean hasViewElements()
+    {
+        return _tldDoc.getElements().getLength() > 0;
+    }
+
+    /**
+     * Initialize the tag definitions inn the namespace
+     */
+    private final Map<String, ITagElement> initializeTags()
+    {
+        final CMNamedNodeMap elementMap = _tldDoc.getElements();
+        // if we create the table with this call, bias the table size
+        // to be 1 bigger than the number of tags, since we know if it's
+        // smaller, it'll cause at least one buffer resize
+        final Map<String, ITagElement> tags = getOrCreateMap(elementMap
+                .getLength());
+
+        for (int i = 0; i < elementMap.getLength(); i++)
+        {
+            final CMNode cmNode = elementMap.item(i);
+            getOrCreateTagElement(cmNode.getNodeName(), tags);
+        }
+        
+        return tags;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDTagElement.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDTagElement.java
new file mode 100644
index 0000000..48474ad
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDTagElement.java
@@ -0,0 +1,49 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.TagElement;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
+
+
+/**
+ * A tag element for a JSP tag (TLD-defined)
+ * 
+ * @author cbateman
+ *
+ */
+public class TLDTagElement extends TagElement 
+{
+    private final TLDElementDeclaration _elementDecl;
+    
+    /** 
+     * @param elementDecl
+     */
+    public TLDTagElement(TLDElementDeclaration elementDecl)
+    {
+        _elementDecl = elementDecl;
+    }
+
+    @Override
+    public String getName() 
+    {
+        return _elementDecl.getElementName();
+    }
+
+    @Override
+    public String getUri()
+    {
+        final CMDocument owner = _elementDecl.getOwnerDocument();
+        
+        if (owner instanceof TLDDocument)
+        {
+            return ((TLDDocument)owner).getUri();
+        }
+        return null;
+    }
+
+    @Override
+    public String getTagHandlerClassName() {
+        return _elementDecl.getTagclass();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDTagHandlerElement.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDTagHandlerElement.java
new file mode 100644
index 0000000..fd5df2a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDTagHandlerElement.java
@@ -0,0 +1,37 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IHandlerTagElement;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+
+/**
+ * A TLD-defined tag (i.e. JSP) that maps to a known tag handler.
+ * 
+ * @author cbateman
+ *
+ */
+public class TLDTagHandlerElement extends TLDJSFTagElement implements
+        IHandlerTagElement
+{
+    private TagHandlerType      _tagHandlerType;
+    
+    /**
+     * @param elementDecl
+     * @param tagHandlerType
+     */
+    public TLDTagHandlerElement(TLDElementDeclaration elementDecl, TagHandlerType tagHandlerType)
+    {
+        super(elementDecl);
+        _tagHandlerType = tagHandlerType;
+    }
+
+    public TagHandlerType getTagHandlerType()
+    {
+        return _tagHandlerType;
+    }
+
+    @Override
+    public TagType getType()
+    {
+        return TagType.HANDLER;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDValidatorTagElement.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDValidatorTagElement.java
new file mode 100644
index 0000000..846ffde
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TLDValidatorTagElement.java
@@ -0,0 +1,43 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IValidatorTagElement;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+
+/**
+ * A TLD-defined tag (i.e. JSP) that maps one-to-one with a JSF Converter
+ *  
+ * @author cbateman
+ *
+ */
+public class TLDValidatorTagElement extends TLDJSFTagElement implements IValidatorTagElement
+{
+    private final ValidatorTypeInfo _validator;
+    
+    /**
+     * @param elementDecl
+     * @param validatorTypeInfo 
+     */
+    public TLDValidatorTagElement(TLDElementDeclaration elementDecl, ValidatorTypeInfo validatorTypeInfo)
+    {
+        super(elementDecl);
+        _validator = validatorTypeInfo;
+    }
+
+    public final ValidatorTypeInfo getValidator()
+    {
+        return _validator;
+    }
+
+    @Override
+    public final TagType getType()
+    {
+       return TagType.VALIDATOR;
+    }
+
+    @Override
+    public String toString()
+    {
+        return _validator.toString();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TagIntrospectingStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TagIntrospectingStrategy.java
new file mode 100644
index 0000000..d8dd46e
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/TagIntrospectingStrategy.java
@@ -0,0 +1,44 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.analyzer.TagAnalyzer;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+
+/**
+ * A resolving strategy that uses tag introspection.
+ * 
+ * @author cbateman
+ * 
+ */
+public final class TagIntrospectingStrategy extends JSPTagResolvingStrategy
+{
+    /**
+     * the identifier of this strategy
+     */
+    public final static String ID = "org.eclipse.jst.jsf.designtime.TagIntrospectingStrategy";
+
+    private final IProject _project;
+
+    /**
+     * @param project
+     */
+    public TagIntrospectingStrategy(final IProject project)
+    {
+        // TODO: would it be better to have a model context on the resolve?
+        _project = project;
+    }
+
+    @Override
+    public String getId()
+    {
+        return ID;
+    }
+
+    @Override
+    public ITagElement resolve(TLDElementDeclaration element)
+    {
+        return TagAnalyzer.createTLDTagElement(element, _project);
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/UnresolvedJSPTagResolvingStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/UnresolvedJSPTagResolvingStrategy.java
new file mode 100644
index 0000000..4902c3d
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/UnresolvedJSPTagResolvingStrategy.java
@@ -0,0 +1,34 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp;
+
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+
+/**
+ * This a fallback strategy that always creates an element for a tld decl.  This
+ * can be tacked to the end of a composite strategy (or used alone) to ensure
+ * that a basic ITagElement is always created for a TLDElementDeclaration.
+ * 
+ * @author cbateman
+ *
+ */
+public class UnresolvedJSPTagResolvingStrategy extends JSPTagResolvingStrategy
+{
+    /**
+     * the identifier of this strategy
+     */
+    public final static String ID = "org.eclipse.jst.jsf.designtime.UnresolvedJSPTagResolvingStrategy";
+
+    @Override
+    public String getId()
+    {
+        return ID;
+    }
+
+    @Override
+    public ITagElement resolve(TLDElementDeclaration element)
+    {
+        // just create a tag element
+        return new TLDTagElement(element);
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/ServletBeanProxyContributor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/ServletBeanProxyContributor.java
new file mode 100644
index 0000000..dacf03a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/ServletBeanProxyContributor.java
@@ -0,0 +1,47 @@
+/**
+ * 
+ */
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp.analyzer;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jem.internal.proxy.core.ConfigurationContributorAdapter;
+import org.eclipse.jem.internal.proxy.core.IConfigurationContributionController;
+import org.eclipse.jst.jsf.core.JSFVersion;
+import org.osgi.framework.Bundle;
+
+class ServletBeanProxyContributor extends ConfigurationContributorAdapter
+{
+    private final JSFVersion _jsfVersion;
+
+    public ServletBeanProxyContributor(final JSFVersion jsfVersion)
+    {
+        if (jsfVersion == null)
+        {
+            throw new IllegalArgumentException("jsfVersion must not be null");
+        }
+        
+        _jsfVersion = jsfVersion;
+    }
+
+    @Override
+    public void contributeClasspaths(
+            final IConfigurationContributionController controller)
+            throws CoreException
+    {
+        if (_jsfVersion != JSFVersion.V1_2)
+        {
+            final Bundle servletBundle = Platform.getBundle("javax.servlet");
+            controller.contributeClasspath(servletBundle, (IPath) null,
+                    IConfigurationContributionController.APPEND_USER_CLASSPATH,
+                    true);
+
+            final Bundle jspBundle = Platform.getBundle("javax.servlet.jsp");
+            controller.contributeClasspath(jspBundle, (IPath) null,
+                    IConfigurationContributionController.APPEND_USER_CLASSPATH,
+                    true);
+        }
+        
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/TagAnalyzer.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/TagAnalyzer.java
new file mode 100644
index 0000000..f4123cf
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/analyzer/TagAnalyzer.java
@@ -0,0 +1,793 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp.analyzer;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaConventions;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
+import org.eclipse.jem.internal.proxy.core.IBeanProxy;
+import org.eclipse.jem.internal.proxy.core.IBeanTypeProxy;
+import org.eclipse.jem.internal.proxy.core.IConfigurationContributor;
+import org.eclipse.jem.internal.proxy.core.IStandardBeanTypeProxyFactory;
+import org.eclipse.jem.internal.proxy.core.ProxyFactoryRegistry;
+import org.eclipse.jem.internal.proxy.ide.IDERegistration;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ConverterTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.ValidatorTypeInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IJSFTagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IHandlerTagElement.TagHandlerType;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IJSFTagElement.TagType;
+import org.eclipse.jst.jsf.core.JSFVersion;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.core.internal.JSFCoreTraceOptions;
+import org.eclipse.jst.jsf.core.internal.jem.BeanProxyUtil.BeanProxyWrapper;
+import org.eclipse.jst.jsf.core.internal.jem.BeanProxyUtil.ProxyException;
+import org.eclipse.jst.jsf.designtime.internal.view.DTComponentIntrospector;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDComponentTagElement;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDConverterTagElement;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDTagElement;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDTagHandlerElement;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDValidatorTagElement;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+import org.eclipse.wst.common.project.facet.core.FacetedProjectFramework;
+
+/**
+ * Utility class supporting methods to derive information from JSP tag
+ * definitions (TLD)
+ * 
+ * @author cbateman
+ * 
+ */
+public final class TagAnalyzer
+{
+    private static final String JAVAX_FACES_WEBAPP_CONVERTER_TAG = "javax.faces.webapp.ConverterTag";
+    private static final String JAVAX_FACES_WEBAPP_CONVERTER_ELTAG = "javax.faces.webapp.ConverterELTag";
+    private static final String JAVAX_FACES_WEBAPP_VALIDATOR_TAG = "javax.faces.webapp.ValidatorTag";
+    private static final String JAVAX_FACES_WEBAPP_VALIDATOR_ELTAG = "javax.faces.webapp.ValidatorELTag";
+    private static final String JAVAX_FACES_WEBAPP_FACET_TAG = "javax.faces.webapp.FacetTag";
+
+    // private static final String JAVAX_FACES_WEBAPP_ACTIONLISTENER_TAG =
+    // "javax.faces.webapp.ActionListenerTag";
+    // private static final String JAVAX_FACES_WEBAPP_VALUECHANGELISTENER_TAG =
+    // "javax.faces.webapp.ValueChangeListenerTag";
+    private static final String JAVAX_FACES_WEBAPP_ATTRIBUTE_TAG = "javax.faces.webapp.AttributeTag";
+
+    private final static Set<String> COMPONENT_TAG_HANDLER_TYPES_JSF11;
+    private final static Set<String> COMPONENT_TAG_HANDLER_TYPES_JSF12;
+
+    private final static Set<String> CONVERTER_TAG_HANDLER_TYPES_JSF11 = Collections
+            .singleton(JAVAX_FACES_WEBAPP_CONVERTER_TAG);
+    private final static Set<String> CONVERTER_TAG_HANDLER_TYPES_JSF12;
+
+    private final static Set<String> VALIDATOR_TAG_HANDLER_TYPES_JSF11 = Collections
+            .singleton(JAVAX_FACES_WEBAPP_VALIDATOR_TAG);
+    private final static Set<String> VALIDATOR_TAG_HANDLER_TYPES_JSF12;
+
+    private final static Set<String> FACET_TAG_HANDLER = Collections
+            .singleton(JAVAX_FACES_WEBAPP_FACET_TAG);
+    private final static Set<String> ATTRIBUTE_TAG_HANDLER = Collections
+            .singleton(JAVAX_FACES_WEBAPP_ATTRIBUTE_TAG);
+    // private final static Set<String> ACTIONLISTENER_TAG_HANDLER = Collections
+    // .singleton(JAVAX_FACES_WEBAPP_ACTIONLISTENER_TAG);
+    // private final static Set<String> VALUECHANGELISTENER_TAG_HANDLER =
+    // Collections
+    // .singleton(JAVAX_FACES_WEBAPP_VALUECHANGELISTENER_TAG);
+
+    private final static Set<String> ALL_HANDLER_TAGS;
+
+    static
+    {
+        // components
+        // JSF 1.1
+        Set<String> set = new HashSet<String>(8);
+        set.add("javax.faces.webapp.UIComponentTag");
+        set.add("javax.faces.webapp.UIComponentBodyTag");
+        COMPONENT_TAG_HANDLER_TYPES_JSF11 = Collections.unmodifiableSet(set);
+
+        // JSF 1.2
+        set = new HashSet<String>(8);
+        set.add("javax.faces.webapp.UIComponentTag");
+        set.add("javax.faces.webapp.UIComponentBodyTag");
+        set.add("javax.faces.webapp.UIComponentELTag");
+        COMPONENT_TAG_HANDLER_TYPES_JSF12 = Collections.unmodifiableSet(set);
+
+        // converters
+        set = new HashSet<String>(8);
+        set.add(JAVAX_FACES_WEBAPP_CONVERTER_TAG);
+        set.add(JAVAX_FACES_WEBAPP_CONVERTER_ELTAG);
+        CONVERTER_TAG_HANDLER_TYPES_JSF12 = Collections.unmodifiableSet(set);
+
+        // validators
+        set = new HashSet<String>(8);
+        set.add(JAVAX_FACES_WEBAPP_VALIDATOR_TAG);
+        set.add(JAVAX_FACES_WEBAPP_VALIDATOR_ELTAG);
+        VALIDATOR_TAG_HANDLER_TYPES_JSF12 = Collections.unmodifiableSet(set);
+
+        // tag handlers
+        ALL_HANDLER_TAGS = new HashSet<String>();
+        ALL_HANDLER_TAGS.addAll(FACET_TAG_HANDLER);
+        ALL_HANDLER_TAGS.addAll(ATTRIBUTE_TAG_HANDLER);
+        // ALL_HANDLER_TAGS.addAll(VALUECHANGELISTENER_TAG_HANDLER);
+        // ALL_HANDLER_TAGS.addAll(ACTIONLISTENER_TAG_HANDLER);
+    }
+
+    /**
+     * Tries to determine the component type of the component that corresponds
+     * to the JSP tag defined by tldDecl.
+     * 
+     * @param tldDecl
+     * @param project
+     * @return get the component type from the tag definition or null if none.
+     */
+    public static String findComponentType(final TLDElementDeclaration tldDecl,
+            final IProject project)
+    {
+        final String className = tldDecl.getTagclass();
+
+        final IConfigurationContributor[] contributor = new IConfigurationContributor[]
+        { new ServletBeanProxyContributor(getProjectVersion(project)) };
+        final ProxyFactoryRegistry registry = getProxyFactoryRegistry(
+                contributor, project);
+
+        if (registry != null)
+        {
+            final IStandardBeanTypeProxyFactory factory = registry
+                    .getBeanTypeProxyFactory();
+            final IBeanTypeProxy classTypeProxy = factory
+                    .getBeanTypeProxy(className);
+            final BeanProxyWrapper classTypeWrapper = new BeanProxyWrapper(
+                    classTypeProxy);
+
+            try
+            {
+                classTypeWrapper.init();
+                return classTypeWrapper.callStringMethod("getComponentType");
+            }
+            catch (final ProxyException tp)
+            {
+                // fall through
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Tries to introspect tldDecl's tag class to determine what the identifier
+     * of the underlying Converter that is used to register it in the app config
+     * 
+     * @param tldDecl
+     * @param project
+     * @return the converter type identifier for the tldDecl or null if not
+     *         found
+     */
+    public static String findConverterType(final TLDElementDeclaration tldDecl,
+            final IProject project)
+    {
+        // TODO: allow for pluggable resolver?
+
+        // This one is more hacky and less prone to success than the component
+        // type finder because the ConverterTag doesn't initialize its type
+        // field on construction. Instead, both MyFaces and RI seem to do it
+        // based on the doStartTag method. They also don't provide a standard
+        // interface for acquiring the id so instead we make some guess on
+        // the internal field name.
+        final String className = tldDecl.getTagclass();
+
+        final IConfigurationContributor[] contributor = new IConfigurationContributor[]
+        { new ServletBeanProxyContributor(getProjectVersion(project)) };
+        final ProxyFactoryRegistry registry = getProxyFactoryRegistry(
+                contributor, project);
+
+        if (registry != null)
+        {
+            final IStandardBeanTypeProxyFactory factory = registry
+                    .getBeanTypeProxyFactory();
+            final IBeanTypeProxy classTypeProxy = factory
+                    .getBeanTypeProxy(className);
+
+            try
+            {
+                final IType type = JavaCore.create(project).findType(className);
+
+                if (type != null
+                        && DTComponentIntrospector
+                                .isTypeNameInstanceOfClass(
+                                        type,
+                                        Collections
+                                                .singleton(JAVAX_FACES_WEBAPP_CONVERTER_ELTAG)))
+                {
+                    return findConverterType_InELTag(factory, classTypeProxy);
+                }
+                // the assumption is that this is a component tag, so we assume
+                // it is one.
+                else if (type != null
+                        && DTComponentIntrospector
+                                .isTypeNameInstanceOfClass(
+                                        type,
+                                        Collections
+                                                .singleton(JAVAX_FACES_WEBAPP_CONVERTER_TAG)))
+                {
+                    return findConverterType_InTag(factory, classTypeProxy);
+                }
+            }
+            catch (final JavaModelException jme)
+            {
+                // suppress for now
+            }
+        }
+
+        return null;
+    }
+
+    private static String findConverterType_InTag(
+            final IStandardBeanTypeProxyFactory factory,
+            final IBeanTypeProxy classTypeProxy)
+    {
+        final IBeanTypeProxy nullPageContextType = factory
+                .getBeanTypeProxy("javax.servlet.jsp.PageContext");
+        final BeanProxyWrapper classTypeWrapper = new BeanProxyWrapper(
+                classTypeProxy);
+
+        try
+        {
+            classTypeWrapper.init();
+
+            callSuppressExceptions(classTypeWrapper, "setPageContext",
+                    new IBeanProxy[]
+                    { null }, new IBeanTypeProxy[]
+                    { nullPageContextType });
+            callSuppressExceptions(classTypeWrapper, "doStartTag");
+
+            final IBeanTypeProxy converterProxy = factory
+                    .getBeanTypeProxy(JAVAX_FACES_WEBAPP_CONVERTER_TAG);
+
+            // hopefully doStartTag set the converter field before it
+            // failed.
+            // now try to guess what it's called
+            String converterId = getStringField(classTypeWrapper,
+                    converterProxy, "converterId");
+
+            if (converterId != null)
+            {
+                return converterId;
+            }
+
+            converterId = getStringField(classTypeWrapper, converterProxy,
+                    "_converterId");
+
+            if (converterId != null)
+            {
+                return converterId;
+            }
+
+            // no? look for a CONVERTER_ID
+            converterId = getStringField(classTypeWrapper, classTypeProxy,
+                    "CONVERTER_ID");
+        }
+        catch (final ProxyException tp)
+        {
+            // fall through
+        }
+        return null;
+    }
+
+    private static String findConverterType_InELTag(
+            final IStandardBeanTypeProxyFactory factory,
+            final IBeanTypeProxy classTypeProxy)
+    {
+        final BeanProxyWrapper classTypeWrapper = new BeanProxyWrapper(
+                classTypeProxy);
+        final IBeanTypeProxy elExpressionType = factory
+                .getBeanTypeProxy("javax.el.ValueExpression");
+
+        if (elExpressionType == null)
+        {
+            return null;
+        }
+
+        try
+        {
+            classTypeWrapper.init();
+
+            callSuppressExceptions(classTypeWrapper, "doStartTag");
+
+            // no? look for a CONVERTER_ID
+            final IBeanProxy converterId = getFieldInParents(classTypeWrapper,
+                    classTypeProxy, "CONVERTER_ID_EXPR");
+
+            if (converterId != null)
+            {
+                converterId.getTypeProxy().isKindOf(elExpressionType);
+                final BeanProxyWrapper elExprValue = new BeanProxyWrapper(
+                        converterId.getTypeProxy());
+                final String value = elExprValue
+                        .callStringMethod("getExpressionString");
+                System.out.println("Expression string:" + value);
+            }
+
+            //            
+            //
+            // final IBeanTypeProxy converterProxy = factory
+            // .getBeanTypeProxy(JAVAX_FACES_WEBAPP_CONVERTER_TAG);
+
+        }
+        catch (final ProxyException tp)
+        {
+            // fall through
+        }
+        return null;
+    }
+
+    /**
+     * @param tldDecl
+     * @param project
+     * @return the validator type identifier for the tldDecl or null if not
+     *         found
+     */
+    public static String findValidatorType(final TLDElementDeclaration tldDecl,
+            final IProject project)
+    {
+        // TODO: allow for pluggable resolver?
+
+        // This one is more hacky and less prone to success than the component
+        // type finder because the Validator doesn't initialize its type
+        // field on construction. Instead, both MyFaces and RI seem to do it
+        // based on the doStartTag method. They also don't provide a standard
+        // interface for acquiring the id so instead we make some guess on
+        // the internal field name.
+        final String className = tldDecl.getTagclass();
+
+        final IConfigurationContributor[] contributor = new IConfigurationContributor[]
+        { new ServletBeanProxyContributor(getProjectVersion(project)) };
+        final ProxyFactoryRegistry registry = getProxyFactoryRegistry(
+                contributor, project);
+
+        if (registry != null)
+        {
+            final IStandardBeanTypeProxyFactory factory = registry
+                    .getBeanTypeProxyFactory();
+            final IBeanTypeProxy classTypeProxy = factory
+                    .getBeanTypeProxy(className);
+            final BeanProxyWrapper classTypeWrapper = new BeanProxyWrapper(
+                    classTypeProxy);
+            final IBeanTypeProxy converterProxy = factory
+                    .getBeanTypeProxy(JAVAX_FACES_WEBAPP_VALIDATOR_TAG);
+            try
+            {
+                classTypeWrapper.init();
+
+                callSuppressExceptions(classTypeWrapper, "doStartTag");
+                callSuppressExceptions(classTypeWrapper, "createValidator");
+
+                // hopefully doStartTag set the converter field before it
+                // failed.
+                // now try to guess what it's called
+                String validatorId = getStringField(classTypeWrapper,
+                        converterProxy, "validatorId");
+
+                if (validatorId != null)
+                {
+                    return validatorId;
+                }
+
+                validatorId = getStringField(classTypeWrapper, converterProxy,
+                        "_validatorId");
+
+                if (validatorId != null)
+                {
+                    return validatorId;
+                }
+
+                // no? then see if there's a VALIDATOR_ID field *on the tag*
+                validatorId = getStringField(classTypeWrapper, classTypeProxy,
+                        "VALIDATOR_ID");
+
+                if (validatorId != null)
+                {
+                    return validatorId;
+                }
+            }
+            catch (final ProxyException tp)
+            {
+                // fall through
+            }
+        }
+
+        return null;
+
+    }
+
+    private static IBeanProxy getFieldInParents(
+            final BeanProxyWrapper classTypeWrapper,
+            final IBeanTypeProxy typeProxy, final String fieldName)
+    {
+        try
+        {
+            return classTypeWrapper.getFieldValueIncludeParents(fieldName,
+                    typeProxy);
+        }
+        catch (final ProxyException e)
+        {
+            // suppress
+        }
+
+        return null;
+    }
+
+    private static String getStringField(
+            final BeanProxyWrapper classTypeWrapper,
+            final IBeanTypeProxy typeProxy, final String fieldName)
+    {
+        try
+        {
+            return classTypeWrapper.getStringFieldValue(fieldName, typeProxy);
+        }
+        catch (final ProxyException e)
+        {
+            // suppress
+        }
+
+        return null;
+    }
+
+    private static void callSuppressExceptions(
+            final BeanProxyWrapper classTypeWrapper, final String methodName)
+    {
+        try
+        {
+            classTypeWrapper.call(methodName);
+        }
+        catch (final ProxyException tp)
+        {
+            // suppress this since it may well throw an exception
+            // depending on what assumptions the tag class is making
+            // that won't be true because we're not in a servlet
+        }
+    }
+
+    private static void callSuppressExceptions(
+            final BeanProxyWrapper classTypeWrapper, final String methodName,
+            final IBeanProxy[] args, final IBeanTypeProxy[] argTypes)
+    {
+        try
+        {
+            classTypeWrapper.call(methodName, args, argTypes);
+        }
+        catch (final ProxyException tp)
+        {
+            // suppress this since it may well throw an exception
+            // depending on what assumptions the tag class is making
+            // that won't be true because we're not in a servlet
+        }
+
+    }
+
+    /**
+     * @param project
+     * @return a new proxy factory registry or null;
+     * 
+     * TODO: caching?
+     */
+    private static ProxyFactoryRegistry getProxyFactoryRegistry(
+            final IConfigurationContributor[] configuration,
+            final IProject project)
+    {
+        try
+        {
+            return IDERegistration.startAnImplementation(configuration, false,
+                    project, project.getName(), JSFCorePlugin.PLUGIN_ID,
+                    new NullProgressMonitor());
+        }
+        catch (final CoreException e)
+        {
+            JSFCorePlugin.log("Error starting vm for project: "
+                    + project.getName(), e);
+        }
+
+        return null;
+    }
+
+    /**
+     * @param tldDecl
+     * @param project
+     * @return the tag element for the tldDecl
+     */
+    public static TLDTagElement createTLDTagElement(
+            final TLDElementDeclaration tldDecl, final IProject project)
+    {
+        if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR)
+        {
+            JSFCoreTraceOptions
+                    .log(String
+                            .format(
+                                    "TagAnalyzer.createTLDTagElement: Start tld=%s, project=%s",
+                                    tldDecl.getNodeName(), project.getName()));
+        }
+
+        try
+        {
+            final IJavaProject javaProject = JavaCore.create(project);
+            final String typeName = tldDecl.getTagclass();
+
+            if (typeName == null
+                    || JavaConventions.validateJavaTypeName(typeName,
+                            CompilerOptions.VERSION_1_3,
+                            CompilerOptions.VERSION_1_3).getSeverity() == IStatus.ERROR)
+            {
+                JSFCorePlugin.log(
+                        "Bad tag class name in " + tldDecl.toString(),
+                        new Throwable());
+                return null;
+            }
+
+            final IType type = javaProject.findType(typeName);
+            final TagType tagType = getJSFComponentTagType(type, project);
+
+            if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR)
+            {
+                JSFCoreTraceOptions.log(String.format(
+                        "Tag class type=%s\nTag type=%s", type, tagType));
+            }
+
+            if (tagType == TagType.COMPONENT)
+            {
+                return createComponentTagElement(tldDecl, project);
+            }
+            else if (tagType == TagType.CONVERTER)
+            {
+                return createConverterTagElement(tldDecl, project);
+            }
+            else if (tagType == TagType.VALIDATOR)
+            {
+                return createValidatorTagElement(tldDecl, project);
+            }
+            else if (tagType == TagType.HANDLER)
+            {
+                return createHandlerTagElement(tldDecl, type);
+            }
+        }
+        catch (final JavaModelException jme)
+        {
+            JSFCorePlugin.log(jme, "Trying to get type for TLD");
+        }
+
+        return null;
+    }
+
+    /**
+     * @param tldDecl
+     * @param project
+     * @return a component tag element for tldDecl
+     */
+    public static TLDTagElement createComponentTagElement(
+            final TLDElementDeclaration tldDecl, final IProject project)
+    {
+        final String componentType = findComponentType(tldDecl, project);
+
+        if (componentType != null)
+        {
+            final String componentClass = DTComponentIntrospector
+                    .findComponentClass(componentType, project);
+
+            if (componentClass != null && !"".equals(componentClass.trim()))
+            {
+                final ComponentTypeInfo typeInfo = DTComponentIntrospector
+                        .getComponent(componentType, componentClass, project);
+
+                if (typeInfo != null)
+                {
+                    final TLDComponentTagElement tagElement = new TLDComponentTagElement(
+                            tldDecl, typeInfo);
+                    return tagElement;
+                }
+            }
+        }
+
+        // TODO: really return null?
+        return null;
+    }
+
+    /**
+     * @param tldDecl
+     * @param project
+     * @return a converter tag element for tldDecl
+     */
+    public static TLDTagElement createConverterTagElement(
+            final TLDElementDeclaration tldDecl, final IProject project)
+    {
+        final String converterId = findConverterType(tldDecl, project);
+
+        if (converterId != null)
+        {
+            final String converterClass = DTComponentIntrospector
+                    .findConverterClass(converterId, project);
+
+            if (converterClass != null && !"".equals(converterClass.trim()))
+            {
+                final ConverterTypeInfo typeInfo = DTComponentIntrospector
+                        .getConverter(converterId, converterClass);
+                final TLDConverterTagElement tagElement = new TLDConverterTagElement(
+                        tldDecl, typeInfo);
+                return tagElement;
+            }
+        }
+
+        // we know (actually we assume by contract) that this a converter
+        // so create an unknown converter tag for it
+        return new TLDConverterTagElement(tldDecl, ConverterTypeInfo.UNKNOWN);
+    }
+
+    /**
+     * @param tldDecl
+     * @param project
+     * @return a validator tag element for the tldDec
+     */
+    public static TLDTagElement createValidatorTagElement(
+            final TLDElementDeclaration tldDecl, final IProject project)
+    {
+        final String validatorId = findValidatorType(tldDecl, project);
+
+        if (validatorId != null)
+        {
+            final String validatorClass = DTComponentIntrospector
+                    .findValidatorClass(validatorId, project);
+
+            if (validatorClass != null && !"".equals(validatorClass.trim()))
+            {
+                final ValidatorTypeInfo typeInfo = DTComponentIntrospector
+                        .getValidator(validatorId, validatorClass);
+                final TLDValidatorTagElement tagElement = new TLDValidatorTagElement(
+                        tldDecl, typeInfo);
+                return tagElement;
+            }
+        }
+        // we know (actually we assume by contract) that this a validator
+        // so create an unknown converter tag for it
+        return new TLDValidatorTagElement(tldDecl, ValidatorTypeInfo.UNKNOWN);
+    }
+
+    /**
+     * @param tldDecl
+     * @param type
+     * @return the tag element for a JSF handler
+     */
+    public static TLDTagElement createHandlerTagElement(
+            final TLDElementDeclaration tldDecl, final IType type)
+    {
+        if (DTComponentIntrospector.isTypeNameInstanceOfClass(type,
+                FACET_TAG_HANDLER))
+        {
+            return new TLDTagHandlerElement(tldDecl, TagHandlerType.FACET);
+        }
+        else if (DTComponentIntrospector.isTypeNameInstanceOfClass(type,
+                ATTRIBUTE_TAG_HANDLER))
+        {
+            return new TLDTagHandlerElement(tldDecl, TagHandlerType.ATTRIBUTE);
+        }
+        // else if (isTypeNameInstanceOfClass(type, ACTIONLISTENER_TAG_HANDLER))
+        // {
+        // return new TLDTagHandlerElement(tldDecl,
+        // TagHandlerType.ACTIONLISTENER);
+        // }
+        // else if (isTypeNameInstanceOfClass(type,
+        // VALUECHANGELISTENER_TAG_HANDLER))
+        // {
+        // return new TLDTagHandlerElement(tldDecl,
+        // TagHandlerType.VALUECHANGELISTENER);
+        // }
+        return null;
+    }
+
+    /**
+     * @param type
+     * @param project
+     * @return true if type represents a JSF component action class (spec 9.2.2)
+     */
+    public static IJSFTagElement.TagType getJSFComponentTagType(
+            final IType type, final IProject project)
+    {
+        if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR)
+        {
+            JSFCoreTraceOptions
+                    .log(String
+                            .format(
+                                    "TagAnalyzer.getJSFComponentTagType: Determining Tag Type for type %s on project %s",
+                                    type.getFullyQualifiedName(), project
+                                            .toString()));
+        }
+
+        Set<String> componentTags = null;
+        Set<String> converterTags = null;
+        Set<String> validatorTags = null;
+
+        final JSFVersion jsfVersion = getProjectVersion(project);
+
+        // v1.1(9.2.2): JSF component tags must sub-class one of these
+        if (jsfVersion == JSFVersion.V1_0 || jsfVersion == JSFVersion.V1_1)
+        {
+            componentTags = COMPONENT_TAG_HANDLER_TYPES_JSF11;
+            converterTags = CONVERTER_TAG_HANDLER_TYPES_JSF11;
+            validatorTags = VALIDATOR_TAG_HANDLER_TYPES_JSF11;
+        }
+        // v1.2(9.2.2): JSF component tags must sub-class UIComponentELTag
+        // the original two are included because we must be backward
+        // compatible
+        else if (jsfVersion == JSFVersion.V1_2)
+        {
+            componentTags = COMPONENT_TAG_HANDLER_TYPES_JSF12;
+            converterTags = CONVERTER_TAG_HANDLER_TYPES_JSF12;
+            validatorTags = VALIDATOR_TAG_HANDLER_TYPES_JSF12;
+        }
+
+        TagType tagType = null;
+
+        if (DTComponentIntrospector.isTypeNameInstanceOfClass(type,
+                componentTags))
+        {
+            tagType = TagType.COMPONENT;
+        }
+        else if (DTComponentIntrospector.isTypeNameInstanceOfClass(type,
+                converterTags))
+        {
+            tagType = TagType.CONVERTER;
+        }
+        else if (DTComponentIntrospector.isTypeNameInstanceOfClass(type,
+                validatorTags))
+        {
+            tagType = TagType.VALIDATOR;
+        }
+        else if (DTComponentIntrospector.isTypeNameInstanceOfClass(type,
+                ALL_HANDLER_TAGS))
+        {
+            tagType = TagType.HANDLER;
+        }
+
+        if (JSFCoreTraceOptions.TRACE_JSPTAGINTROSPECTOR)
+        {
+            JSFCoreTraceOptions.log(String.format(
+                    "TagAnalyzer.getJSFComponentTagType: tag type is %s",
+                    tagType != null ? tagType.toString() : "null"));
+        }
+        return tagType;
+    }
+
+    private static JSFVersion getProjectVersion(final IProject project)
+    {
+        try
+        {
+            if (FacetedProjectFramework.hasProjectFacet(project, "jst.jsf",
+                    "1.0"))
+            {
+                return JSFVersion.V1_0;
+            }
+            else if (FacetedProjectFramework.hasProjectFacet(project,
+                    "jst.jsf", "1.1"))
+            {
+                return JSFVersion.V1_1;
+            }
+            else if (FacetedProjectFramework.hasProjectFacet(project,
+                    "jst.jsf", "1.2"))
+            {
+                return JSFVersion.V1_2;
+            }
+        }
+        catch (final CoreException e)
+        {
+            JSFCorePlugin.log("checking project version", e);
+            // fall-through
+        }
+
+        return null;
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/registry/TLDTagRegistry.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/registry/TLDTagRegistry.java
new file mode 100644
index 0000000..8bfdc22
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/internal/view/model/jsp/registry/TLDTagRegistry.java
@@ -0,0 +1,796 @@
+package org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.ILock;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jst.jsf.common.internal.RunOnCompletionPattern;
+import org.eclipse.jst.jsf.common.internal.policy.IdentifierOrderedIteratorPolicy;
+import org.eclipse.jst.jsf.common.internal.resource.IResourceLifecycleListener;
+import org.eclipse.jst.jsf.common.internal.resource.LifecycleListener;
+import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent;
+import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.EventType;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.Namespace;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.core.internal.JSFCoreTraceOptions;
+import org.eclipse.jst.jsf.designtime.internal.view.model.ITagRegistry;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.CompositeTagResolvingStrategy;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.DefaultJSPTagResolver;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TLDNamespace;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.TagIntrospectingStrategy;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.UnresolvedJSPTagResolvingStrategy;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.CMDocumentFactoryTLD;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDDocument;
+import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration;
+import org.eclipse.jst.jsp.core.taglib.ITaglibIndexDelta;
+import org.eclipse.jst.jsp.core.taglib.ITaglibIndexListener;
+import org.eclipse.jst.jsp.core.taglib.ITaglibRecord;
+import org.eclipse.jst.jsp.core.taglib.TaglibIndex;
+
+/**
+ * Registry of all tld-defined tags for a particular project classpath
+ * 
+ * @author cbateman
+ * 
+ */
+public final class TLDTagRegistry implements ITagRegistry
+{
+    // STATIC
+    private final static Map<IProject, TLDTagRegistry> INSTANCES;
+    private final static ILock                         CRITICAL_SECTION;
+    private static TagIndexListener                    TAG_INDEX_LISTENER;
+    private static LifecycleListener                   LIFECYCLE_LISTENER;
+
+    static
+    {
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions
+                    .log("TLDTagRegistry: Static initialization TLDTagRegistry");
+        }
+        INSTANCES = new HashMap<IProject, TLDTagRegistry>();
+        CRITICAL_SECTION = Job.getJobManager().newLock();
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions
+                    .log("TLDTagRegistry: Done static initialization TLDTagRegistry");
+        }
+    }
+
+    /**
+     * @param project
+     * @return the TLD registry for the project's classpath
+     */
+    public static TLDTagRegistry getRegistry(final IProject project)
+    {
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions.log("TLDTagRegistry: Getting registry for "
+                    + project.toString());
+        }
+
+        TLDTagRegistry instance = null;
+        boolean alreadyExisted = true;
+
+        CRITICAL_SECTION.acquire();
+        try
+        {
+            instance = INSTANCES.get(project);
+
+            if (instance == null)
+            {
+                alreadyExisted = false;
+                if (LIFECYCLE_LISTENER == null)
+                {
+                    LIFECYCLE_LISTENER = new LifecycleListener(project);
+                }
+                else
+                {
+                    LIFECYCLE_LISTENER.addResource(project);
+                }
+
+                instance = new TLDTagRegistry(project, LIFECYCLE_LISTENER);
+                INSTANCES.put(project, instance);
+
+                // if tag index listener does exist, add it
+                if (TAG_INDEX_LISTENER == null)
+                {
+                    TAG_INDEX_LISTENER = new TagIndexListener();
+                    TaglibIndex.addTaglibIndexListener(TAG_INDEX_LISTENER);
+                }
+            }
+
+            return instance;
+        }
+        finally
+        {
+            CRITICAL_SECTION.release();
+
+            if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+            {
+                if (instance != null)
+                {
+                    JSFCoreTraceOptions
+                            .log("TLDTagRegistry: Acquired instance "
+                                    + instance.toString());
+                }
+                JSFCoreTraceOptions.log("TLDTagRegistry: already existed="
+                        + alreadyExisted);
+            }
+        }
+    }
+
+    private static boolean doesRegistryExist(final IProject project)
+    {
+        CRITICAL_SECTION.acquire();
+        try
+        {
+            return INSTANCES.get(project) != null;
+        }
+        finally
+        {
+            CRITICAL_SECTION.release();
+        }
+    }
+
+    private static void dispose(final IProject project)
+    {
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions.log("TLDTagRegistry: Disposing for project "
+                    + project.toString());
+        }
+
+        CRITICAL_SECTION.acquire();
+        try
+        {
+            final TLDTagRegistry processor = INSTANCES.get(project);
+
+            if (processor != null)
+            {
+                INSTANCES.remove(project);
+
+                if (!processor.isDisposed())
+                {
+                    processor.dispose();
+                    LIFECYCLE_LISTENER.removeResource(project);
+                }
+
+            }
+
+            if (INSTANCES.size() == 0)
+            {
+                if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+                {
+                    JSFCoreTraceOptions
+                            .log("TLDTagRegistry: No instances left.  Disposing static values.");
+                }
+
+                // if we no longer have any resources being tracked,
+                // then dispose the lifecycle listener
+                LIFECYCLE_LISTENER.dispose();
+                LIFECYCLE_LISTENER = null;
+                if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+                {
+                    JSFCoreTraceOptions
+                            .log("TLDTagRegistry: Disposing lifecycle listener "
+                                    + project.toString());
+                }
+
+                // no point in listening for events on taglibs if no outstanding
+                // registries
+                // if tag index listener does exist, add it
+                if (TAG_INDEX_LISTENER != null)
+                {
+                    TaglibIndex.removeTaglibIndexListener(TAG_INDEX_LISTENER);
+                    TAG_INDEX_LISTENER = null;
+                }
+            }
+        }
+        finally
+        {
+            CRITICAL_SECTION.release();
+            if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+            {
+                JSFCoreTraceOptions
+                        .log("TLDTagRegistry: Done disposing registry for "
+                                + project.toString());
+            }
+        }
+    }
+
+    // INSTANCE
+    private final IProject                                             _project;
+    private final Map<String, TLDNamespace>                            _nsResolved;
+    private final CompositeTagResolvingStrategy<TLDElementDeclaration> _resolver;
+    private final LifecycleListener                                    _lifecycleListener;
+    private boolean                                                    _hasBeenInitialized = false;
+    private final IResourceLifecycleListener                           _resListener;
+    private final AtomicBoolean                                        _isDisposed         = new AtomicBoolean(
+                                                                                                   false);
+    private final ConcurrentLinkedQueue<LibraryOperation>              _changeOperations   = new ConcurrentLinkedQueue<LibraryOperation>();
+    private final Job                                                  _changeJob;
+    private final List<ITagRegistryListener>                           _listeners;
+
+    private TLDTagRegistry(final IProject project,
+            final LifecycleListener lifecycleListener)
+    {
+        _project = project;
+        _nsResolved = new HashMap<String, TLDNamespace>();
+        _resolver = new CompositeTagResolvingStrategy<TLDElementDeclaration>();
+
+        // add the strategies
+        _resolver.addStrategy(new TagIntrospectingStrategy(_project));
+        _resolver.addStrategy(new DefaultJSPTagResolver(_project));
+        // makes sure that a tag element will always be created for any
+        // given tag definition even if other methods fail
+        _resolver.addStrategy(new UnresolvedJSPTagResolvingStrategy());
+
+        // strategy ordering
+        final List<String> strategyOrdering = new ArrayList<String>();
+        strategyOrdering.add(DefaultJSPTagResolver.ID);
+        strategyOrdering.add(TagIntrospectingStrategy.ID);
+        strategyOrdering.add(UnresolvedJSPTagResolvingStrategy.ID);
+
+        final IdentifierOrderedIteratorPolicy<String> policy = new IdentifierOrderedIteratorPolicy<String>(
+                strategyOrdering);
+        _resolver.setOrderingPolicy(policy);
+
+        // install lifecycle listener
+        _lifecycleListener = lifecycleListener;
+        _resListener = new IResourceLifecycleListener()
+        {
+            public EventResult acceptEvent(final ResourceLifecycleEvent event)
+            {
+                final EventResult result = EventResult.getDefaultEventResult();
+
+                // not interested
+                if (!_project.equals(event.getAffectedResource()))
+                {
+                    return result;
+                }
+
+                if (event.getEventType() == EventType.RESOURCE_INACCESSIBLE)
+                {
+                    dispose(_project);
+                }
+
+                return result;
+            }
+        };
+
+        _lifecycleListener.addListener(_resListener);
+        _listeners = new CopyOnWriteArrayList<ITagRegistryListener>();
+        _changeJob = new ChangeJob(project.getName());
+    }
+
+    private void dispose()
+    {
+        // latch on the isDisposed flag so this block can only ever
+        // execute once
+        if (!_isDisposed.compareAndSet(false, true))
+        {
+            fireEvent(new TagRegistryChangeEvent(this,
+                    TagRegistryChangeEvent.EventType.REGISTRY_DISPOSED));
+            _lifecycleListener.removeListener(_resListener);
+            _nsResolved.clear();
+            _changeOperations.clear();
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry.ITagRegistry#isDisposed()
+     */
+    public final boolean isDisposed()
+    {
+        return _isDisposed.get();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry.ITagRegistry#refresh()
+     */
+    public void refresh(final Runnable runAfter)
+    {
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions.log("TLDTagRegistry.refresh: start");
+        }
+
+        final Job refreshJob = new Job("Refreshing JSP tag registry for "
+                + _project.getName())
+        {
+            @Override
+            protected IStatus run(final IProgressMonitor monitor)
+            {
+                synchronized (TLDTagRegistry.this)
+                {
+                    if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+                    {
+                        JSFCoreTraceOptions
+                                .log("TLDTagRegistry.refresh: start");
+                    }
+
+                    final List<Namespace> namespaces = new ArrayList(
+                            _nsResolved.values());
+
+                    _nsResolved.clear();
+
+                    fireEvent(new TagRegistryChangeEvent(TLDTagRegistry.this,
+                            TagRegistryChangeEvent.EventType.REMOVED_NAMESPACE,
+                            namespaces));
+                    initialize();
+
+                    return Status.OK_STATUS;
+                }
+            }
+        };
+
+        final RunOnCompletionPattern runPattern = new RunOnCompletionPattern(
+                refreshJob, runAfter);
+        runPattern.run();
+
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions.log("TLDTagRegistry.refresh: finished");
+        }
+    }
+
+    /**
+     * @throws JavaModelException
+     * @throws CoreException
+     * @throws IOException
+     */
+    private void initialize()
+    {
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions.log("TLDTagRegistry.initialize: start");
+        }
+
+        final ITaglibRecord[] tldrecs = TaglibIndex
+                .getAvailableTaglibRecords(_project.getFullPath());
+        final List<Namespace> affectedObjects = new ArrayList<Namespace>();
+        for (final ITaglibRecord tldrec : tldrecs)
+        {
+            // defer the event
+            final Namespace ns = initialize(tldrec, false);
+
+            if (ns != null)
+            {
+                affectedObjects.add(ns);
+            }
+        }
+
+        _hasBeenInitialized = true;
+
+        if (affectedObjects.size() > 0)
+        {
+            fireEvent(new TagRegistryChangeEvent(this,
+                    TagRegistryChangeEvent.EventType.ADDED_NAMESPACE,
+                    affectedObjects));
+        }
+
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions.log("TLDTagRegistry.initialize: finished");
+        }
+    }
+
+    private TLDNamespace initialize(final ITaglibRecord tagRecord,
+            final boolean fireEvent)
+    {
+        final CMDocumentFactoryTLD factory = new CMDocumentFactoryTLD();
+        final TLDDocument doc = (TLDDocument) factory
+                .createCMDocument(tagRecord);
+        if (doc != null)
+        {
+            final TLDNamespace ns = new TLDNamespace(doc, _resolver);
+            _nsResolved.put(doc.getUri(), ns);
+
+            if (!fireEvent)
+            {
+                fireEvent(new TagRegistryChangeEvent(this,
+                        TagRegistryChangeEvent.EventType.ADDED_NAMESPACE,
+                        Collections.singletonList(ns)));
+            }
+
+            return ns;
+        }
+
+        // no new namespace
+        return null;
+    }
+
+    private void remove(final ITaglibRecord tagRecord)
+    {
+        final CMDocumentFactoryTLD factory = new CMDocumentFactoryTLD();
+        final TLDDocument doc = (TLDDocument) factory
+                .createCMDocument(tagRecord);
+
+        final TLDNamespace ns = _nsResolved.remove(doc.getUri());
+
+        if (ns != null)
+        {
+            fireEvent(new TagRegistryChangeEvent(this,
+                    TagRegistryChangeEvent.EventType.REMOVED_NAMESPACE,
+                    Collections.singletonList(ns)));
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry.ITagRegistry#getAllTagLibraries()
+     */
+    public final synchronized Collection<? extends Namespace> getAllTagLibraries()
+    {
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions.log("TLDTagRegistry.getAllTagLibraries: start");
+        }
+
+        if (!_hasBeenInitialized)
+        {
+            initialize();
+        }
+
+        final Set<TLDNamespace> allTagLibraries = new HashSet<TLDNamespace>();
+        allTagLibraries.addAll(_nsResolved.values());
+
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions
+                    .log("TLDTagRegistry.getAllTagLibraries: finished");
+        }
+        return allTagLibraries;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry.ITagRegistry#getTagLibrary(java.lang.String)
+     */
+    public final synchronized Namespace getTagLibrary(final String uri)
+    {
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions.log("TLDTagRegistry.getTagLibrary: start uri="
+                    + uri);
+        }
+
+        if (!_hasBeenInitialized)
+        {
+            initialize();
+        }
+
+        final Namespace ns = _nsResolved.get(uri);
+
+        if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY)
+        {
+            JSFCoreTraceOptions
+                    .log("TLDTagRegistry.getTagLibrary: finished, result="
+                            + ns.toString());
+        }
+        return ns;
+    }
+
+    @Override
+    public String toString()
+    {
+        return String
+                .format(
+                        "TLDRegistry for project %s, isDisposed=%s, hasBeenInitialized=%s, numberOfNamespace=%d",
+                        _project.toString(), Boolean.valueOf(isDisposed()),
+                        Boolean.valueOf(_hasBeenInitialized), Integer
+                                .valueOf(_nsResolved.size()));
+    }
+
+    public void addListener(final ITagRegistryListener listener)
+    {
+        if (!_listeners.contains(listener))
+        {
+            _listeners.add(listener);
+        }
+    }
+
+    public void removeListener(final ITagRegistryListener listener)
+    {
+        _listeners.remove(listener);
+    }
+
+    /**
+     * @param event
+     */
+    private void fireEvent(final TagRegistryChangeEvent event)
+    {
+        for (final ITagRegistryListener listener : _listeners)
+        {
+            try
+            {
+                listener.registryChanged(event);
+            }
+            catch (final Exception e)
+            {
+                JSFCorePlugin.log(new Exception(e),
+                        "During change event notification");
+            }
+        }
+    }
+
+    private void addLibraryOperation(final LibraryOperation operation)
+    {
+        _changeOperations.add(operation);
+        _changeJob.schedule();
+    }
+
+    private LibraryOperation createAddOperation(final ITaglibRecord changeRecord)
+    {
+        return new AddTagLibrary(changeRecord);
+    }
+
+    private LibraryOperation createRemoveOperation(
+            final ITaglibRecord changeRecord)
+    {
+        return new RemoveTagLibrary(changeRecord);
+    }
+
+    private LibraryOperation createChangeOperation(
+            final ITaglibRecord changeRecord)
+    {
+        if (changeRecord == null)
+        {
+            throw new IllegalArgumentException();
+        }
+        return new ChangeTagLibrary(changeRecord);
+    }
+
+    private class ChangeJob extends Job
+    {
+        private int _rescheduleTime = -1;
+
+        public ChangeJob(final String projectName)
+        {
+            super("Update job for project " + projectName);
+        }
+
+        @Override
+        protected IStatus run(final IProgressMonitor monitor)
+        {
+            synchronized (TLDTagRegistry.this)
+            {
+                _rescheduleTime = -1;
+
+                LibraryOperation operation = null;
+                final MultiStatus multiStatus = new MultiStatus(
+                        JSFCorePlugin.PLUGIN_ID, 0, "Result of change job",
+                        new Throwable());
+                while ((operation = _changeOperations.poll()) != null)
+                {
+                    _rescheduleTime = 10000; // ms
+
+                    operation.run();
+                    multiStatus.add(operation.getResult());
+                }
+
+                if (_rescheduleTime >= 0 && !monitor.isCanceled())
+                {
+                    // if any operations were found on this run, reschedule
+                    // to run again in 10seconds based on the assumption that
+                    // events may be coming in bursts
+                    schedule(_rescheduleTime);
+                }
+
+                return multiStatus;
+            }
+        }
+    }
+
+    private abstract class LibraryOperation implements Runnable
+    {
+        protected final ITaglibRecord _changeRecord;
+        private IStatus               _result;
+
+        protected LibraryOperation(final ITaglibRecord changeRecord)
+        {
+            _changeRecord = changeRecord;
+        }
+
+        public final void run()
+        {
+            try
+            {
+                _result = doRun();
+            }
+            catch (final Exception e)
+            {
+                _result = new Status(IStatus.ERROR, JSFCorePlugin.PLUGIN_ID,
+                        "Problem during run", e);
+            }
+        }
+
+        public IStatus getResult()
+        {
+            return _result;
+        }
+
+        protected abstract IStatus doRun();
+    }
+
+    private class AddTagLibrary extends LibraryOperation
+    {
+        public AddTagLibrary(final ITaglibRecord newRecord)
+        {
+            super(newRecord);
+        }
+
+        @Override
+        protected IStatus doRun()
+        {
+            synchronized (TLDTagRegistry.this)
+            {
+                // fire change event if applicable
+                initialize(_changeRecord, true);
+                return Status.OK_STATUS;
+            }
+        }
+    }
+
+    private class RemoveTagLibrary extends LibraryOperation
+    {
+        protected RemoveTagLibrary(final ITaglibRecord changeRecord)
+        {
+            super(changeRecord);
+        }
+
+        @Override
+        protected IStatus doRun()
+        {
+            remove(_changeRecord);
+            return Status.OK_STATUS;
+
+        }
+
+    }
+
+    private class ChangeTagLibrary extends LibraryOperation
+    {
+
+        protected ChangeTagLibrary(final ITaglibRecord changeRecord)
+        {
+            super(changeRecord);
+        }
+
+        @Override
+        protected IStatus doRun()
+        {
+            IStatus result = null;
+
+            synchronized (TLDTagRegistry.this)
+            {
+                new RemoveTagLibrary(_changeRecord).doRun();
+
+                if (result.getSeverity() != IStatus.ERROR
+                        && result.getSeverity() != IStatus.CANCEL)
+                {
+                    result = new AddTagLibrary(_changeRecord).doRun();
+                }
+            }
+
+            return result;
+        }
+
+    }
+
+    private static class TagIndexListener implements ITaglibIndexListener
+    {
+        public void indexChanged(final ITaglibIndexDelta delta)
+        {
+            if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY_CHANGES)
+            {
+                JSFCoreTraceOptions.log("TagIndexListener.indexChanged: start");
+            }
+
+            visitDelta(delta);
+
+            if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY_CHANGES)
+            {
+                JSFCoreTraceOptions
+                        .log("TagIndexListener.indexChanged: finish");
+            }
+        }
+
+        private void visitDelta(final ITaglibIndexDelta delta)
+        {
+            final IProject project = delta.getProject();
+
+            // if a registry hasn't been created for this project yet,
+            // then don't worry about tag library change events on it.
+            if (doesRegistryExist(project))
+            {
+                final TLDTagRegistry registry = TLDTagRegistry
+                        .getRegistry(project);
+
+                if (!registry.isDisposed()
+                        && delta.getTaglibRecord() != null)
+                {
+                    switch (delta.getKind())
+                    {
+                        case ITaglibIndexDelta.ADDED:
+                        {
+                            if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY_CHANGES)
+                            {
+                                JSFCoreTraceOptions.log(String.format(
+                                        "Processing add change: project=%s",
+                                        project.getName()));
+                            }
+
+                            registry
+                                    .addLibraryOperation(registry
+                                            .createAddOperation(delta
+                                                    .getTaglibRecord()));
+                        }
+                        break;
+                        case ITaglibIndexDelta.REMOVED:
+                        {
+                            if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY_CHANGES)
+                            {
+                                JSFCoreTraceOptions
+                                        .log(String
+                                                .format(
+                                                        "Processing remove change: project=%s, tagrecord=%s",
+                                                        project.getName()));
+                            }
+                            registry.addLibraryOperation(registry
+                                    .createRemoveOperation(delta
+                                            .getTaglibRecord()));
+                        }
+                        break;
+                        case ITaglibIndexDelta.CHANGED:
+                        {
+                            if (JSFCoreTraceOptions.TRACE_JSPTAGREGISTRY_CHANGES)
+                            {
+                                JSFCoreTraceOptions
+                                        .log(String
+                                                .format(
+                                                        "Processing change: project=%s, tagrecord=%s",
+                                                        project.getName()));
+                            }
+                            registry.addLibraryOperation(registry
+                                    .createChangeOperation(delta
+                                            .getTaglibRecord()));
+                        }
+                        break;
+                    }
+                }
+            }
+
+            // visit children
+            for (final ITaglibIndexDelta child : delta.getAffectedChildren())
+            {
+                visitDelta(child);
+            }
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/AbstractStructuredDocumentSymbolResolverFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/AbstractStructuredDocumentSymbolResolverFactory.java
new file mode 100644
index 0000000..8b49c93
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/AbstractStructuredDocumentSymbolResolverFactory.java
@@ -0,0 +1,18 @@
+package org.eclipse.jst.jsf.designtime.resolver;
+
+import org.eclipse.jst.jsf.context.IModelContext;
+
+/**
+ * A base class for symbol resolver factories.
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class AbstractStructuredDocumentSymbolResolverFactory implements
+        IStructuredDocumentSymbolResolverFactory
+{
+    /**
+     * @see org.eclipse.jst.jsf.designtime.resolver.IStructuredDocumentSymbolResolverFactory#getSymbolContextResolver(org.eclipse.jst.jsf.context.IModelContext)
+     */
+    public abstract ISymbolContextResolver getSymbolContextResolver(IModelContext context);
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/AbstractSymbolContextResolver.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/AbstractSymbolContextResolver.java
index 2657732..3d7691e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/AbstractSymbolContextResolver.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/AbstractSymbolContextResolver.java
@@ -38,4 +38,16 @@
     public abstract ISymbol getVariable(String name);
 
     public abstract boolean canResolveContext(IModelContext modelContext);
+
+    /**
+     * Default implementation
+     * 
+     * We should avoid returning true unless we are positive that changing
+     * to this context won't change the way symbols are resolved.
+     */
+    public boolean hasSameResolution(IModelContext modelContext)
+    {
+        return false;
+    }
+    
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/CachingSymbolContextResolver.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/CachingSymbolContextResolver.java
new file mode 100644
index 0000000..162c350
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/CachingSymbolContextResolver.java
@@ -0,0 +1,204 @@
+package org.eclipse.jst.jsf.designtime.resolver;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jst.jsf.context.IModelContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.symbol.IMethodSymbol;
+import org.eclipse.jst.jsf.context.symbol.IObjectSymbol;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
+import org.eclipse.jst.jsf.context.symbol.SymbolFactory;
+
+/**
+ * A symbol resolver that delegates to the default SymbolContextResolver, but
+ * caches the results and returns those on subsequent calls.
+ * 
+ * WARNING: this resolver is suitable *only* in situations where the state
+ * of dependent symbol sources won't change between calls.  This resolver makes
+ * no attempt to ensure that cached data is in sync with changes to symbols
+ * such addition, modification or removal of Java class underlying beans.
+ * 
+ * NOTE: this resolver is experimental and should NOT be considered API
+ * 
+ * Clients should not use this resolver directly.  Access it through the factory instead
+ * @author cbateman
+ *
+ */
+public final class CachingSymbolContextResolver extends AbstractSymbolContextResolver
+{
+    private final static ISymbol SYMBOL_NOT_FOUND = SymbolFactory.eINSTANCE.createIComponentSymbol();
+    private final static IMethodSymbol METHOD_SYMBOL_NOT_FOUND =
+        SymbolFactory.eINSTANCE.createIMethodSymbol();
+    
+    private final SymbolContextResolver     _delegate;
+
+    private final Map<String, ISymbol>  _variablesByName = new HashMap<String, ISymbol>();
+    private ISymbol[]                   _allVariables;
+
+    private final Map<ISymbol, Map<Object, ISymbol>>    _propertiesByOwner =
+        new HashMap<ISymbol, Map<Object,ISymbol>>();
+    private ISymbol[]                   _allProperties;
+
+    private final Map<IObjectSymbol, Map<Object, IMethodSymbol>> _methodsByOwner =
+        new HashMap<IObjectSymbol, Map<Object,IMethodSymbol>>();
+    private ISymbol[]             _allMethods;
+    
+    /**
+     * @param context
+     */
+    public CachingSymbolContextResolver(final IStructuredDocumentContext context)
+    {
+        _delegate = new SymbolContextResolver(context);
+    }
+
+    @Override
+    public boolean canResolveContext(final IModelContext modelContext)
+    {
+        return _delegate.canResolveContext(modelContext);
+    }
+
+    @Override
+    public ISymbol[] getAllVariables()
+    {
+        if (_allVariables == null)
+        {
+            _allVariables = _delegate.getAllVariables();
+        }
+        return _allVariables;
+    }
+
+    @Override
+    public IMethodSymbol getMethod(final IObjectSymbol base, final Object methodName)
+    {
+        Map<Object, IMethodSymbol> methods = _methodsByOwner.get(base);
+        
+        if (methods == null)
+        {
+            methods = new HashMap<Object, IMethodSymbol>();
+            _methodsByOwner.put(base, methods);
+        }
+
+        IMethodSymbol method = methods.get(methodName);
+
+        if (method == SYMBOL_NOT_FOUND)
+        {
+            method = null;
+        }
+        else
+        {
+            if (method == null)
+            {
+                method = _delegate.getMethod(base, methodName);
+                
+                if (method == null)
+                {
+                    // if the delegate couldn't find the property,
+                    // then mark this in case it is requested again
+                    methods.put(methodName, METHOD_SYMBOL_NOT_FOUND);
+                }
+                else
+                {
+                    methods.put(methodName, method);
+                }
+            }
+        }
+        return method;
+    }
+
+    @Override
+    public ISymbol[] getMethods(final IObjectSymbol base)
+    {
+        if (_allMethods == null)
+        {
+            _allMethods = _delegate.getMethods(base);
+        }
+        return _allMethods;
+    }
+
+    @Override
+    public ISymbol[] getProperties(final ISymbol symbol)
+    {
+        if (_allProperties == null)
+        {
+            _allProperties = _delegate.getProperties(symbol);
+        }
+        return _allProperties;
+    }
+
+    @Override
+    public ISymbol getProperty(final ISymbol symbol, final Object propertyName)
+    {
+        Map<Object, ISymbol> properties = _propertiesByOwner.get(symbol);
+        
+        if (properties == null)
+        {
+            properties = new HashMap<Object, ISymbol>();
+            _propertiesByOwner.put(symbol, properties);
+        }
+
+        ISymbol property = properties.get(propertyName);
+
+        if (property == SYMBOL_NOT_FOUND)
+        {
+            property = null;
+        }
+        else
+        {
+            if (property == null)
+            {
+                property = _delegate.getProperty(symbol, propertyName);
+                
+                if (property == null)
+                {
+                    // if the delegate couldn't find the property,
+                    // then mark this in case it is requested again
+                    properties.put(propertyName, SYMBOL_NOT_FOUND);
+                }
+                else
+                {
+                    properties.put(propertyName, property);
+                }
+            }
+        }
+        return property;
+    }
+
+    @Override
+    public ISymbol getVariable(final String name)
+    {
+        ISymbol variable = _variablesByName.get(name);
+
+        // if the symbol was not found, return null but avoid calling the
+        // delegate again
+        if (variable == SYMBOL_NOT_FOUND)
+        {
+            variable = null;
+        }
+        else
+        {
+            if (variable == null)
+            {
+                variable = _delegate.getVariable(name);
+                
+                if (variable == null)
+                {
+                    // if the delegate couldn't find the variable,
+                    // then mark this in case it is requested again
+                    _variablesByName.put(name, SYMBOL_NOT_FOUND);
+                }
+                else
+                {
+                    _variablesByName.put(name, variable);
+                }
+            }
+        }
+        return variable;
+    }
+
+    @Override
+    public boolean hasSameResolution(IModelContext modelContext)
+    {
+        return _delegate.hasSameResolution(modelContext);
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/IStructuredDocumentSymbolResolverFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/IStructuredDocumentSymbolResolverFactory.java
new file mode 100644
index 0000000..adf1185
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/IStructuredDocumentSymbolResolverFactory.java
@@ -0,0 +1,21 @@
+package org.eclipse.jst.jsf.designtime.resolver;
+
+import org.eclipse.jst.jsf.context.IModelContext;
+
+/**
+ * A factory for symbol context resolvers.
+ * 
+ * Clients may use but implement this interface.  To implement, sub-class
+ * AbstractStructuredDocumentSymbolResolverFactory
+ * 
+ * @author cbateman
+ *
+ */
+public interface IStructuredDocumentSymbolResolverFactory
+{
+    /**
+     * @param context
+     * @return a new instance of symbol resolver for context
+     */
+    public ISymbolContextResolver getSymbolContextResolver(IModelContext context);
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/ISymbolContextResolver.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/ISymbolContextResolver.java
index e6f876e..6051043 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/ISymbolContextResolver.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/ISymbolContextResolver.java
@@ -7,11 +7,12 @@
  *
  * Contributors:
  *    Cameron Bateman/Oracle - initial API and implementation
- *    
+ * 
  ********************************************************************************/
 
 package org.eclipse.jst.jsf.designtime.resolver;
 
+import org.eclipse.jst.jsf.context.IModelContext;
 import org.eclipse.jst.jsf.context.resolver.IDocumentContextResolver;
 import org.eclipse.jst.jsf.context.symbol.IMethodSymbol;
 import org.eclipse.jst.jsf.context.symbol.IObjectSymbol;
@@ -21,28 +22,28 @@
  * Resolves symbols and possible symbols in a given context
  * 
  * May NOT be sub-classed or implemented by clients.
- * Sub-class SymbolContextResolver.
+ * Sub-class AbstractSymbolContextResolver to implement.
  * 
  * @author cbateman
  *
  */
-public interface ISymbolContextResolver extends IDocumentContextResolver 
+public interface ISymbolContextResolver extends IDocumentContextResolver
 {
-	/**
-	 * Gets the most appropriate symbol in the current context
-	 * based on name.  Most "appropriate" may take into account
-	 * scoping and other rules.
-	 * 
-	 * @param name
-	 * @return a symbol
-	 */
-	ISymbol  getVariable(String name);
-	
-	/**
-	 * @return all valid symbols in the current context
-	 */
-	ISymbol[] getAllVariables();
-    
+    /**
+     * Gets the most appropriate symbol in the current context
+     * based on name.  Most "appropriate" may take into account
+     * scoping and other rules.
+     * 
+     * @param name
+     * @return a symbol
+     */
+    ISymbol  getVariable(String name);
+
+    /**
+     * @return all valid symbols in the current context
+     */
+    ISymbol[] getAllVariables();
+
     /**
      * @param symbol
      * @param propertyName
@@ -55,17 +56,35 @@
      * @return all properties of symbol
      */
     ISymbol[]  getProperties(ISymbol symbol);
-    
+
     /**
      * @param base
      * @param methodName
      * @return the method of base matching methodName or null if not found
      */
     IMethodSymbol getMethod(IObjectSymbol base, Object methodName);
-    
+
     /**
      * @param base
      * @return all methods belonging to base
      */
     ISymbol[] getMethods(IObjectSymbol base);
+    
+    /**
+     * This is meant to be used things like caching to determine if caches
+     * need to be flushed for different contexts.  If you are in doubt, always
+     * return false.
+     * 
+     * NOTE: this method should not be used to determine if symbols previously
+     * returned by this resolver have changed to do changes in the underlying
+     * application such as change to a managed bean.  This method only needs
+     * to check if what variable, properties and methods may have resolved
+     * different, because of the context itself.
+     * 
+     * @param modelContext
+     * @since 3.0
+     * @return true if the instance of this resolver would resolve everything
+     * exactly the same with this modelContext.  False otherwise.
+     */
+    boolean hasSameResolution(final IModelContext modelContext);
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/StructuredDocumentSymbolResolverFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/StructuredDocumentSymbolResolverFactory.java
index c0fd95f..69fc6be 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/StructuredDocumentSymbolResolverFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/StructuredDocumentSymbolResolverFactory.java
@@ -26,7 +26,7 @@
  *
  */
 public final class StructuredDocumentSymbolResolverFactory extends
-        AbstractDelegatingFactory 
+        AbstractDelegatingFactory implements IStructuredDocumentSymbolResolverFactory
 {
     private static StructuredDocumentSymbolResolverFactory INSTANCE;
     
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/SymbolContextResolver.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/SymbolContextResolver.java
index 981fd83..3652db1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/SymbolContextResolver.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/resolver/SymbolContextResolver.java
@@ -33,16 +33,16 @@
  */
 /*package*/ final class SymbolContextResolver extends AbstractSymbolContextResolver 
 {
-    private final IStructuredDocumentContext		_context;
+    private final IStructuredDocumentContext        _context;
     private IWorkspaceContextResolver               _wkspResolver; // = null; lazy created through getWorkspaceResolver
 
 	/**
-	 * @param context
-	 */
-	/*package*/ SymbolContextResolver(IStructuredDocumentContext context)
-	{
-		_context = context;
-	}
+     * @param context
+     */
+    /* package */SymbolContextResolver(IStructuredDocumentContext context)
+    {
+        _context = context;
+    }
 
     public ISymbol getVariable(String name) 
     {
@@ -53,10 +53,13 @@
             final DesignTimeApplicationManager manager =
                 DesignTimeApplicationManager.getInstance(file.getProject());
             
-            final DTFacesContext facesContext = manager.getFacesContext(file);
-    
-            return manager.getVariableResolver().
-                resolveVariable(facesContext, name, file);
+            if (manager != null)
+            {
+                final DTFacesContext facesContext = manager.getFacesContext(file);
+        
+                return manager.getVariableResolver().
+                    resolveVariable(facesContext, name, file);
+            }
         }
         
         return null;
@@ -71,12 +74,15 @@
             final DesignTimeApplicationManager manager =
                 DesignTimeApplicationManager.getInstance(file.getProject());
             
-            final DTFacesContext facesContext = manager.getFacesContext(file);
-            
-            if (facesContext != null)
+            if (manager != null)
             {
-                return manager.getVariableResolver().
-                        getAllVariables(facesContext, file);
+                final DTFacesContext facesContext = manager.getFacesContext(file);
+                
+                if (facesContext != null)
+                {
+                    return manager.getVariableResolver().
+                            getAllVariables(facesContext, file);
+                }
             }
         }
         
@@ -91,7 +97,11 @@
         {
             final DesignTimeApplicationManager manager =
                 DesignTimeApplicationManager.getInstance(file.getProject());
-            return manager.getPropertyResolver().getProperty(symbol, propertyName);
+            
+            if (manager != null)
+            {
+                return manager.getPropertyResolver().getProperty(symbol, propertyName);
+            }
         }
         
         return null;
@@ -105,7 +115,11 @@
         {
             final DesignTimeApplicationManager manager =
                 DesignTimeApplicationManager.getInstance(file.getProject());
-            return manager.getPropertyResolver().getAllProperties(symbol);
+            
+            if (manager != null)
+            {
+                return manager.getPropertyResolver().getAllProperties(symbol);
+            }
         }
         return ISymbol.EMPTY_SYMBOL_ARRAY;
     }
@@ -118,7 +132,11 @@
         {
             final DesignTimeApplicationManager manager =
                 DesignTimeApplicationManager.getInstance(file.getProject());
-            return manager.getMethodResolver().getMethod(base, methodName);
+             
+            if (manager != null)
+            {
+                return manager.getMethodResolver().getMethod(base, methodName);
+            }
         }
         
         return null;
@@ -132,7 +150,11 @@
         {
             final DesignTimeApplicationManager manager =
                 DesignTimeApplicationManager.getInstance(file.getProject());
-            return manager.getMethodResolver().getMethods(base);
+            
+            if (manager != null)
+            {
+                return manager.getMethodResolver().getMethods(base);
+            }
         }
         
         return new IMethodSymbol[0];
@@ -151,19 +173,28 @@
     {
         if (_wkspResolver == null)
         {
-            _wkspResolver = IStructuredDocumentContextResolverFactory.
-                                INSTANCE.getWorkspaceContextResolver(_context);
+            _wkspResolver = getWorkspaceResolver(_context);
         }
         
         return _wkspResolver;
     }
     
+    private IWorkspaceContextResolver getWorkspaceResolver(final IStructuredDocumentContext context)
+    {
+        return IStructuredDocumentContextResolverFactory.INSTANCE
+                .getWorkspaceContextResolver(context);
+    }
+
     /**
      * @return the underlying IFile for my context or null if can't be determined
      */
     protected final IFile getFile()
     {
-        final IWorkspaceContextResolver  resolver = getWorkspaceResolver();
+        return getFile(getWorkspaceResolver());
+    }
+
+    private IFile getFile(final IWorkspaceContextResolver  resolver)
+    {
         
         if (resolver != null)
         {
@@ -176,5 +207,19 @@
         }
         
         return null;
+        
+    }
+
+    @Override
+    public boolean hasSameResolution(IModelContext modelContext)
+    {
+        if (canResolveContext(modelContext))
+        {
+            return getFile().equals(getFile(getWorkspaceResolver((IStructuredDocumentContext) modelContext)));
+        }
+
+        // if we can't even resolve the context, then we certainly don't have
+        // the same resolution
+        return false;
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/AbstractDataModelVariableFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/AbstractDataModelVariableFactory.java
index a4dfba4..00c8ac1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/AbstractDataModelVariableFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/AbstractDataModelVariableFactory.java
@@ -30,7 +30,9 @@
 import org.eclipse.jst.jsf.context.symbol.SymbolFactory;
 import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
 import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.validation.internal.ValidationPreferences;
+import org.eclipse.jst.jsf.designtime.resolver.StructuredDocumentSymbolResolverFactory;
+import org.eclipse.jst.jsf.validation.internal.IJSFViewValidator.IValidationReporter;
+import org.eclipse.jst.jsf.validation.internal.IJSFViewValidator.ReporterAdapter;
 import org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidationUtil;
 import org.eclipse.jst.jsf.validation.internal.el.ELExpressionValidator;
 import org.eclipse.jst.jsf.validation.internal.el.IExpressionSemanticValidator;
@@ -58,12 +60,12 @@
         assert elContext != null;
         assert file != null;
 
-        final ValidationPreferences prefs = 
-            new ValidationPreferences(JSFCorePlugin.getDefault().getPreferenceStore());
-        prefs.load();
-
+        final IValidationReporter  reporter = new ReporterAdapter();
+        
         final ELExpressionValidator validator = 
-            new ELExpressionValidator(elContext, elText, file, prefs.getElPrefs());
+            new ELExpressionValidator(elContext, elText 
+                    ,StructuredDocumentSymbolResolverFactory.getInstance()
+                    , reporter);
         validator.validateXMLNode();
         final IExpressionSemanticValidator semValidator = 
             validator.getSemanticValidator();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBeanSymbolSourceProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBeanSymbolSourceProvider.java
index 29614fd..7f5d0c7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBeanSymbolSourceProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBeanSymbolSourceProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jst.jsf.context.symbol.ERuntimeSource;
 import org.eclipse.jst.jsf.context.symbol.IBeanInstanceSymbol;
 import org.eclipse.jst.jsf.context.symbol.IJavaTypeDescriptor2;
@@ -138,17 +139,18 @@
                     {
                         IJavaProject javaProject = JavaCore.create(iProject);
                         IType type = javaProject.findType(bean.getManagedBeanClass().getTextContent());
-                        
+
                         // don't bother setting a type descriptor if we
                         // can't find a type
                         if (type != null)
                         {
-                            IJavaTypeDescriptor2 javaTypeDescriptor = SymbolFactory.eINSTANCE.createIJavaTypeDescriptor2();
+                            IJavaTypeDescriptor2 javaTypeDescriptor = 
+                                SymbolFactory.eINSTANCE.createIJavaTypeDescriptor2();
                             javaTypeDescriptor.setType(type);
                             symbol.setJavaTypeDescriptor(javaTypeDescriptor);
                         }
                     }
-                    catch (Exception t)
+                    catch (JavaModelException t)
                     {
                         // do nothing; skip type info for this bean
                     }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBuiltInSymbolProvider.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBuiltInSymbolProvider.java
index 5d10944..a6e8e02 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBuiltInSymbolProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/DefaultBuiltInSymbolProvider.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *    Cameron Bateman/Oracle - initial API and implementation
- *    
+ * 
  ********************************************************************************/
 
 package org.eclipse.jst.jsf.designtime.symbols;
@@ -45,12 +45,12 @@
  * Clients may sub-class
  * 
  * @author cbateman
- *
+ * 
  */
-public class DefaultBuiltInSymbolProvider 
+public class DefaultBuiltInSymbolProvider
 {
-    private static DefaultBuiltInSymbolProvider  INSTANCE;
-    
+    private static DefaultBuiltInSymbolProvider INSTANCE;
+
     /**
      * @return the singleton instance
      */
@@ -60,235 +60,310 @@
         {
             INSTANCE = new DefaultBuiltInSymbolProvider();
         }
-        
+
         return INSTANCE;
     }
-    
-    
-    private static final String APPLICATION_SCOPE = "applicationScope"; //$NON-NLS-1$
-    private static final String SESSION_SCOPE = "sessionScope"; //$NON-NLS-1$
-    private static final String REQUEST_SCOPE = "requestScope"; //$NON-NLS-1$
-    private static final String COOKIE_IMPLICIT_OBJ = "cookie"; //$NON-NLS-1$
-    private static final String FACES_CONTEXT_IMPLICIT_OBJ = "facesContext"; //$NON-NLS-1$
-    private static final String HEADER_IMPLICIT_OBJ = "header"; //$NON-NLS-1$
-    private static final String HEADER_VALUES_IMPLICIT_OBJ = "headerValues"; //$NON-NLS-1$
-    private static final String INIT_PARAM_IMPLICIT_OBJ = "initParam"; //$NON-NLS-1$
-    private static final String PARAM_IMPLICIT_OBJ = "param"; //$NON-NLS-1$
-    private static final String PARAM_VALUES_IMPLICIT_OBJ = "paramValues"; //$NON-NLS-1$
-    private static final String VIEW_IMPLICIT_OBJ = "view"; //$NON-NLS-1$
 
-    private static final String FACES_CONTEXT_FULLY_QUALIFIED_CLASS =
-        "javax.faces.context.FacesContext"; //$NON-NLS-1$
-    private static final String VIEW_FULLY_QUALIFIED_CLASS =
-        "javax.faces.component.UIViewRoot"; //$NON-NLS-1$
+    private static final String APPLICATION_SCOPE                   = "applicationScope";                //$NON-NLS-1$
+    private static final String SESSION_SCOPE                       = "sessionScope";                    //$NON-NLS-1$
+    private static final String REQUEST_SCOPE                       = "requestScope";                    //$NON-NLS-1$
+    private static final String COOKIE_IMPLICIT_OBJ                 = "cookie";                          //$NON-NLS-1$
+    private static final String FACES_CONTEXT_IMPLICIT_OBJ          = "facesContext";                    //$NON-NLS-1$
+    private static final String HEADER_IMPLICIT_OBJ                 = "header";                          //$NON-NLS-1$
+    private static final String HEADER_VALUES_IMPLICIT_OBJ          = "headerValues";                    //$NON-NLS-1$
+    private static final String INIT_PARAM_IMPLICIT_OBJ             = "initParam";                       //$NON-NLS-1$
+    private static final String PARAM_IMPLICIT_OBJ                  = "param";                           //$NON-NLS-1$
+    private static final String PARAM_VALUES_IMPLICIT_OBJ           = "paramValues";                     //$NON-NLS-1$
+    private static final String VIEW_IMPLICIT_OBJ                   = "view";                            //$NON-NLS-1$
+
+    private static final String FACES_CONTEXT_FULLY_QUALIFIED_CLASS = "javax.faces.context.FacesContext"; //$NON-NLS-1$
+    private static final String VIEW_FULLY_QUALIFIED_CLASS          = "javax.faces.component.UIViewRoot"; //$NON-NLS-1$
+
+    private static final ISymbol SYMBOL_COOKIE_IMPLICIT_OBJ;
+    private static final ISymbol SYMBOL_HEADER_IMPLICIT_OBJ;
+    private static final ISymbol SYMBOL_HEADER_VALUES_IMPLICIT_OBJ;
+    private static final ISymbol SYMBOL_PARAM_IMPLICIT_OBJ;
+    private static final ISymbol SYMBOL_PARAM_VALUES_IMPLICIT_OBJ;
+    private static final ISymbol SYMBOL_INIT_PARAM_IMPLICIT_OBJ;
     
+    static
+    {
+        // invariant request scope variables
+        SYMBOL_COOKIE_IMPLICIT_OBJ = createUnresolvedMapSymbol(COOKIE_IMPLICIT_OBJ);
+        SYMBOL_HEADER_IMPLICIT_OBJ = createUnresolvedMapSymbol(HEADER_IMPLICIT_OBJ);
+        SYMBOL_HEADER_VALUES_IMPLICIT_OBJ = createUnresolvedMapSymbol(HEADER_VALUES_IMPLICIT_OBJ);
+        SYMBOL_PARAM_IMPLICIT_OBJ = createUnresolvedMapSymbol(PARAM_IMPLICIT_OBJ);
+        SYMBOL_PARAM_VALUES_IMPLICIT_OBJ = createUnresolvedMapSymbol(PARAM_VALUES_IMPLICIT_OBJ); 
+        
+        // invariant application scope variables
+        SYMBOL_INIT_PARAM_IMPLICIT_OBJ = createUnresolvedMapSymbol(INIT_PARAM_IMPLICIT_OBJ);
+    }
+    
+
     /**
      * Now direct instantiation -- use getInstance
      * 
      * Made protected to allow sub-classing
      */
-    protected DefaultBuiltInSymbolProvider() {/* empty; do nothing */}
-    
+    protected DefaultBuiltInSymbolProvider()
+    {/* empty; do nothing */
+    }
+
     /**
      * @param context
      * @param symbolScopeMask
      * @return all symbols for context in scopes matching symbolScopeMask
      */
-    public ISymbol[] getSymbols(IAdaptable context, int symbolScopeMask) 
+    public ISymbol[] getSymbols(final IAdaptable context,
+            final int symbolScopeMask)
     {
-        final IFile   fileContext = FileContextUtil.deriveIFileFromContext(context);
-        return (ISymbol[]) getSymbolsForScope(fileContext, symbolScopeMask).toArray(ISymbol.EMPTY_SYMBOL_ARRAY);
+        final IFile fileContext = FileContextUtil
+                .deriveIFileFromContext(context);
+        return (ISymbol[]) getSymbolsForScope(fileContext, symbolScopeMask)
+                .toArray(ISymbol.EMPTY_SYMBOL_ARRAY);
     }
 
     /**
      * @param name
      * @param context
-     * @param symbolScopeMask 
+     * @param symbolScopeMask
      * @return the symbol in context matching name or null if not found
      */
-    public ISymbol getSymbol(String name, IAdaptable context, int symbolScopeMask)
+    public ISymbol getSymbol(final String name, final IAdaptable context,
+            final int symbolScopeMask)
     {
-        return SymbolUtil.
-                    findSymbolByName(getSymbols(context, symbolScopeMask), name);
+        final IFile file = FileContextUtil.deriveIFileFromContext(context);
+
+        ISymbol symbol = null;
+        if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_REQUEST) != 0)
+        {
+            symbol = getRequestScopeSymbols(file).get(name);
+        }
+        if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_SESSION) != 0
+                && symbol == null)
+        {
+            symbol = getSessionScopeSymbols(file).get(name);
+        }
+        if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_APPLICATION) != 0
+                && symbol == null)
+        {
+            symbol = getApplicationScopeSymbols(file).get(name);
+        }
+
+        return symbol;
     }
-    
+
     /**
      * @param prefix
      * @param context
      * @param symbolScopeMask
-     * @return all implicit symbols for context starting with prefix in
-     * scopes matching symbolScopeMask
+     * @return all implicit symbols for context starting with prefix in scopes
+     *         matching symbolScopeMask
      */
-    public ISymbol[] getSymbols(String prefix, IAdaptable context, int symbolScopeMask) 
+    public ISymbol[] getSymbols(final String prefix, final IAdaptable context,
+            final int symbolScopeMask)
     {
-        return SymbolUtil.
-            filterSymbolsByPrefix(getSymbols(context, symbolScopeMask), prefix);
+        final IFile file = FileContextUtil.deriveIFileFromContext(context);
+
+        final List<ISymbol> symbols = new ArrayList<ISymbol>();
+        if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_REQUEST) != 0)
+        {
+            symbols.addAll(getRequestScopeSymbols(file).values());
+        }
+        if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_SESSION) != 0)
+        {
+            symbols.addAll(getSessionScopeSymbols(file).values());
+        }
+        if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_APPLICATION) != 0)
+        {
+            symbols.addAll(getApplicationScopeSymbols(file).values());
+        }
+        return symbols.toArray(ISymbol.EMPTY_SYMBOL_ARRAY);
     }
 
     private List getSymbolsForScope(final IFile file, final int symbolScopeMask)
     {
-        List symbols = new ArrayList();
+        final List symbols = new ArrayList();
         if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_REQUEST) != 0)
         {
-            symbols.addAll(getRequestScopeSymbols(file));
+            symbols.addAll(getRequestScopeSymbols(file).values());
         }
         if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_SESSION) != 0)
         {
-            symbols.addAll(getSessionScopeSymbols(file));
+            symbols.addAll(getSessionScopeSymbols(file).values());
         }
         if ((symbolScopeMask & ISymbolConstants.SYMBOL_SCOPE_APPLICATION) != 0)
         {
-            symbols.addAll(getApplicationScopeSymbols(file));
+            symbols.addAll(getApplicationScopeSymbols(file).values());
         }
 
         return symbols;
     }
-    
-    private List getRequestScopeSymbols(final IFile file)
-    {
-        List symbols = new ArrayList();
-        
-        symbols.add(createScopeSymbol(file, ISymbolConstants.SYMBOL_SCOPE_REQUEST, REQUEST_SCOPE));
-        symbols.add(createUnresolvedMapSymbol(COOKIE_IMPLICIT_OBJ));
-        symbols.add(createUnresolvedMapSymbol(HEADER_IMPLICIT_OBJ));
-        symbols.add(createUnresolvedMapSymbol(HEADER_VALUES_IMPLICIT_OBJ));
-        symbols.add(createUnresolvedMapSymbol(PARAM_IMPLICIT_OBJ));
-        symbols.add(createUnresolvedMapSymbol(PARAM_VALUES_IMPLICIT_OBJ));
-        // TODO: these aren't maps; need to find way to handle
-        symbols.add(createJavaInstanceSymbol(file.getProject(), FACES_CONTEXT_FULLY_QUALIFIED_CLASS, FACES_CONTEXT_IMPLICIT_OBJ));
-        symbols.add(createJavaInstanceSymbol(file.getProject(), VIEW_FULLY_QUALIFIED_CLASS, VIEW_IMPLICIT_OBJ));
 
-        return symbols;
-    }
-    
-    private List getSessionScopeSymbols(final IFile file)
+    private Map<String, ISymbol> getRequestScopeSymbols(final IFile file)
     {
-        return Collections.
-            singletonList
-                (createScopeSymbol
-                        (file, ISymbolConstants.SYMBOL_SCOPE_SESSION, SESSION_SCOPE));
+        final Map<String, ISymbol> requestSymbols = new HashMap<String, ISymbol>();
+
+        ISymbol symbol = createScopeSymbol(file,
+                ISymbolConstants.SYMBOL_SCOPE_REQUEST, REQUEST_SCOPE);
+        requestSymbols.put(symbol.getName(), symbol);
+        
+        requestSymbols.put(SYMBOL_COOKIE_IMPLICIT_OBJ.getName(), SYMBOL_COOKIE_IMPLICIT_OBJ);
+        requestSymbols.put(SYMBOL_HEADER_IMPLICIT_OBJ.getName(), SYMBOL_HEADER_IMPLICIT_OBJ);
+        requestSymbols.put(SYMBOL_HEADER_VALUES_IMPLICIT_OBJ.getName(), SYMBOL_HEADER_VALUES_IMPLICIT_OBJ);
+        requestSymbols.put(SYMBOL_PARAM_IMPLICIT_OBJ.getName(), SYMBOL_PARAM_IMPLICIT_OBJ);
+        requestSymbols.put(SYMBOL_PARAM_VALUES_IMPLICIT_OBJ.getName(), SYMBOL_PARAM_VALUES_IMPLICIT_OBJ);
+
+        // TODO: these aren't maps; need to find way to handle
+        symbol = createJavaInstanceSymbol(file.getProject(),
+                FACES_CONTEXT_FULLY_QUALIFIED_CLASS,
+                FACES_CONTEXT_IMPLICIT_OBJ);
+        requestSymbols.put(symbol.getName(), symbol);
+        
+        symbol = createJavaInstanceSymbol(file.getProject(),
+                VIEW_FULLY_QUALIFIED_CLASS, VIEW_IMPLICIT_OBJ);
+        requestSymbols.put(symbol.getName(), symbol);
+        
+        return Collections.unmodifiableMap(requestSymbols);
     }
-    
-    private List getApplicationScopeSymbols(final IFile file)
+
+    private Map<String,ISymbol> getSessionScopeSymbols(final IFile file)
     {
-        List symbols = new ArrayList();
+        ISymbol symbol = createScopeSymbol(file,
+                ISymbolConstants.SYMBOL_SCOPE_SESSION, SESSION_SCOPE);
+
+        return Collections.unmodifiableMap
+            (Collections.singletonMap(symbol.getName(), symbol));
+    }
+
+    private Map<String,ISymbol> getApplicationScopeSymbols(final IFile file)
+    {
+        final Map<String,ISymbol> symbols = new HashMap<String, ISymbol>();
 
         // TODO: may be able to resolve this one based on web.xml
-        symbols.add(createUnresolvedMapSymbol(INIT_PARAM_IMPLICIT_OBJ));
-        symbols.add(createScopeSymbol
-                        (file, ISymbolConstants.SYMBOL_SCOPE_APPLICATION, APPLICATION_SCOPE));
+        symbols.put(SYMBOL_INIT_PARAM_IMPLICIT_OBJ.getName(), SYMBOL_INIT_PARAM_IMPLICIT_OBJ);
         
-        return symbols;
+        ISymbol symbol = createScopeSymbol(file,
+                ISymbolConstants.SYMBOL_SCOPE_APPLICATION, APPLICATION_SCOPE);
+        symbols.put(symbol.getName(), symbol);
+        
+        return Collections.unmodifiableMap(symbols);
     }
-    
-    private ISymbol createScopeSymbol(final IFile file, final int scopeMask, final String name)
+
+    private ISymbol createScopeSymbol(final IFile file, final int scopeMask,
+            final String name)
     {
-        final Map  mapSource = new ScopeMap(file, 
-                scopeMask);
-        final IMapTypeDescriptor typeDesc = 
-            SymbolFactory.eINSTANCE.createIMapTypeDescriptor();
+        final Map mapSource = new ScopeMap(file, scopeMask);
+        final IMapTypeDescriptor typeDesc = SymbolFactory.eINSTANCE
+                .createIMapTypeDescriptor();
         typeDesc.setMapSource(mapSource);
-        typeDesc.setImmutable(false);  // scope maps are mutable
-        final IInstanceSymbol symbol = 
-            SymbolFactory.eINSTANCE.createIInstanceSymbol();
+        typeDesc.setImmutable(false); // scope maps are mutable
+        final IInstanceSymbol symbol = SymbolFactory.eINSTANCE
+                .createIInstanceSymbol();
         symbol.setName(name);
         symbol.setRuntimeSource(ERuntimeSource.BUILT_IN_SYMBOL_LITERAL);
         symbol.setTypeDescriptor(typeDesc);
-        // TODO:symbol.setDetailedDescription("A Map of the application scope attribute values, keyed by attribute name");
-        
+        // TODO:symbol.setDetailedDescription("A Map of the application scope
+        // attribute values, keyed by attribute name");
+
         return symbol;
     }
 
     // TODO: this one may be able to be factored up to the symbols plugin
-    private ISymbol createUnresolvedMapSymbol(final String name)
+    private static ISymbol createUnresolvedMapSymbol(final String name)
     {
-        final IMapTypeDescriptor typeDesc = 
-            SymbolFactory.eINSTANCE.createIMapTypeDescriptor();
+        final IMapTypeDescriptor typeDesc = SymbolFactory.eINSTANCE
+                .createIMapTypeDescriptor();
         typeDesc.setMapSource(Collections.EMPTY_MAP);
-        final IInstanceSymbol symbol =
-            SymbolFactory.eINSTANCE.createIInstanceSymbol();
+        final IInstanceSymbol symbol = SymbolFactory.eINSTANCE
+                .createIInstanceSymbol();
         symbol.setName(name);
         symbol.setRuntimeSource(ERuntimeSource.BUILT_IN_SYMBOL_LITERAL);
         symbol.setTypeDescriptor(typeDesc);
 
         return symbol;
     }
-    
-    private ISymbol createJavaInstanceSymbol(IProject project,
-                                             String fullyQualifiedClass,
-                                             String symbolName)
+
+    private ISymbol createJavaInstanceSymbol(final IProject project,
+            final String fullyQualifiedClass, final String symbolName)
     {
         final IJavaProject javaProject = JavaCore.create(project);
         try
         {
-            final IType type =
-                javaProject.findType(fullyQualifiedClass);
-            
+            final IType type = javaProject.findType(fullyQualifiedClass);
+
             // TODO: this is a high-bred since it consists of a java instance
             // but also has properties we can populate at designtime such as
-            // the maps.  Need to add the second part
+            // the maps. Need to add the second part
             if (type != null)
             {
-                final IJavaTypeDescriptor2 typeDesc =
-                    SymbolFactory.eINSTANCE.createIJavaTypeDescriptor2();
+                final IJavaTypeDescriptor2 typeDesc = SymbolFactory.eINSTANCE
+                        .createIJavaTypeDescriptor2();
                 typeDesc.setType(type);
-                IBeanInstanceSymbol  facesContextVar =
-                    SymbolFactory.eINSTANCE.createIBeanInstanceSymbol();
+                final IBeanInstanceSymbol facesContextVar = SymbolFactory.eINSTANCE
+                        .createIBeanInstanceSymbol();
                 facesContextVar.setTypeDescriptor(typeDesc);
                 facesContextVar.setName(symbolName);
                 return facesContextVar;
             }
         }
-        catch(JavaModelException jme)
+        catch (final JavaModelException jme)
         {
             // fall-through and fail with unresolved map
         }
-        
-        ISymbol symbol = createUnresolvedMapSymbol(symbolName);
-        ((IInstanceSymbol)symbol).getTypeDescriptor().
-                  setTypeSignatureDelegate(Signature.createTypeSignature(fullyQualifiedClass, true));
-        
+
+        final ISymbol symbol = createUnresolvedMapSymbol(symbolName);
+        ((IInstanceSymbol) symbol)
+                .getTypeDescriptor()
+                .setTypeSignatureDelegate(
+                        Signature
+                                .createTypeSignature(fullyQualifiedClass, true));
+
         return symbol;
     }
-    
+
     private static class ScopeMap extends AbstractMap
     {
-        private final IFile              _externalContextKey;
-        private final int                _scopeMask;
-        
-        ScopeMap(   IFile   externalContextKey,
-                    int scopeMask)
+        private final IFile _externalContextKey;
+        private final int   _scopeMask;
+
+        ScopeMap(final IFile externalContextKey, final int scopeMask)
         {
             _externalContextKey = externalContextKey;
             _scopeMask = scopeMask;
         }
-        
-        public Set entrySet() 
+
+        @Override
+        public Set entrySet()
         {
-            final Map  scopeMap = new HashMap(); 
-            final DesignTimeApplicationManager  manager =
-                DesignTimeApplicationManager.
-                    getInstance(_externalContextKey.getProject());
-
+            final Map scopeMap = new HashMap();
             // do beans first so in case of name collision, beans are hidden
-            final DefaultBeanSymbolSourceProvider  beanProvider = 
-                DefaultBeanSymbolSourceProvider.getInstance();
+            final DefaultBeanSymbolSourceProvider beanProvider = DefaultBeanSymbolSourceProvider
+                    .getInstance();
 
-            final ISymbol beanSymbols[] = 
-                beanProvider.getSymbols(_externalContextKey, _scopeMask);
-            
-            for (int i = 0; i < beanSymbols.length; i++)
+            final ISymbol beanSymbols[] = beanProvider.getSymbols(
+                    _externalContextKey, _scopeMask);
+
+            for (final ISymbol beanSymbol : beanSymbols)
             {
-                scopeMap.put(beanSymbols[i].getName(), beanSymbols[i]);
+                scopeMap.put(beanSymbol.getName(), beanSymbol);
             }
 
-            final IDTExternalContext  externalContext =
-                manager.getFacesContext(_externalContextKey).
-                    getDTExternalContext(_externalContextKey);
+            final DesignTimeApplicationManager manager = DesignTimeApplicationManager
+                    .getInstance(_externalContextKey.getProject());
 
-            scopeMap.putAll(externalContext.getMapForScope(_scopeMask));
-            
+            if (manager != null)
+            {
+
+                final IDTExternalContext externalContext = manager
+                        .getFacesContext(_externalContextKey)
+                        .getDTExternalContext(_externalContextKey);
+
+                scopeMap.putAll(externalContext.getMapForScope(_scopeMask));
+            }
+
             return scopeMap.entrySet();
+
         }
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/SymbolUtil.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/SymbolUtil.java
index 101310c..18a8594 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/SymbolUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/designtime/symbols/SymbolUtil.java
@@ -60,8 +60,7 @@
             }
         }
         
-        return (ISymbol[])
-            filteredSymbols.toArray(ISymbol.EMPTY_SYMBOL_ARRAY);
+        return (ISymbol[]) filteredSymbols.toArray(ISymbol.EMPTY_SYMBOL_ARRAY);
     }
     
     private SymbolUtil()
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractMetaDataEnabledFeature.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractMetaDataEnabledFeature.java
index e6f65ab..c022bd9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractMetaDataEnabledFeature.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractMetaDataEnabledFeature.java
@@ -12,7 +12,7 @@
 
 package org.eclipse.jst.jsf.metadataprocessors;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -27,17 +27,13 @@
 
 /**
  * Simple abstract class that implementers of {@link IMetaDataEnabledFeature} can subclass in the <b>TagLibDomain</b> of metadata
- * <p><b>Provisional API - subject to change</b></p>
- * @author Gerry Kessler - Oracle
- * 
- *
+ * <p><b>Provisional API - subject to change</b></p>*
  */
 public abstract class AbstractMetaDataEnabledFeature implements IMetaDataEnabledFeature{
 	
 	private MetaDataContext mdContext;
 	private IStructuredDocumentContext sdContext;
-	
-	private static final List EMPTY_LIST = new ArrayList(0);
+
 	
 	/* (non-Javadoc)
 	 * @see org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature#setMetaDataContext(org.eclipse.jst.jsf.metadataprocessors.MetaDataContext)
@@ -79,11 +75,6 @@
 	/**
 	 * Return the single expected String value for a given property.
 	 * 
-	 * Since the MetaDataContext, where the type-id was found, 
-	 * may have come from a wild card, or the property being looked up now is,
-	 * we should first look for the named property on the specific element and
-	 * only if not found, look for it on the * element.
-	 * 
 	 * @param traitName property name
 	 * @return String value
 	 */
@@ -100,11 +91,6 @@
 	/**
 	 * Return the List of values for a given property.
 	 * 
-	 * Since the MetaDataContext, where the type-id was found, 
-	 * may have come from a wild card, or the property being looked up now is,
-	 * we should first look for the named property on the specific element and
-	 * only if not found, look for it on the * element.
-	 * 
 	 * @param traitName trait name
 	 * @return List of String values
 	 */
@@ -114,12 +100,27 @@
 			return TraitValueHelper.getValueAsListOfStrings(t);
 		}
 			
-		return EMPTY_LIST;
+		return Collections.EMPTY_LIST;
 	}
 
+	/**
+	 * Return a boolean value for the given named trait .
+	 * 
+	 * @param traitName property name
+	 * @return boolean value.  Returns false if trait was not located.
+	 */
+	protected boolean getTraitValueAsBoolean(final String traitName){	
+		Trait t = getTraitForEntityUsingContext(traitName);
+		if (t != null){
+			return TraitValueHelper.getValueAsBoolean(t);
+		}
+				
+		return false;
+
+	}
 	private Trait getTraitForEntityUsingContext(final String traitName) {
 		//look for trait on given entity
-		final Entity entity = ((TaglibMetadataContext)getMetaDataContext()).getEntity();
+		final Entity entity = getMetaDataContext().getEntity();
 		return TaglibDomainMetaDataQueryHelper.getTrait(entity, traitName);
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractRootTypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractRootTypeDescriptor.java
index fed2961..00b1ed8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractRootTypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/AbstractRootTypeDescriptor.java
@@ -13,7 +13,9 @@
 package org.eclipse.jst.jsf.metadataprocessors;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.jsf.metadataprocessors.internal.IMetaDataEnabledFeatureExtension;
@@ -25,7 +27,7 @@
  * Default implementation that a metadata type should strongly consider for using as it's root.
  * This implementation allows for a class implementing {@link ITypeDescriptor} to also contain features so
  * that it is not necessary to declare the features using the MetaDataEnabledFeatures ext-pt 
- * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public abstract class AbstractRootTypeDescriptor extends AbstractMetaDataEnabledFeature
@@ -65,8 +67,8 @@
 	 * @param processingFeature
 	 * @return list of <code>IMetaDataEnabledFeature</code>s
 	 */
-	protected final List findMetaDataEnabledFeaturesForThisType(Class processingFeature) {
-		List ret = new ArrayList(3); 
+	protected final List<IMetaDataEnabledFeature> findMetaDataEnabledFeaturesForThisType(Class processingFeature) {
+		Map <String, IMetaDataEnabledFeature> mapOfFeatures = new HashMap<String, IMetaDataEnabledFeature>(); 
 		List extensions = MetaDataEnabledFeatureRegistry.getInstance()
 							.getFeatures(getTypeExtension().getTypeID());
 
@@ -74,10 +76,15 @@
 			for (int i=0;i<extensions.size();i++){
 				IMetaDataEnabledFeatureExtension aFeature = (IMetaDataEnabledFeatureExtension)extensions.get(i);
 				IMetaDataEnabledFeature feature = MetaDataEnabledFeatureAdapterFactory.getInstance().getFeatureAdapter(aFeature, processingFeature);
-				if (feature != null && processingFeature.isInstance(feature)){
-					ret.add(feature);				
+				if (feature != null && processingFeature.isInstance(feature)
+						&& ! mapOfFeatures.containsKey(aFeature.getClassName())){
+					mapOfFeatures.put(aFeature.getClassName(),feature);				
 				}
 			}
+		} 
+		List<IMetaDataEnabledFeature> ret = new ArrayList<IMetaDataEnabledFeature>(mapOfFeatures.size());
+		for (IMetaDataEnabledFeature feature: mapOfFeatures.values()){
+			ret.add(feature);
 		}
 		return ret;
 	}	
@@ -89,13 +96,13 @@
 		return type;
 	}
 
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jst.jsf.metadataprocessors.ITypeDescriptor#setRuntimeType(org.eclipse.jst.jsf.metadataprocessors.internal.AbstractMetaDataEnabledType)
 	 */
 	public void setTypeExtension(IType type) {
 		this.type = type;
 	}
-
 	
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/DefaultTypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/DefaultTypeDescriptor.java
index da14c33..49b5ad9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/DefaultTypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/DefaultTypeDescriptor.java
@@ -15,8 +15,8 @@
 
 /**
  * Type descriptor that is created if no class if provided for the implementation 
- * in the AttributeValueRuntimeTypes extension point
- * 
+ * in the AttributeValueRuntimeTypes extension point.
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/IMetaDataEnabledFeature.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/IMetaDataEnabledFeature.java
index b6c6227..f25054d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/IMetaDataEnabledFeature.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/IMetaDataEnabledFeature.java
@@ -17,7 +17,7 @@
 /**
  * Required interface used by the MetaData feature processing framework.
  * All features must extend this interface.
- * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/IType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/IType.java
index 2a21294..7466b57 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/IType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/IType.java
@@ -16,7 +16,7 @@
 /**
  * Interface representing the information contained by the type registries.
  * Encapsulates the IConfigurationElement information.
- * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  *
  */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/ITypeDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/ITypeDescriptor.java
index 32daae1..0031ebb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/ITypeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/ITypeDescriptor.java
@@ -15,10 +15,10 @@
 import java.util.List;
 
 /**
- * Interface describing the runtime type of a metadata enabled annotation.   
+ * Interface describing the runtime type of a metadata enabled annotation. 
  * The type descriptor will load the feature adapters for a certain kind of 
- * feature that it supports.  The type descriptor registered by an extension point.
- * 
+ * feature that it supports.  The type descriptor is registered by an extension point.
+ * <p><b>Provisional API - subject to change</b></p>
  * @see IMetaDataEnabledFeature
  * @see AbstractRootTypeDescriptor
  * @see org.eclipse.jst.jsf.metadataprocessors.internal.AbstractMetaDataEnabledTypeFactory
@@ -44,6 +44,6 @@
 	 * @return List of <code>IMetaDataEnabledFeature</code>s that support the
 	 * specified processingFeature interface.  
 	 */
-	public List getFeatureAdapters(Class processingFeature);
+	public List<IMetaDataEnabledFeature> getFeatureAdapters(Class processingFeature);
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/MetaDataContext.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/MetaDataContext.java
index 3c2f6c1..5876340 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/MetaDataContext.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/MetaDataContext.java
@@ -17,9 +17,8 @@
 
 
 /**
- * The current metadata model context being used for processing. 
- * 
- * @author Gerry Kessler - Oracle
+ * The current meta data model context being used for processing. 
+ * <p><b>Provisional API - subject to change</b></p>
  *
  */
 public class MetaDataContext {
@@ -37,7 +36,7 @@
 	}
 	
 	/**
-	 * @return Entiry
+	 * @return Entity
 	 */
 	public Entity getEntity(){
 		return entity;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/MetaDataEnabledProcessingFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/MetaDataEnabledProcessingFactory.java
index fca3105..b730089 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/MetaDataEnabledProcessingFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/MetaDataEnabledProcessingFactory.java
@@ -13,9 +13,11 @@
 package org.eclipse.jst.jsf.metadataprocessors;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.jst.jsf.common.dom.AttributeIdentifier;
 import org.eclipse.jst.jsf.common.metadata.Entity;
 import org.eclipse.jst.jsf.common.metadata.Trait;
 import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper;
@@ -26,91 +28,150 @@
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
 import org.eclipse.jst.jsf.metadataprocessors.internal.AttributeValueRuntimeTypeFactory;
 
-
 /**
- * Singleton class that will produce <code>IMetaDataEnabledFeature</code>s that the
- * caller can use for processing.
- * <p><b>Provisional API - subject to change</b></p>
+ * Singleton class that will produce <code>IMetaDataEnabledFeature</code>s
+ * that the caller can use for processing.
+ * <p>
+ * <b>Provisional API - subject to change</b>
+ * </p>
+ * 
  * @author Gerry Kessler - Oracle
- *
+ * 
  */
 public final class MetaDataEnabledProcessingFactory {
 	private static MetaDataEnabledProcessingFactory INSTANCE;
-	
+
 	/**
-	 * Name of property in annotation file to use when applying a runtime type to an attribute value 
+	 * Name of property in annotation file to use when applying a runtime type
+	 * to an attribute value
 	 */
 	public static final String ATTRIBUTE_VALUE_RUNTIME_TYPE_PROP_NAME = "attribute-value-runtime-type";
-	
+
 	/**
 	 * @return singleton instance
 	 */
-	public static MetaDataEnabledProcessingFactory getInstance(){
-		if (INSTANCE == null){
-			INSTANCE = new MetaDataEnabledProcessingFactory();	
+	public static MetaDataEnabledProcessingFactory getInstance() {
+		if (INSTANCE == null) {
+			INSTANCE = new MetaDataEnabledProcessingFactory();
 		}
 		return INSTANCE;
 	}
-	
-	private MetaDataEnabledProcessingFactory(){
+
+	private MetaDataEnabledProcessingFactory() {
 		super();
 	}
-	
+
 	/**
-	 * Returns list of <code>IMetaDataEnabledFeature</code> adapters for the given Taglibrary attribute.  
+	 * Returns list of <code>IMetaDataEnabledFeature</code> adapters for the
+	 * given Taglibrary attribute.
 	 * 
-	 * Adapters will be scanned for first by uri, element, attribute and if not found,
-	 * 	uri, "*", attribute and if still not found by "*", "*", attribute.
-	 * @param featureType feature type.  eg. <code>IPossibleValues</code>, <code>IValidValues</code>, etc.  Must be subclass of IMetaDataEnabledFeature. 
-	 * @param sdContext 
-	 * @param uri annotation file uri
+	 * Adapters will be scanned for first by uri, element, attribute and if not
+	 * found, uri, "*", attribute and if still not found by "*", "*", attribute.
+	 * 
+	 * @param featureType
+	 *            feature type. eg. <code>IPossibleValues</code>,
+	 *            <code>IValidValues</code>, etc. Must be subclass of
+	 *            IMetaDataEnabledFeature.
+	 * @param sdContext
+	 * @param uri
+	 *            annotation file uri
 	 * @param elementName
 	 * @param attributeName
-	 * @return	returns null - if the metadata was not found 
-	 * 			<br>returns empty list - if not a <code>IMetaDataEnabledFeature</code> proccessor or is not valid or does not support the specified feature
+	 * @return returns null - if the metadata was not found <br>
+	 *         returns empty list - if not a
+	 *         <code>IMetaDataEnabledFeature</code> processor or is not valid
+	 *         or does not support the specified feature
 	 * 
 	 * @see MetaDataEnabledProcessingFactory#ATTRIBUTE_VALUE_RUNTIME_TYPE_PROP_NAME
 	 */
-	public List getAttributeValueRuntimeTypeFeatureProcessors(Class featureType, IStructuredDocumentContext sdContext, String uri, String elementName, String attributeName){
-		List retList = new ArrayList(2);		
-		//look up the attribute's runtime type from MD
-		IProject _project = null; 
-		if (sdContext !=null){
-			IWorkspaceContextResolver resolver = IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(sdContext);
-			_project = resolver != null ? resolver.getProject() : null; 
+	public List<IMetaDataEnabledFeature> getAttributeValueRuntimeTypeFeatureProcessors(
+			Class featureType, IStructuredDocumentContext sdContext,
+			String uri, String elementName, String attributeName) {
+		
+		// look up the attribute's runtime type from MD
+		IProject _project = null;
+		if (sdContext != null) {
+			IWorkspaceContextResolver resolver = IStructuredDocumentContextResolverFactory.INSTANCE
+					.getWorkspaceContextResolver(sdContext);
+			_project = resolver != null ? resolver.getProject() : null;
 		}
 		String _elem = elementName + "/" + attributeName;
 		String _uri = uri;
-		ITaglibDomainMetaDataModelContext modelContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(_project, _uri);
-		Entity entity = TaglibDomainMetaDataQueryHelper.getEntity(modelContext, _elem);
-		Trait trait = null;
-		if (entity != null){
-			trait = TaglibDomainMetaDataQueryHelper.getTrait(entity, ATTRIBUTE_VALUE_RUNTIME_TYPE_PROP_NAME);
+		ITaglibDomainMetaDataModelContext modelContext = TaglibDomainMetaDataQueryHelper
+				.createMetaDataModelContext(_project, _uri);
+		Entity attrEntity = TaglibDomainMetaDataQueryHelper.getEntity(modelContext,
+				_elem);
+
+		if (attrEntity != null) 
+			return getAttributeValueRuntimeTypeFeatureProcessors(featureType, sdContext, attrEntity);
+		
+		return Collections.EMPTY_LIST;
+
+	}
+
+	/**
+	 * A convience method fully equivalent to:
+	 * 
+	 *     getAttributeValueRuntimeTypeFeatureProcessors
+     *      (featureType, sdContext, attributeId.getTagIdentifier().getUri()
+     *           , attributeId.getTagIdentifier().getTagName(), 
+     *           attributeId.getName())
+	 * @param featureType
+	 * @param sdContext
+	 * @param attributeId
+	 * @return the meta-data enabled feature
+	 */
+	public List<IMetaDataEnabledFeature> getAttributeValueRuntimeTypeFeatureProcessors(
+            Class featureType, IStructuredDocumentContext sdContext,
+            AttributeIdentifier attributeId)
+    {
+	    return getAttributeValueRuntimeTypeFeatureProcessors
+	    (featureType, sdContext, attributeId.getTagIdentifier().getUri()
+	            , attributeId.getTagIdentifier().getTagName(), 
+	            attributeId.getName());
+    }
+	
+	/**
+	 * @param featureType
+	 * @param sdContext
+	 * @param attrEntity
+	 * @return returns null - if the meta data was not found <br>
+	 *         returns empty list - if not a
+	 *         <code>IMetaDataEnabledFeature</code> processor or is not valid
+	 *         or does not support the specified feature
+	 */
+	public List<IMetaDataEnabledFeature> getAttributeValueRuntimeTypeFeatureProcessors(
+			Class featureType, IStructuredDocumentContext sdContext,
+			Entity attrEntity) {
+
+		Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(attrEntity,
+				ATTRIBUTE_VALUE_RUNTIME_TYPE_PROP_NAME);
+
+		if (trait == null) {
+			return Collections.EMPTY_LIST;
 		}
 		
-		if (trait==null){
-			return retList;
-		}
-		
+		List<IMetaDataEnabledFeature> retList = new ArrayList<IMetaDataEnabledFeature>(2);
 		String typeId = TraitValueHelper.getValueAsString(trait);
-		
-		//get the implementing class for the type
-		ITypeDescriptor type = AttributeValueRuntimeTypeFactory.getInstance().getType(typeId);
-		if (type != null){
-			TaglibMetadataContext context = new TaglibMetadataContext(uri, elementName, attributeName, entity, trait);
-			//get all the feature adapters (IMetaDataEnabledFeature) for this type
-			List aList = type.getFeatureAdapters(featureType);
-			for (int j=0;j<aList.size();j++){
-				//set the context in the feature
-				((IMetaDataEnabledFeature)aList.get(j)).setMetaDataContext(context);
-				((IMetaDataEnabledFeature)aList.get(j)).setStructuredDocumentContext(sdContext);
-				retList.add(aList.get(j));
+
+		// get the implementing class for the type
+		ITypeDescriptor type = AttributeValueRuntimeTypeFactory.getInstance()
+				.getType(typeId);
+		if (type != null) {
+			MetaDataContext context = new MetaDataContext(attrEntity, trait);
+			// get all the feature adapters (IMetaDataEnabledFeature) for this
+			// type
+			List<IMetaDataEnabledFeature> featureAdapters = type.getFeatureAdapters(featureType);
+			for (int j = 0; j < featureAdapters.size(); j++) {
+				// set the context in the feature
+				featureAdapters.get(j).setMetaDataContext(context);
+				featureAdapters.get(j).setStructuredDocumentContext(sdContext);
+				retList.add(featureAdapters.get(j));
 			}
 
 		}
-		//return list of IMetaDataEnabledFeatures for this type
-		return retList;
-
+		// return list of IMetaDataEnabledFeatures for this type
+		return Collections.unmodifiableList(retList);
 	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/TaglibMetadataContext.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/TaglibMetadataContext.java
index 6da40af..71809e8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/TaglibMetadataContext.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/TaglibMetadataContext.java
@@ -10,11 +10,14 @@
  *******************************************************************************/
 package org.eclipse.jst.jsf.metadataprocessors;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.jsf.common.metadata.Entity;
 import org.eclipse.jst.jsf.common.metadata.Trait;
 
 /**
  * Binds tag library context to the metadata context 
+ * <p><b>Provisional API - subject to change</b></p>
+ * @deprecated - should not have been public, and no reason anyone should be using this class
  */
 public class TaglibMetadataContext extends MetaDataContext {
 
@@ -37,6 +40,24 @@
 		this.tagName = tagName;
 		this.attributeName = attributeName;
 	}
+	
+	/**
+	 * Package-private Constructor
+	 * 
+	 * @param tagAttrEntity - must be tag attribute entity and not null
+	 * @param trait
+	 */
+	/*package*/ TaglibMetadataContext(Entity tagAttrEntity, Trait trait){
+		super(tagAttrEntity, trait);
+		Assert.isNotNull(tagAttrEntity);
+		this.uri = tagAttrEntity.getModel().getCurrentModelContext().getUri();
+		if (!(tagAttrEntity.eContainer() instanceof Entity))
+		{
+		    throw new IllegalArgumentException("tagAttrEntity must be contained in a tag Entity to use this constructor");
+		}
+		this.tagName = ((Entity)tagAttrEntity.eContainer()).getId();
+		this.attributeName = tagAttrEntity.getId();
+	}
 
 	/**
 	 * @return URI
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ELIsNotValidException.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ELIsNotValidException.java
index 7782fd6..f1b5b16 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ELIsNotValidException.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ELIsNotValidException.java
@@ -14,6 +14,8 @@
 
 /**
  * Exception
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public class ELIsNotValidException extends Exception {
 	private static final long serialVersionUID = 1L;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ICreateValues.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ICreateValues.java
index 4721569..6c25a65 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ICreateValues.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ICreateValues.java
@@ -18,6 +18,7 @@
  * @author Gerry Kessler - Oracle
  * 
  * Experimental - not currently used
+ * <p><b>Provisional API - subject to change</b></p>
  *
  */
 public interface ICreateValues extends IMetaDataEnabledFeature{
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IDefaultValue.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IDefaultValue.java
index 46d7533..93d93b8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IDefaultValue.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IDefaultValue.java
@@ -19,7 +19,7 @@
  * 
  * @author Gerry Kessler - Oracle
  * 
- * Experimental
+ * <p><b>Provisional API - subject to change</b></p>
  *
  */
 public interface IDefaultValue extends IMetaDataEnabledFeature {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IPossibleValue.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IPossibleValue.java
index 9d951aa..d4cdbf9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IPossibleValue.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IPossibleValue.java
@@ -17,6 +17,8 @@
 /**
  * Interface for providing lists of possible values
  * Values can be different than displayed values.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  *
  */
 public interface IPossibleValue {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IPossibleValues.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IPossibleValues.java
index b9a7781..4d43d87 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IPossibleValues.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IPossibleValues.java
@@ -18,10 +18,9 @@
 
 /**
  * Interface for providing possible values.
- *  
- * @author Gerry Kessler - Oracle
  * 
- * Experimental
+ * <p><b>Provisional API - subject to change</b></p>
+ * @author Gerry Kessler - Oracle
  *
  */
 public interface IPossibleValues extends IMetaDataEnabledFeature{
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidELValues.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidELValues.java
index ed570d8..ca0b8f6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidELValues.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidELValues.java
@@ -17,7 +17,8 @@
 
 /**
  * An {@link IMetaDataEnabledFeature} for semantic validation of EL Values 
- * Experimental and subject to change
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public interface IValidELValues extends IMetaDataEnabledFeature {
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidValues.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidValues.java
index cecf379..25baa40 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidValues.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidValues.java
@@ -18,7 +18,8 @@
 
 /**
  * An {@link IMetaDataEnabledFeature} for validating values using metadata
- *
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public interface IValidValues extends IMetaDataEnabledFeature{
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidationMessage.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidationMessage.java
index e864ddc..4f29c78 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidationMessage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/IValidationMessage.java
@@ -14,6 +14,8 @@
 
 /**
  * Interface for validation messages for metadata features
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public interface IValidationMessage {
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/PossibleValue.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/PossibleValue.java
index 6b91557..dbbde06 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/PossibleValue.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/PossibleValue.java
@@ -17,6 +17,8 @@
 
 /**
  * Implements {@link IPossibleValues}
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  *
  */
 public class PossibleValue implements IPossibleValue {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ValidationMessage.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ValidationMessage.java
index 72c3863..5aaf29e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ValidationMessage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/ValidationMessage.java
@@ -16,7 +16,8 @@
 
 /**
  * Metadata Validation Message implementation 
- *
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public class ValidationMessage implements IValidationMessage {
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/package-info.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/package-info.java
new file mode 100644
index 0000000..5922fbf
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/features/package-info.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Gerry Kessler/Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+
+/**
+ * This package is used to provide tooling services for tag attribute values
+ * based on the org.eclipse.jst.jsf.core.AttributeValueRuntimeTypes. 
+ * 
+ * New features can added to the system using the org.eclipse.jst.jsf.core.MetaDataEnabledFeatures 
+ * extension-point.  This extension point provides the binding of a AttributeValueRuntimeTypes to a feature
+ * so that new behaviors can be added to existing types. 
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ */
+package org.eclipse.jst.jsf.metadataprocessors.features;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/AbstractMetaDataEnabledTypeFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/AbstractMetaDataEnabledTypeFactory.java
index b03b522..6e2d1f4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/AbstractMetaDataEnabledTypeFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/AbstractMetaDataEnabledTypeFactory.java
@@ -50,7 +50,7 @@
 	
 	/**
 	 * @param type 
-	 * @return list of instances identified by the type id
+	 * @return instance of ITypeDescriptor identified by the type id
 	 */
 	public ITypeDescriptor getType(AbstractMetaDataEnabledType type){ 
 		
@@ -59,6 +59,15 @@
 	}
 
 	/**
+	 * @param type 
+	 * @return class identified by the type id
+	 */
+	public Class getClassForType(IType type){ 
+		return createTypeClass(type);
+
+	}
+	
+	/**
 	 * Creates instances of <code>ITypeDescriptor</code>s from 
 	 * <code>AbstractMetaDataEnabledType</code>s
 	 * 
@@ -67,7 +76,7 @@
 	 */
 	protected ITypeDescriptor createType(IType atype){
 		if (atype != null){
-			ITypeDescriptor desc = createDescriptor(atype);
+			ITypeDescriptor desc = createDescriptorInstance(atype);
 			if (desc != null){
 				desc.setTypeExtension(atype);
 				return desc;
@@ -77,7 +86,7 @@
 	}
 
 	
-	private ITypeDescriptor createDescriptor(IType type){
+	private Class createTypeClass(IType type){
 		String className = type.getClassName();
 		try {
 			Bundle bundle =Platform.getBundle(type.getBundleID());
@@ -90,12 +99,23 @@
 				//make sure the class can support the feature/extended interface
 				if (ITypeDescriptor.class.isAssignableFrom(klass))
                 {
-					return (ITypeDescriptor)klass.newInstance();
+					return klass;
                 }
                 JSFCorePlugin.log(IStatus.INFO, className + " was not found in " + type.getBundleID() +" for " + type.getTypeID());
 			}
 		} catch (ClassNotFoundException e) {
 			JSFCorePlugin.log(IStatus.ERROR, className + " was not found in " + type.getBundleID() +" for " + type.getTypeID());
+		}
+		return null;
+	}
+	
+	private ITypeDescriptor createDescriptorInstance(IType type){
+		String className = type.getClassName();
+		try {
+			Class klass = createTypeClass(type);
+			if (klass != null){
+				return (ITypeDescriptor)klass.newInstance();
+ 			}
 		} catch (InstantiationException e) {
 			JSFCorePlugin.log(IStatus.ERROR, "InstantiationException: " + className + " in " + type.getBundleID() +" for " + type.getTypeID());
 		} catch (IllegalAccessException e) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/MetaDataEnabledFeatureAdapterFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/MetaDataEnabledFeatureAdapterFactory.java
index e821ec1..9cb0303 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/MetaDataEnabledFeatureAdapterFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/MetaDataEnabledFeatureAdapterFactory.java
@@ -12,10 +12,15 @@
 
 package org.eclipse.jst.jsf.metadataprocessors.internal;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
 import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.IType;
+import org.eclipse.jst.jsf.metadataprocessors.ITypeDescriptor;
 import org.osgi.framework.Bundle;
 
 /**
@@ -27,7 +32,7 @@
  */
 public final class MetaDataEnabledFeatureAdapterFactory {
 	private static MetaDataEnabledFeatureAdapterFactory INSTANCE;
-	
+	private Map<String, Class> typesCache;
 	/**
 	 * @return singleton instance
 	 */
@@ -40,8 +45,10 @@
 	
 	private MetaDataEnabledFeatureAdapterFactory(){
 		super();
+		typesCache = new HashMap<String, Class>();
 	}
 	
+
 	/**
 	 * Given the feature extension, create and return the {@link IMetaDataEnabledFeature} for a given processing feature
 	 * @param feature
@@ -55,25 +62,89 @@
 		return null;
 	}
 
+	/**
+	 * Given the feature extension, create and return the {@link IMetaDataEnabledFeature} for a given processing feature if
+	 * that the type that the feature is bound to is a subclass of the the type
+	 * @param feature
+	 * @param processingFeature class
+	 * @param type
+	 * @return IMetaDataEnabledFeature.  <br>Will return null if the type that the feature extension is bound to, 
+	 * is not a subclass of the supplied type
+	 */
+	public IMetaDataEnabledFeature getFeatureAdapterForSubclass(IMetaDataEnabledFeatureExtension feature, Class processingFeature, IType type){ 
+		if (feature != null ){
+			ITypeDescriptor aType = AttributeValueRuntimeTypeFactory.getInstance().getType(feature.getTypeID());
+			Class klass = aType.getTypeExtension().getClass();
+			if (klass.asSubclass(type.getClass()) != null)
+				return createFeature(feature, processingFeature);			
+		}
+		return null;
+	}
+	
+//	private Class getOrCreateTypeClassFor(IMetaDataEnabledFeatureExtension featureExt){
+//		Class klass = null;
+//		String className;
+//		ITypeDescriptor type = AttributeValueRuntimeTypeFactory.getInstance().getType(featureExt.getTypeID());
+//		try {
+//			if (! typesCache.containsKey(featureExt.getTypeID())){
+//				Bundle bundle =Platform.getBundle(featureExt.getBundleID());
+//				if (bundle == null){
+//					JSFCorePlugin.log(IStatus.ERROR, featureExt.getBundleID() + " could not be created to load " + className);
+//					return null;
+//				}
+//				klass = bundle.loadClass(className);
+//				if (klass != null){
+//					typesCache.put(featureExt.getTypeID(), klass);
+//				}
+//			}
+//			else 
+//				klass = typesCache.get(featureExt.getTypeID());
+//			
+//			return klass;
+//			if (!IMetaDataEnabledFeature.class.isAssignableFrom(klass)){
+//				JSFCorePlugin.log(IStatus.INFO, className + " is not a IMetaDataEnabledFeature. " + featureExt.getBundleID() +" : " + featureExt.getTypeID());
+//			} 
+//			else if (klass != null && processingFeature.isAssignableFrom(klass)){
+//				IMetaDataEnabledFeature obj = (IMetaDataEnabledFeature)klass.newInstance();
+//				return obj;
+//			}
+//						
+//		} catch (ClassNotFoundException e) {
+//			JSFCorePlugin.log(IStatus.ERROR, className + " was not found in " + featureExt.getBundleID() +" for " + featureExt.getTypeID());
+//		} catch (InstantiationException e) {
+//			JSFCorePlugin.log(IStatus.ERROR, "InstantiationException: " + className + " in " + featureExt.getBundleID() +" for " + featureExt.getTypeID());
+//		} catch (IllegalAccessException e) {
+//			JSFCorePlugin.log(IStatus.ERROR,  "IllegalAccessException: " + className + " in " + featureExt.getBundleID() +" for " + featureExt.getTypeID());
+//		}
+//		return null;
+//	}
+	
 	private IMetaDataEnabledFeature createFeature(IMetaDataEnabledFeatureExtension featureExt, Class processingFeature){
 		String className = featureExt.getClassName();
+		Class klass = null;
 		try {
-			Bundle bundle =Platform.getBundle(featureExt.getBundleID());
-			if (bundle == null){
-				JSFCorePlugin.log(IStatus.ERROR, featureExt.getBundleID() + " could not be created to load " + className);
-				return null;
-			}
-			Class klass = bundle.loadClass(className);
-			if (klass != null){
-				if (!IMetaDataEnabledFeature.class.isAssignableFrom(klass)){
-					JSFCorePlugin.log(IStatus.INFO, className + " is not a IMetaDataEnabledFeature. " + featureExt.getBundleID() +" : " + featureExt.getTypeID());
-				} 
-				else if (processingFeature.isAssignableFrom(klass)){
-					IMetaDataEnabledFeature obj = (IMetaDataEnabledFeature)klass.newInstance();
-//					obj.setBundleID(featureExt.getBundleID());
-					return obj;
+			if (! typesCache.containsKey(featureExt.getTypeID())){
+				Bundle bundle =Platform.getBundle(featureExt.getBundleID());
+				if (bundle == null){
+					JSFCorePlugin.log(IStatus.ERROR, featureExt.getBundleID() + " could not be created to load " + className);
+					return null;
+				}
+				klass = bundle.loadClass(className);
+				if (klass != null){
+					typesCache.put(featureExt.getTypeID(), klass);
 				}
 			}
+			else 
+				klass = typesCache.get(featureExt.getTypeID());
+			
+			if (!IMetaDataEnabledFeature.class.isAssignableFrom(klass)){
+				JSFCorePlugin.log(IStatus.INFO, className + " is not a IMetaDataEnabledFeature. " + featureExt.getBundleID() +" : " + featureExt.getTypeID());
+			} 
+			else if (klass != null && processingFeature.isAssignableFrom(klass)){
+				IMetaDataEnabledFeature obj = (IMetaDataEnabledFeature)klass.newInstance();
+				return obj;
+			}
+						
 		} catch (ClassNotFoundException e) {
 			JSFCorePlugin.log(IStatus.ERROR, className + " was not found in " + featureExt.getBundleID() +" for " + featureExt.getTypeID());
 		} catch (InstantiationException e) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/MetaDataEnabledFeatureRegistry.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/MetaDataEnabledFeatureRegistry.java
index 47bb44b..17b5a41 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/MetaDataEnabledFeatureRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/internal/MetaDataEnabledFeatureRegistry.java
@@ -14,6 +14,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -22,21 +23,19 @@
 import org.eclipse.core.runtime.InvalidRegistryObjectException;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.metadataprocessors.IType;
 
 /**
  * Registry of <code>AbstractMetaDataEnabledType</code>s loaded from 
  * the <code>MetaDataEnabledFeatures</code> extension point
  * 
  * A map of features keyed by type id
- * 
- * @author Gerry Kessler - Oracle
  *
  */
 public class MetaDataEnabledFeatureRegistry{
 	private static final String EXTPTID = "MetaDataEnabledFeatures";
-	private Map featuresMap;
-	private List EMPTY_LIST = new ArrayList(0);
-	
+	private Map<String, List<IMetaDataEnabledFeatureExtension>> featuresMap;
+	private Map<String, Class> typeCacheMap;
 	private static MetaDataEnabledFeatureRegistry INSTANCE;
 	
 	/**
@@ -50,7 +49,8 @@
 	}
 	
 	private MetaDataEnabledFeatureRegistry(){
-		featuresMap = new HashMap();
+		featuresMap = new HashMap<String, List<IMetaDataEnabledFeatureExtension>>();
+		typeCacheMap = new HashMap<String, Class>();
 		readRegistry();		
 	}
 	
@@ -83,27 +83,95 @@
 	 */
 	protected void registerFeature(String bundleID, String typeId, String klass){
 		IMetaDataEnabledFeatureExtension aFeature = new MetaDataEnabledFeatureExtension(bundleID, typeId, klass);
-		if (!featuresMap.containsKey(typeId)){
-			List list = new ArrayList();
-			list.add(aFeature);
-			featuresMap.put(typeId, list);
+		if (canCreateTypeForFeatureExtension(aFeature)){
+			if (!featuresMap.containsKey(typeId)){
+				List list = new ArrayList();
+				list.add(aFeature);
+				featuresMap.put(typeId, list);
+			}
+			else {
+				List list = featuresMap.get(typeId);
+				list.add(aFeature);
+			}
 		}
-		else {
-			List list = (List)featuresMap.get(typeId);
-			list.add(aFeature);
+	}
+
+
+	private boolean canCreateTypeForFeatureExtension(IMetaDataEnabledFeatureExtension feature) {
+		if (! typeCacheMap.containsKey(feature.getTypeID())){
+			IType type = AttributeValueRuntimeTypeRegistry.getInstance().getType(feature.getTypeID());
+			if (type != null){
+				Class typeClass = AttributeValueRuntimeTypeFactory.getInstance().getClassForType(type);
+				typeCacheMap.put(feature.getTypeID(), typeClass);
+			}
+			else
+				return false;
 		}
+		return typeCacheMap.get(feature.getTypeID()) != null;
 	}
 
 	/**
 	 * @param typeId
 	 * @return List of <code>AbstractMetaDataEnabledRuntimeTypeExtensions</code>
 	 * for a given by type id
+	 * 
+	 * TODO: make more efficient... no need to keep calculating features for subtypes. 
 	 */
-	public List getFeatures(String typeId) {
-		if (featuresMap.containsKey(typeId))
-        {
-			return (List)featuresMap.get(typeId);			
-        }
-		return EMPTY_LIST;
+	public List<IMetaDataEnabledFeatureExtension> getFeatures(String typeId) {
+		
+		if (!featuresMap.containsKey(typeId))
+			featuresMap.put(typeId,new ArrayList());
+		
+		//copy current featuresMapped to typeId into return list
+		List<IMetaDataEnabledFeatureExtension> srcList = featuresMap.get(typeId);
+		List<IMetaDataEnabledFeatureExtension> ret = new ArrayList<IMetaDataEnabledFeatureExtension>(srcList.size());
+		copy(ret, srcList);	
+		
+		List subs = getFeatureExtensionsForMatchingSubclass(typeId);
+		for (Iterator<IMetaDataEnabledFeatureExtension> it=subs.iterator();it.hasNext();){
+			IMetaDataEnabledFeatureExtension featureExt = it.next();
+			if (!ret.contains(featureExt))
+				ret.add(featureExt);
+		}
+		return ret;
+		
 	}
+	
+	private void copy(List<IMetaDataEnabledFeatureExtension> destList,
+			List<IMetaDataEnabledFeatureExtension> srcList) {
+		for (Iterator<IMetaDataEnabledFeatureExtension> it=srcList.iterator();it.hasNext();){
+			destList.add(it.next());
+		}
+	}
+
+	/**
+	 * If the feature adapter is mapped to a type which is a superclass of the type of interest, then the feature adapter is an extension of that type
+	 * @param typeId
+	 * @return list of IMetaDataEnabledFeatureExtension
+	 */
+	private List<IMetaDataEnabledFeatureExtension> getFeatureExtensionsForMatchingSubclass(String typeId) {	
+		IType type = AttributeValueRuntimeTypeRegistry.getInstance().getType(typeId);
+		Class typeClass = AttributeValueRuntimeTypeFactory.getInstance().getClassForType(type);
+
+		List<IMetaDataEnabledFeatureExtension> ret = new ArrayList<IMetaDataEnabledFeatureExtension>();
+		// loop thru all of the type classes mapped to feature adapters that are subclasses of the type
+		for (Iterator it=typeCacheMap.keySet().iterator();it.hasNext();){
+			String featureTypeId = (String)it.next();
+			Class featureTypeClass = typeCacheMap.get(featureTypeId);
+			try {
+//				if (featureTypeClass.equals(typeClass)){
+//					ret.add(featureTypeClass);
+//				}
+//				else 
+					if (typeClass.asSubclass(featureTypeClass) != null)	{	
+					ret.addAll(featuresMap.get(featureTypeId));
+				}						
+			} catch (ClassCastException e) {//
+			}
+			
+		}
+		return ret;
+	}
+	
+
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/package-info.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/package-info.java
new file mode 100644
index 0000000..f791e43
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/metadataprocessors/package-info.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Gerry Kessler/Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+
+/**
+ * This package is used to provide tooling support for taglibraries using the Design-time Metadata
+ * feature (org.eclipse.jst.jsf.common.metadata).<p>
+ * The MetaDataEnabledProcessingFactory singleton instance is the entry point.   The tool requests
+ * the IMetaDataEnabled feature for a particular tag attribute, and through metadata, will locate the 
+ * "metadata processing" feature using the attribute value runtime type system.
+ * <p><b>Provisional API - subject to change</b></p>
+ */
+package org.eclipse.jst.jsf.metadataprocessors;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ActionType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ActionType.java
index a276e17..d072810 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ActionType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ActionType.java
@@ -37,6 +37,8 @@
 
 /**
  * Meta-data processing type representing an "action" attribute
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public class ActionType extends MethodBindingType implements IPossibleValues{
@@ -52,23 +54,48 @@
 	 * @see org.eclipse.jst.jsf.taglibprocessing.attributevalues.MethodBindingType#isValidValue(java.lang.String)
 	 */
 	public boolean isValidValue(String value){
-		if (value != null && value.length() > 0)	
-			return true;
-		// what other coercion rules apply???
+		if (value == null || (value != null && value.length() == 0)) {
+			IValidationMessage msg = new ValidationMessage(Messages.ActionType_invalid_empty_value);
+			getValidationMessages().add(msg);
+			return false;
+		}
+		//any other value should be one of the possible values
+		//optimize
+		IWorkspaceContextResolver wr = IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(getStructuredDocumentContext());
+		if (wr == null)
+			return true;//shouldn't get here
 		
+		//in case that this is not JSF faceted or missing configs, need to pass
+		if (JSFAppConfigManager.getInstance(wr.getProject()) == null) 
+			return true;
+			
+		IFile jsp = (IFile)wr.getResource();
+		List rules = JSFAppConfigManager.getInstance(wr.getProject()).getNavigationRulesForPage(jsp);
+		for(Iterator it=rules.iterator();it.hasNext();){
+			NavigationRuleType rule = (NavigationRuleType)it.next();
+			for (Iterator cases=rule.getNavigationCase().iterator();cases.hasNext();){				
+				NavigationCaseType navCase = (NavigationCaseType)cases.next();					
+				if (navCase.getFromOutcome() != null && 
+						value.equals(navCase.getFromOutcome().getTextContent().trim()))
+					return true;				
+			}
+		}
 		IValidationMessage msg = new ValidationMessage(Messages.ActionType_invalid_value);
 		getValidationMessages().add(msg);
 		return false;
+		
 	}
 	
 	/* (non-Javadoc)
 	 * @see org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues#getPossibleValues()
 	 */
 	public List getPossibleValues() {
-		// TODO getNavigationRules for this page from JSFAppMgr
 		List ret = new ArrayList();
+		if (getStructuredDocumentContext() == null)
+			return ret;
+		
 		IWorkspaceContextResolver wr = IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(getStructuredDocumentContext());
-		if (wr != null){
+		if (wr != null && JSFAppConfigManager.getInstance(wr.getProject()) != null) {//may not be JSF faceted project or know faces-config){			
 			IFile jsp = (IFile)wr.getResource();
 			List rules = JSFAppConfigManager.getInstance(wr.getProject()).getNavigationRulesForPage(jsp);
 			for(Iterator it=rules.iterator();it.hasNext();){
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/BindingType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/BindingType.java
index 9ac08cf..6932796 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/BindingType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/BindingType.java
@@ -16,6 +16,8 @@
 
 /**
  * Abstract meta-data processing type representing a binding
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public abstract class BindingType extends AbstractRootTypeDescriptor{
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/BooleanType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/BooleanType.java
index ee3d42b..cd90e74 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/BooleanType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/BooleanType.java
@@ -23,6 +23,7 @@
  * Meta-data processing type representing a boolean attribute value runtime type
  * that implements IPossibleValues, IValidValues, IDefaultValue, IValidELValues
  * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public class BooleanType extends EnumerationType implements IValidValues, IPossibleValues, IDefaultValue{
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/CharacterType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/CharacterType.java
new file mode 100644
index 0000000..d821c78
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/CharacterType.java
@@ -0,0 +1,41 @@
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jst.jsf.metadataprocessors.AbstractRootTypeDescriptor;
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidationMessage;
+import org.eclipse.jst.jsf.metadataprocessors.features.ValidationMessage;
+
+/**
+ * Represents a single unicode character
+ */
+public class CharacterType extends AbstractRootTypeDescriptor implements
+		IMetaDataEnabledFeature, IValidValues{
+
+	private List _msgs;
+
+	/**
+	 * Constructor
+	 */
+	public CharacterType() {
+		super();
+	}
+
+	public List<IValidationMessage> getValidationMessages() {
+		if (_msgs == null){
+			_msgs = new ArrayList<IValidationMessage>(1);
+		}
+		return _msgs;
+	}
+
+	public boolean isValidValue(String value) {
+		if (value.length() != 1)
+			getValidationMessages().add(new ValidationMessage(Messages.CharacterType_0));
+			
+		return getValidationMessages().size() == 0;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ColorType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ColorType.java
new file mode 100644
index 0000000..897a399
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ColorType.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation., and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Yury Kats/Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.PossibleValue;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.PaletteData;
+import org.eclipse.swt.graphics.RGB;
+
+/**
+ * Meta-data processing type representing a color.
+ * A color is defined as in html spec http://www.w3.org/TR/html4/types.html#type-color
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ * @author ykats
+ */
+
+public class ColorType extends EnumerationType implements IPossibleValues {
+	
+	/**
+	 * List of standard colors
+	 * See http://www.w3.org/TR/html4/types.html#type-color
+	 */
+	private final static String[] COLORS = {"Black", "Silver", "Gray", "White", "Maroon", "Red", "Purple", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
+				"Fuchsia", "Green", "Lime", "Olive", "Yellow", "Navy", "Blue", "Teal","Aqua"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$
+		//if ordering changes, must change RGB[] ordering
+
+	private RGB[] _rgb;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jst.jsf.taglibprocessing.attributevalues.EnumerationType#getReturnType()
+	 */
+	protected String getReturnType(){ return "java.lang.String";} //$NON-NLS-1$
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jst.jsf.metadataprocessors.features.IValidValues#isValidValue(java.lang.String)
+	 */
+	public boolean isValidValue(String value) {	
+		boolean bValid = true;
+		String trimmedVal = value.trim();
+		if (trimmedVal.length() == 0)
+			bValid = false;
+		else if (trimmedVal.charAt(0) == '#' && trimmedVal.length() == 7) {
+			for (int i=1; i<7; i++) {
+				if (trimmedVal.charAt(i) < '0' ||
+					(trimmedVal.charAt(i) > '9' && trimmedVal.charAt(i) < 'A') ||
+					(trimmedVal.charAt(i) > 'F' && trimmedVal.charAt(i) < 'a') ||
+					trimmedVal.charAt(i) > 'f') {
+					bValid = false;
+					break;
+				}
+			}
+		}
+		else {
+			bValid = false;
+			for (int i = 0; i < COLORS.length; i++) {
+				if(trimmedVal.equalsIgnoreCase(COLORS[i])) {
+					bValid = true;
+					break;
+				}
+			}
+		}
+		
+		if(!bValid) {
+			addNewValidationMessage(Messages.ColorType_invalid_color);
+		}
+		
+		return getValidationMessages().isEmpty();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues#getPossibleValues()
+	 */
+	public List getPossibleValues() {
+		List ret = new ArrayList(COLORS.length);
+		for (int i=0;i < COLORS.length;i++){
+			PossibleValue pv = new PossibleValue(COLORS[i]);
+			pv.setIcon(createImage(i));
+			ret.add(pv);
+		}
+		return ret;
+	}
+
+	private ImageDescriptor createImage(int color) {
+		PaletteData pd = getPaletteData(color);
+		return ImageDescriptor.createFromImageData(new ImageData(16, 16, 1, pd));
+	}
+
+	private PaletteData getPaletteData(int color){
+		if (_rgb == null){
+			_rgb = new RGB[16];
+			_rgb[0] = new RGB(0,0,0);//black
+			_rgb[1] = new RGB(192,192,192);//silver
+			_rgb[2] = new RGB(128,128,128);//gray
+			_rgb[3] = new RGB(255,255,255);//white
+			_rgb[4] = new RGB(128,0,0);//Maroon
+			_rgb[5] = new RGB(255,0,0);//Red
+			_rgb[6] = new RGB(128,0,128);//Purple
+			_rgb[7] = new RGB(255,0,255);//Fuchsia
+			_rgb[8] = new RGB(0,128,0);//Green
+			_rgb[9] = new RGB(0,255,0);//Lime
+			_rgb[10] = new RGB(128,128,0);//Olive
+			_rgb[11] = new RGB(255,255,0);//Yellow
+			_rgb[12] = new RGB(0,0,128);//Navy
+			_rgb[13] = new RGB(0,0,255);//Blue
+			_rgb[14] = new RGB(0,128,128);//Teal
+			_rgb[15] = new RGB(0,255,255);//Aqua
+		}
+		RGB[] rgbColor = new RGB[1];
+		System.arraycopy(_rgb, color, rgbColor, 0, 1);
+		return new PaletteData(rgbColor);
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ComponentBindingType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ComponentBindingType.java
index d130a73..4e394ed 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ComponentBindingType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ComponentBindingType.java
@@ -19,6 +19,8 @@
 
 /**
  * Meta-data processing type representing a "binding" attribute
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public class ComponentBindingType extends ValueBindingType implements
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ComponentIDType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ComponentIDType.java
index 69698b2..82c9957 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ComponentIDType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ComponentIDType.java
@@ -1,12 +1,12 @@
 /*******************************************************************************
- * Copyright (c) 2006 Oracle Corporation.
+ * Copyright (c) 2006, 2007 Oracle Corporation.
  * 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:
- *    Gerry Kessler/Oracle - initial API and implementation
+ *    Oracle - initial API and implementation
  *    
  ********************************************************************************/
 package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
@@ -21,11 +21,22 @@
 
 /**
  * Meta-data processing type representing an "id" attribute
+ * Represents an ID or NAME HTML attribute type.
+ * <br>
+ * Attribute values of type ID and NAME must begin with a letter in the range A-Z or a-z or underscore ("_") and 
+ * may be followed by letters (A-Z, a-z), digits (0-9), hyphens ("-"), underscores ("_"), colons (":"),
+ * and periods ("."). 
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
+ * TODO: finish regex validation
  */
 public class ComponentIDType extends ValueBindingType implements
 		IValidValues, IValidELValues {
 
+//	private static Pattern idPattern1 = Pattern.compile("[A-Za-z_]");;
+//	private static Pattern idPattern2 = Pattern.compile("^[:\\w\\.\\-]*");
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.jst.jsf.taglibprocessing.attributevalues.ValueBindingType#getExpectedRuntimeType()
 	 */
@@ -47,5 +58,23 @@
 		}			
 		getValidationMessages().add(msg);
 		return false;
+
+//		if (value != null && value.trim().length() == 0)
+//			msg = new ValidationMessage(Messages.ComponentIDType_invalid_value);
+//
+////		else if (!idPattern.matcher(value.trim()).find())
+////			fail = true;
+//		else if (!idPattern1.matcher(value.trim().substring(0, 1)).find())
+//			msg = new ValidationMessage("id must begin with alpha character");
+//		else if ((value.trim().length() > 1) && (!( idPattern2.matcher(value.trim().substring(1)).find())))
+//			msg = new ValidationMessage("illegal characters in id: must be alphanum, period, colon, and hyphen only");
+//		else {
+//			//we could validate uniqueness, but will not for the time being.  This would require a DT FacesContext.
+//			//any other coercion rules apply here?		
+//		}
+//		if (msg != null)
+//			getValidationMessages().add(msg);
+//			
+//		return getValidationMessages().size() == 0;
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ContentType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ContentType.java
new file mode 100644
index 0000000..4fb9ec4
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ContentType.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation., and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Yury Kats/Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.PossibleValue;
+
+/**
+ * Meta-data processing type representing a content (MIME) type.
+ * A ContentType is defined as in 4.0 html spec http://www.w3.org/TR/html401/types.html#h-6.7
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ */
+
+public class ContentType extends EnumerationType implements IPossibleValues {
+	
+	/**
+	 * List of some of the more common content (MIME) types
+	 * See http://www.w3.org/TR/html4/types.html#type-color
+	 */
+	private final static String[] commontypes = {
+		"text/html",  //$NON-NLS-1$
+		"text/css",  //$NON-NLS-1$
+		"image/jpeg",  //$NON-NLS-1$
+		"image/gif",  //$NON-NLS-1$
+		"audio/mpeg",  //$NON-NLS-1$
+		"video/mpeg", //$NON-NLS-1$
+		"video/quicktime",  //$NON-NLS-1$
+		"text/javascript" //$NON-NLS-1$
+	};
+
+	protected String getReturnType(){ return "java.lang.String";} //$NON-NLS-1$
+
+	public boolean isValidValue(String value) {	
+		boolean bValid = true;
+		if (value == null || value.trim().length() == 0)
+			bValid = false;
+		
+		if(!bValid) {
+			addNewValidationMessage(Messages.ContentType_MIME_not_empty);
+		}
+		
+		return getValidationMessages().isEmpty();
+	}
+
+	public List getPossibleValues() {
+		List ret = new ArrayList(commontypes.length);
+		for (int i=0;i < commontypes.length;i++){
+			PossibleValue pv = new PossibleValue(commontypes[i]);
+			ret.add(pv);
+		}
+		return ret;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/CurrencyCodeType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/CurrencyCodeType.java
new file mode 100644
index 0000000..4dc6db8
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/CurrencyCodeType.java
@@ -0,0 +1,232 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation., and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.PossibleValue;
+
+/**
+ * ISO-4217 Currency codes 
+ */
+public class CurrencyCodeType extends EnumerationType implements IPossibleValues {
+	private static final CurrencyCodeMap _map = new CurrencyCodeMap();
+
+	@Override
+	protected String getReturnType() {
+		return "java.lang.String"; //$NON-NLS-1$
+	}
+
+	public List getPossibleValues() {
+		List ret = new ArrayList();
+		for(Iterator it = _map.keySet().iterator();it.hasNext();){
+			String key = (String)it.next();
+			String value = _map.get(key);
+			PossibleValue pv = new PossibleValue(key, value);
+			ret.add(pv);
+		}
+		return ret;
+	}
+
+	public boolean isValidValue(String value) {
+		if(!_map.containsKey(value.toUpperCase())) {
+			addNewValidationMessage(Messages.CurrencyCodeType_invalid);
+		}
+
+		return getValidationMessages().isEmpty();
+	}
+
+	private static class CurrencyCodeMap extends HashMap<String, String> {
+		
+		private static final long serialVersionUID = 1L;
+
+		CurrencyCodeMap(){
+			put("AED",Messages.CurrencyCodeType_2); //$NON-NLS-1$ 
+			put("AFA",Messages.CurrencyCodeType_3); //$NON-NLS-1$ 
+			put("ALL",Messages.CurrencyCodeType_4); //$NON-NLS-1$ 
+			put("AMD",Messages.CurrencyCodeType_5); //$NON-NLS-1$ 
+			put("ANG",Messages.CurrencyCodeType_6); //$NON-NLS-1$ 
+			put("AOA",Messages.CurrencyCodeType_7); //$NON-NLS-1$ 
+			put("ARS",Messages.CurrencyCodeType_8); //$NON-NLS-1$ 
+			put("AUD",Messages.CurrencyCodeType_9); //$NON-NLS-1$ 
+			put("AWG",Messages.CurrencyCodeType_10); //$NON-NLS-1$ 
+			put("AZM",Messages.CurrencyCodeType_11); //$NON-NLS-1$ 
+			put("BAM",Messages.CurrencyCodeType_12); //$NON-NLS-1$ 
+			put("BBD",Messages.CurrencyCodeType_13); //$NON-NLS-1$ 
+			put("BDT",Messages.CurrencyCodeType_14); //$NON-NLS-1$ 
+			put("BGN",Messages.CurrencyCodeType_15); //$NON-NLS-1$ 
+			put("BHD",Messages.CurrencyCodeType_16); //$NON-NLS-1$ 
+			put("BIF",Messages.CurrencyCodeType_17); //$NON-NLS-1$ 
+			put("BMD",Messages.CurrencyCodeType_18); //$NON-NLS-1$ 
+			put("BND",Messages.CurrencyCodeType_19); //$NON-NLS-1$ 
+			put("BOB",Messages.CurrencyCodeType_20); //$NON-NLS-1$ 
+			put("BRL",Messages.CurrencyCodeType_21); //$NON-NLS-1$ 
+			put("BSD",Messages.CurrencyCodeType_22); //$NON-NLS-1$ 
+			put("BTN",Messages.CurrencyCodeType_23); //$NON-NLS-1$ 
+			put("BWP",Messages.CurrencyCodeType_24); //$NON-NLS-1$ 
+			put("BYR",Messages.CurrencyCodeType_25); //$NON-NLS-1$ 
+			put("BZD",Messages.CurrencyCodeType_26); //$NON-NLS-1$ 
+			put("CAD",Messages.CurrencyCodeType_27); //$NON-NLS-1$ 
+			put("CDF",Messages.CurrencyCodeType_28); //$NON-NLS-1$ 
+			put("CHF",Messages.CurrencyCodeType_29); //$NON-NLS-1$ 
+			put("CLP",Messages.CurrencyCodeType_30); //$NON-NLS-1$ 
+			put("CNY",Messages.CurrencyCodeType_31); //$NON-NLS-1$ 
+			put("COP",Messages.CurrencyCodeType_32); //$NON-NLS-1$ 
+			put("CRC",Messages.CurrencyCodeType_33); //$NON-NLS-1$ 
+			put("CSD",Messages.CurrencyCodeType_34); //$NON-NLS-1$ 
+			put("CUP",Messages.CurrencyCodeType_35); //$NON-NLS-1$ 
+			put("CVE",Messages.CurrencyCodeType_36); //$NON-NLS-1$ 
+			put("CYP",Messages.CurrencyCodeType_37); //$NON-NLS-1$ 
+			put("CZK",Messages.CurrencyCodeType_38); //$NON-NLS-1$ 
+			put("DJF",Messages.CurrencyCodeType_39); //$NON-NLS-1$ 
+			put("DKK",Messages.CurrencyCodeType_40); //$NON-NLS-1$ 
+			put("DOP",Messages.CurrencyCodeType_41); //$NON-NLS-1$ 
+			put("DZD",Messages.CurrencyCodeType_42); //$NON-NLS-1$ 
+			put("EEK",Messages.CurrencyCodeType_43); //$NON-NLS-1$ 
+			put("EGP",Messages.CurrencyCodeType_44); //$NON-NLS-1$ 
+			put("ERN",Messages.CurrencyCodeType_45); //$NON-NLS-1$ 
+			put("ETB",Messages.CurrencyCodeType_46); //$NON-NLS-1$ 
+			put("EUR",Messages.CurrencyCodeType_47); //$NON-NLS-1$ 
+			put("FJD",Messages.CurrencyCodeType_48); //$NON-NLS-1$ 
+			put("FKP",Messages.CurrencyCodeType_49); //$NON-NLS-1$ 
+			put("GBP",Messages.CurrencyCodeType_50); //$NON-NLS-1$ 
+			put("GEL",Messages.CurrencyCodeType_51); //$NON-NLS-1$ 
+			put("GGP",Messages.CurrencyCodeType_52); //$NON-NLS-1$ 
+			put("GHC",Messages.CurrencyCodeType_53); //$NON-NLS-1$ 
+			put("GIP",Messages.CurrencyCodeType_54); //$NON-NLS-1$ 
+			put("GMD",Messages.CurrencyCodeType_55); //$NON-NLS-1$ 
+			put("GNF",Messages.CurrencyCodeType_56); //$NON-NLS-1$ 
+			put("GTQ",Messages.CurrencyCodeType_57); //$NON-NLS-1$ 
+			put("GYD",Messages.CurrencyCodeType_58); //$NON-NLS-1$ 
+			put("HKD",Messages.CurrencyCodeType_59); //$NON-NLS-1$ 
+			put("HNL",Messages.CurrencyCodeType_60); //$NON-NLS-1$ 
+			put("HRK",Messages.CurrencyCodeType_61); //$NON-NLS-1$ 
+			put("HTG",Messages.CurrencyCodeType_62); //$NON-NLS-1$ 
+			put("HUF",Messages.CurrencyCodeType_63); //$NON-NLS-1$ 
+			put("IDR",Messages.CurrencyCodeType_64); //$NON-NLS-1$ 
+			put("ILS",Messages.CurrencyCodeType_65); //$NON-NLS-1$ 
+			put("IMP",Messages.CurrencyCodeType_66); //$NON-NLS-1$ 
+			put("INR",Messages.CurrencyCodeType_67); //$NON-NLS-1$ 
+			put("IQD",Messages.CurrencyCodeType_68); //$NON-NLS-1$ 
+			put("IRR",Messages.CurrencyCodeType_69); //$NON-NLS-1$ 
+			put("ISK",Messages.CurrencyCodeType_70); //$NON-NLS-1$ 
+			put("JEP",Messages.CurrencyCodeType_71); //$NON-NLS-1$ 
+			put("JMD",Messages.CurrencyCodeType_72); //$NON-NLS-1$ 
+			put("JOD",Messages.CurrencyCodeType_73); //$NON-NLS-1$ 
+			put("JPY",Messages.CurrencyCodeType_74); //$NON-NLS-1$ 
+			put("KES",Messages.CurrencyCodeType_75); //$NON-NLS-1$ 
+			put("KGS",Messages.CurrencyCodeType_76); //$NON-NLS-1$ 
+			put("KHR",Messages.CurrencyCodeType_77); //$NON-NLS-1$ 
+			put("KMF",Messages.CurrencyCodeType_78); //$NON-NLS-1$ 
+			put("KPW",Messages.CurrencyCodeType_79); //$NON-NLS-1$ 
+			put("KRW",Messages.CurrencyCodeType_80); //$NON-NLS-1$ 
+			put("KWD",Messages.CurrencyCodeType_81); //$NON-NLS-1$ 
+			put("KYD",Messages.CurrencyCodeType_82); //$NON-NLS-1$ 
+			put("KZT",Messages.CurrencyCodeType_83); //$NON-NLS-1$ 
+			put("LAK",Messages.CurrencyCodeType_84); //$NON-NLS-1$ 
+			put("LBP",Messages.CurrencyCodeType_85); //$NON-NLS-1$ 
+			put("LKR",Messages.CurrencyCodeType_86); //$NON-NLS-1$ 
+			put("LRD",Messages.CurrencyCodeType_87); //$NON-NLS-1$ 
+			put("LSL",Messages.CurrencyCodeType_88); //$NON-NLS-1$ 
+			put("LTL",Messages.CurrencyCodeType_89); //$NON-NLS-1$ 
+			put("LVL",Messages.CurrencyCodeType_90); //$NON-NLS-1$ 
+			put("LYD",Messages.CurrencyCodeType_91); //$NON-NLS-1$ 
+			put("MAD",Messages.CurrencyCodeType_92); //$NON-NLS-1$ 
+			put("MDL",Messages.CurrencyCodeType_93); //$NON-NLS-1$ 
+			put("MGA",Messages.CurrencyCodeType_94); //$NON-NLS-1$ 
+			put("MKD",Messages.CurrencyCodeType_95); //$NON-NLS-1$ 
+			put("MMK",Messages.CurrencyCodeType_96); //$NON-NLS-1$ 
+			put("MNT",Messages.CurrencyCodeType_97); //$NON-NLS-1$ 
+			put("MOP",Messages.CurrencyCodeType_98); //$NON-NLS-1$ 
+			put("MRO",Messages.CurrencyCodeType_99); //$NON-NLS-1$ 
+			put("MTL",Messages.CurrencyCodeType_100); //$NON-NLS-1$ 
+			put("MUR",Messages.CurrencyCodeType_101); //$NON-NLS-1$ 
+			put("MVR",Messages.CurrencyCodeType_102); //$NON-NLS-1$ 
+			put("MWK",Messages.CurrencyCodeType_103); //$NON-NLS-1$ 
+			put("MXN",Messages.CurrencyCodeType_104); //$NON-NLS-1$ 
+			put("MYR",Messages.CurrencyCodeType_105); //$NON-NLS-1$ 
+			put("MZM",Messages.CurrencyCodeType_106); //$NON-NLS-1$ 
+			put("NAD",Messages.CurrencyCodeType_107); //$NON-NLS-1$ 
+			put("NGN",Messages.CurrencyCodeType_108); //$NON-NLS-1$ 
+			put("NIO",Messages.CurrencyCodeType_109); //$NON-NLS-1$ 
+			put("NOK",Messages.CurrencyCodeType_110); //$NON-NLS-1$ 
+			put("NPR",Messages.CurrencyCodeType_111); //$NON-NLS-1$ 
+			put("NZD",Messages.CurrencyCodeType_112); //$NON-NLS-1$ 
+			put("OMR",Messages.CurrencyCodeType_113); //$NON-NLS-1$ 
+			put("PAB",Messages.CurrencyCodeType_114); //$NON-NLS-1$ 
+			put("PEN",Messages.CurrencyCodeType_115); //$NON-NLS-1$ 
+			put("PGK",Messages.CurrencyCodeType_116); //$NON-NLS-1$ 
+			put("PHP",Messages.CurrencyCodeType_117); //$NON-NLS-1$ 
+			put("PKR",Messages.CurrencyCodeType_118); //$NON-NLS-1$ 
+			put("PLN",Messages.CurrencyCodeType_119); //$NON-NLS-1$ 
+			put("PYG",Messages.CurrencyCodeType_120); //$NON-NLS-1$ 
+			put("QAR",Messages.CurrencyCodeType_121); //$NON-NLS-1$ 
+			put("ROL",Messages.CurrencyCodeType_122); //$NON-NLS-1$ 
+			put("RUB",Messages.CurrencyCodeType_123); //$NON-NLS-1$ 
+			put("RWF",Messages.CurrencyCodeType_124); //$NON-NLS-1$ 
+			put("SAR",Messages.CurrencyCodeType_125); //$NON-NLS-1$ 
+			put("SBD",Messages.CurrencyCodeType_126); //$NON-NLS-1$ 
+			put("SCR",Messages.CurrencyCodeType_127); //$NON-NLS-1$ 
+			put("SDD",Messages.CurrencyCodeType_128); //$NON-NLS-1$ 
+			put("SEK",Messages.CurrencyCodeType_129); //$NON-NLS-1$ 
+			put("SGD",Messages.CurrencyCodeType_130); //$NON-NLS-1$ 
+			put("SHP",Messages.CurrencyCodeType_131); //$NON-NLS-1$ 
+			put("SIT",Messages.CurrencyCodeType_132); //$NON-NLS-1$ 
+			put("SKK",Messages.CurrencyCodeType_133); //$NON-NLS-1$ 
+			put("SLL",Messages.CurrencyCodeType_134); //$NON-NLS-1$ 
+			put("SOS",Messages.CurrencyCodeType_135); //$NON-NLS-1$ 
+			put("SPL",Messages.CurrencyCodeType_136); //$NON-NLS-1$ 
+			put("SRD",Messages.CurrencyCodeType_137); //$NON-NLS-1$ 
+			put("STD",Messages.CurrencyCodeType_138); //$NON-NLS-1$ 
+			put("SVC",Messages.CurrencyCodeType_139); //$NON-NLS-1$ 
+			put("SYP",Messages.CurrencyCodeType_140); //$NON-NLS-1$ 
+			put("SZL",Messages.CurrencyCodeType_141); //$NON-NLS-1$ 
+			put("THB",Messages.CurrencyCodeType_142); //$NON-NLS-1$ 
+			put("TJS",Messages.CurrencyCodeType_143); //$NON-NLS-1$ 
+			put("TMM",Messages.CurrencyCodeType_144); //$NON-NLS-1$ 
+			put("TND",Messages.CurrencyCodeType_145); //$NON-NLS-1$ 
+			put("TOP",Messages.CurrencyCodeType_146); //$NON-NLS-1$ 
+			put("TRL",Messages.CurrencyCodeType_147); //$NON-NLS-1$ 
+			put("TRY",Messages.CurrencyCodeType_148); //$NON-NLS-1$ 
+			put("TTD",Messages.CurrencyCodeType_149); //$NON-NLS-1$ 
+			put("TVD",Messages.CurrencyCodeType_150); //$NON-NLS-1$ 
+			put("TWD",Messages.CurrencyCodeType_151); //$NON-NLS-1$ 
+			put("TZS",Messages.CurrencyCodeType_152); //$NON-NLS-1$ 
+			put("UAH",Messages.CurrencyCodeType_153); //$NON-NLS-1$ 
+			put("UGX",Messages.CurrencyCodeType_154); //$NON-NLS-1$ 
+			put("USD",Messages.CurrencyCodeType_155); //$NON-NLS-1$ 
+			put("UYU",Messages.CurrencyCodeType_156); //$NON-NLS-1$ 
+			put("UZS",Messages.CurrencyCodeType_157); //$NON-NLS-1$ 
+			put("VEB",Messages.CurrencyCodeType_158); //$NON-NLS-1$ 
+			put("VND",Messages.CurrencyCodeType_159); //$NON-NLS-1$ 
+			put("VUV",Messages.CurrencyCodeType_160); //$NON-NLS-1$ 
+			put("WST",Messages.CurrencyCodeType_161); //$NON-NLS-1$ 
+			put("XAF",Messages.CurrencyCodeType_162); //$NON-NLS-1$ 
+			put("XAG",Messages.CurrencyCodeType_163); //$NON-NLS-1$ 
+			put("XAU",Messages.CurrencyCodeType_164); //$NON-NLS-1$ 
+			put("XCD",Messages.CurrencyCodeType_165); //$NON-NLS-1$ 
+			put("XDR",Messages.CurrencyCodeType_166); //$NON-NLS-1$ 
+			put("XOF",Messages.CurrencyCodeType_167); //$NON-NLS-1$ 
+			put("XPD",Messages.CurrencyCodeType_168); //$NON-NLS-1$ 
+			put("XPF",Messages.CurrencyCodeType_169); //$NON-NLS-1$ 
+			put("XPT",Messages.CurrencyCodeType_170); //$NON-NLS-1$ 
+			put("YER",Messages.CurrencyCodeType_171); //$NON-NLS-1$ 
+			put("ZAR",Messages.CurrencyCodeType_172); //$NON-NLS-1$ 
+			put("ZMK",Messages.CurrencyCodeType_173); //$NON-NLS-1$ 
+			put("ZWD",Messages.CurrencyCodeType_174); //$NON-NLS-1$ 
+		}
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DateTimePatternType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DateTimePatternType.java
new file mode 100644
index 0000000..5d06105
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DateTimePatternType.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation., and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.metadataprocessors.AbstractRootTypeDescriptor;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.PossibleValue;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr;
+import org.w3c.dom.Node;
+
+/**
+ * Meta-data processing type representing a Date, Time and DateTime Pattern types.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ */
+
+public class DateTimePatternType extends AbstractRootTypeDescriptor implements IPossibleValues{
+	//should we ever validate the patterns, extend EnumerationType
+	final private static String[] DATEPATTERNS = {"M/d/yy", "EEE, M/d/yy", "MM/dd/yyyy", "EEE, MM/dd/yyyy", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+        "MMM d, yyyy", "EEE, MMM d, yyyy", "MMMM d, yyyy", "EEEE, MMMM d, yyyy", "MMMM yyyy" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ };
+	};
+	
+	final private static String[] TIMEPATTERNS     = {"hh:mm", "hh:mm z", "HH:mm z", "HH:mm:ss z" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+	};
+	  
+	final private static String[] DATETIMEPATTERNS = {"M/d/yy hh:mm", "EEE, M/d/yy hh:mm", "MM/dd/yyyy HH:mm:ss z", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		"EEE, MM/dd/yyyy HH:mm:ss z", "MMM d, yyyy HH:mm z", "EEE, MMM d, yyyy HH:mm z", "MMMM d, yyyy HH:mm z", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		"EEEE, MMMM d, yyyy HH:mm z" //$NON-NLS-1$
+	};
+
+	public List getPossibleValues() {
+		List ret = new ArrayList();		
+		String typeVal = getTypeValue();
+		if ("date".equalsIgnoreCase(typeVal)){ //$NON-NLS-1$
+			for (int i=0;i<DATEPATTERNS.length;i++){
+				ret.add(new PossibleValue(DATEPATTERNS[i]));
+			}
+		}
+		else if ("time".equalsIgnoreCase(typeVal)){ //$NON-NLS-1$
+			for (int i=0;i<TIMEPATTERNS.length;i++){
+				ret.add(new PossibleValue(TIMEPATTERNS[i]));
+			}
+		}
+		else {	
+			for (int i=0;i<DATETIMEPATTERNS.length;i++){
+				ret.add(new PossibleValue(DATETIMEPATTERNS[i]));
+			}
+		}
+		return ret;
+	}
+	
+	private String getTypeValue() {
+		if (getStructuredDocumentContext() != null){
+			IDOMContextResolver resolver = IStructuredDocumentContextResolverFactory.INSTANCE.getDOMContextResolver(getStructuredDocumentContext());
+			if (resolver != null){
+				Node aNode = resolver.getNode();
+				if (aNode instanceof IDOMAttr) {
+					Node tagNode = ((IDOMAttr)aNode).getOwnerElement();
+					IDOMAttr typeNode = (IDOMAttr) tagNode.getAttributes().getNamedItem("type"); //$NON-NLS-1$
+					if (typeNode != null)
+						return typeNode.getValue();
+				}				
+			}
+		}
+		return ""; //$NON-NLS-1$
+	}
+
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DirectBindingType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DirectBindingType.java
index 830a8a0..2c5f7c0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DirectBindingType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DirectBindingType.java
@@ -12,6 +12,8 @@
 package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
 /**
  * Abstract meta-data processing type
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public abstract class DirectBindingType extends BindingType {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DoubleType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DoubleType.java
index 58ac6e1..0e73d4a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DoubleType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/DoubleType.java
@@ -17,6 +17,8 @@
 
 /**
  * Meta-data processing type representing a "double" attribute value runtime type
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public class DoubleType extends NumberType {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/EnumerationType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/EnumerationType.java
index aa2621c..e1bb995 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/EnumerationType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/EnumerationType.java
@@ -27,6 +27,8 @@
 
 /**
  * Abstract meta-data processing type representing an enumeration attribute value runtime type
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public abstract class EnumerationType extends AbstractRootTypeDescriptor implements IValidValues, IDefaultValue, IValidELValues{
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ExpressionBindingType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ExpressionBindingType.java
index 8e75c66..1ae1d98 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ExpressionBindingType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ExpressionBindingType.java
@@ -16,6 +16,8 @@
 
 /**
  * Abstract meta-data processing type representing an expression binding attribute value runtime type
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public abstract class ExpressionBindingType extends BindingType  {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigConverterIDFeatures.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigConverterIDFeatures.java
index b83bf2e..79b1c5b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigConverterIDFeatures.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigConverterIDFeatures.java
@@ -11,6 +11,7 @@
  ********************************************************************************/
 package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -24,6 +25,8 @@
 
 /**
  * Meta-data processing feature representing an attribute value requiring a "converterid"
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public class FacesConfigConverterIDFeatures extends FacesConfigIdentifierFeatures {
@@ -108,9 +111,13 @@
 	 * 
 	 * Converter ID Sorter - incomplete
 	 */
-	class ConverterSorter implements Comparator {
+	private static class ConverterSorter implements Comparator, Serializable {
+	    /**
+         * 
+         */
+        private static final long serialVersionUID = 5255291244511783735L;
 
-		public int compare(Object o1, Object o2) {		
+        public int compare(Object o1, Object o2) {		
 			//TODO
 			return 0;
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigConverterIDType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigConverterIDType.java
index 9350d7c..3e81d04 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigConverterIDType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigConverterIDType.java
@@ -12,6 +12,8 @@
 
 /**
  * Type representing a FacesConfig Converter attribute
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public class FacesConfigConverterIDType extends FacesConfigIdentifierType {
     // FIXME: why do we have an empty class?
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigIdentifierFeatures.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigIdentifierFeatures.java
index ef99ed7..b22f4d1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigIdentifierFeatures.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigIdentifierFeatures.java
@@ -43,6 +43,8 @@
 
 /**
  * Abstract meta-data processing feature representing a faces-config type
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public abstract class FacesConfigIdentifierFeatures extends AbstractMetaDataEnabledFeature  
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigIdentifierType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigIdentifierType.java
index a94d276..5ac934d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigIdentifierType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigIdentifierType.java
@@ -13,6 +13,8 @@
 
 /**
  * Meta-data processing type representing a faces-config type
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public abstract class FacesConfigIdentifierType extends IdentifierType	 {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigValidatorIDFeatures.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigValidatorIDFeatures.java
index 70de6c1..2a2711a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigValidatorIDFeatures.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigValidatorIDFeatures.java
@@ -11,6 +11,7 @@
  ********************************************************************************/
 package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -24,6 +25,8 @@
 
 /**
  * ValidatorID attribute feature
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  *
  */
 public class FacesConfigValidatorIDFeatures extends FacesConfigIdentifierFeatures {
@@ -107,9 +110,13 @@
 	/**
 	 * Validator id sorter - incomplete
 	 */
-	class ValidatorSorter implements Comparator {
+	private static class ValidatorSorter implements Comparator, Serializable {
+		/**
+         * 
+         */
+        private static final long serialVersionUID = -398026037193914126L;
 
-		public int compare(Object o1, Object o2) {		
+        public int compare(Object o1, Object o2) {		
 			//TODO
 			return 0;
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigValidatorIDType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigValidatorIDType.java
index 2836e86..65f0504 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigValidatorIDType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/FacesConfigValidatorIDType.java
@@ -12,6 +12,8 @@
 
 /**
  * Type representing a FacesConfig Validator attribute
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public class FacesConfigValidatorIDType extends FacesConfigIdentifierType {
     // FIXME: why do we have an empty class?
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/IdentifierType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/IdentifierType.java
index 621f31d..134e23d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/IdentifierType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/IdentifierType.java
@@ -13,6 +13,8 @@
 
 /**
  * Abstract meta-data processing type representing an identifier binding type
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public abstract class IdentifierType extends DirectBindingType {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/IntegerType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/IntegerType.java
index 0192360..6fcbdb7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/IntegerType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/IntegerType.java
@@ -19,6 +19,7 @@
  * Meta-data processing type representing an integer attribute value runtime type
  * that implements IValidValues, IDefaultValue, IValidELValues
  * 
+ * <p><b>Provisional API - subject to change</b></p> 
  * @author Gerry Kessler - Oracle
  */
 public class IntegerType extends NumberType {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/JavaClassType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/JavaClassType.java
index 6dddc38..912c818 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/JavaClassType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/JavaClassType.java
@@ -12,6 +12,7 @@
 package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -46,12 +47,13 @@
 
 /**
  * Provides possible values and validates attribute values that should be fully qualified Java types.
- * A type can be verified against muliple "valid-interfaces" and/or a "valid-superclass" from meta-data.
+ * A type can be verified against multiple "valid-interfaces" and/or a "valid-superclass" from meta-data.
  * Code checks to ensure the class can be instantiated (i.e. not abstract, anonymous or inner class)
  * Search is scoped to within the current project only. 
  * 
  * (Until https://bugs.eclipse.org/bugs/show_bug.cgi?id=142044 is fixed, only the first found will be used)
  * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  *
  */
@@ -143,7 +145,7 @@
 			SearchRequestor requestor = new Searcher();
 			SearchEngine engine = new SearchEngine();
 			
-			IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[]{jp}, IJavaSearchScope.SOURCES | IJavaSearchScope.APPLICATION_LIBRARIES);
+			IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[]{jp});//, IJavaSearchScope.SOURCES | IJavaSearchScope.APPLICATION_LIBRARIES | IJavaSearchScope.);
 			SearchPattern combined = SearchPattern.createPattern((IJavaElement)elems.get(0), IJavaSearchConstants.IMPLEMENTORS, 0);
 
 //			 Until this bug is fixed, stub it out...  only the first interface/superclass will be used.
@@ -163,7 +165,7 @@
 			return ((Searcher)requestor).getResults();	
 		}
 
-		return new ArrayList(0);
+		return Collections.EMPTY_LIST;
 	}
 	
 	private IJavaProject getJavaProject() {
@@ -244,32 +246,71 @@
 			//ensure that it is not abstract or anonymous
 			if (!isInnerOrAnonymousClass(type) && !isAbstractClass(type)){
 				//now verify that it meets the criteria
-				List results = getTypes();
-				if (!results.isEmpty()){					
-					for (Iterator it = results.iterator();it.hasNext();){
-						SearchMatch match = (SearchMatch)it.next();
-						IType res = (IType)match.getElement();
-						if (!isInnerOrAnonymousClass(res) ){
-							//if this is the class, then optimize to reduce expense of creating hierarchy
-							if (!isAbstractClass(type) && (res.getFullyQualifiedName().equals(value)) )
-								return true;
-							//check to see if value is in hierarchy
-							try {
-								ITypeHierarchy hierarchy = res.newTypeHierarchy(jp, null);
-								if (hierarchy.contains(type))
-									return true;
-							} catch (JavaModelException e) {
-								//ignore
-							}
-						}
+				ITypeHierarchy hierarchy;
+				try {
+					hierarchy = type.newTypeHierarchy(jp, null);
+				} catch (JavaModelException e) {
+					return false;
+				}
+						
+				//check that all interfaces
+				List<String> interfaceNames = getInterfaceNames();
+				for (Iterator<String> it=interfaceNames.iterator();it.hasNext();){
+					//check that all interfaces are satisfied by type
+					IType interfase = getTypeForValue(jp, it.next());
+					if (interfase == null){
+						addNewValidationMessage(Messages.JavaClassType_not_found);
+						return false;
+					}
+					else if (! containsType(hierarchy.getAllSupertypes(type), interfase)){
+						addNewValidationMessage(Messages.JavaClassType_not_found);
+						return false;
 					}
 				}
+				//interfaces have been satisfied now check the superclass if specified				
+				IType superClass = getSuperClass(jp); 
+				if (superClass != null && superClass.equals(type))
+					return true;
+				else if (superClass != null && !containsType(hierarchy.getAllSuperclasses(type), superClass )){
+					addNewValidationMessage(Messages.JavaClassType_not_found);
+					return false;
+				}
+				return true;
+//				List results = getTypes();
+//				if (!results.isEmpty()){					
+//					for (Iterator it = results.iterator();it.hasNext();){
+//						SearchMatch match = (SearchMatch)it.next();
+//						IType res = (IType)match.getElement();
+//						if (!isInnerOrAnonymousClass(res) ){
+//							//if this is the class, then optimize to reduce expense of creating hierarchy
+//							if (!isAbstractClass(type) && (res.getFullyQualifiedName().equals(value)) )
+//								return true;
+//							//check to see if value is a subtype in the hierarchy
+//							try {
+//								ITypeHierarchy hierarchy = res.newTypeHierarchy(jp, null);
+//								if (containsType(hierarchy.getAllSubtypes(res), type)) 									
+//									return true;
+//								
+//							} catch (JavaModelException e) {
+//								//ignore
+//							}
+//						}
+//					}
+//				}
 			}
 		}
 		addNewValidationMessage(Messages.JavaClassType_not_found);
 		return false;
 	}
 	
+	private boolean containsType(IType[] types, IType type) {
+		for (int i=0;i < types.length;i++) {
+			if (type.equals(types[i]))
+				return true;
+		}
+		return false;
+	}
+
 	private IType getTypeForValue(IJavaProject jp, String value) {
 		try {
 			return findType(jp, value);
@@ -369,7 +410,7 @@
 		return false;
 	}
 	
-	private class Searcher extends SearchRequestor{
+	private static class Searcher extends SearchRequestor{
 		private List results = new ArrayList();
 		public void acceptSearchMatch(SearchMatch match) throws CoreException {
 			results.add(match);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LanguageCodeType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LanguageCodeType.java
new file mode 100644
index 0000000..102df5a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LanguageCodeType.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation., and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.PossibleValue;
+
+/**
+ * Meta-data processing type representing a Language Code type.
+ * A Language code is defined as in html spec http://www.w3.org/TR/html4/types.html#h-6.8
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ */
+
+public class LanguageCodeType extends EnumerationType implements IPossibleValues {
+	private static final LanguageCodeMap _map = new LanguageCodeMap();
+	
+	@Override
+	protected String getReturnType() {
+		return "java.lang.String"; //$NON-NLS-1$
+	}
+
+	public List getPossibleValues() {
+		List ret = new ArrayList();		
+		for(Iterator it = _map.keySet().iterator();it.hasNext();){
+			String key = (String)it.next();
+			String value = _map.get(key);
+			PossibleValue pv = new PossibleValue(key, value);
+			ret.add(pv);
+		}
+		return ret;
+	}
+
+	public boolean isValidValue(String value) {
+		if(!_map.containsKey(value)) {
+			addNewValidationMessage(Messages.LanguageCodeType_1);
+		}
+		
+		return getValidationMessages().isEmpty();
+	}
+	
+	/**
+	 * Defines language code map
+	 *
+	 */
+	private static class LanguageCodeMap extends HashMap<String, String> {
+		private static final long serialVersionUID = 1L;
+
+		LanguageCodeMap() {
+			put("af", Messages.LanguageCodeType_118); //$NON-NLS-1$
+			put("ar", Messages.LanguageCodeType_0); //$NON-NLS-1$
+			put("be", Messages.LanguageCodeType_7); //$NON-NLS-1$
+			put("bg", Messages.LanguageCodeType_9); //$NON-NLS-1$
+			put("br", Messages.LanguageCodeType_11); //$NON-NLS-1$
+			put("ca", Messages.LanguageCodeType_13); //$NON-NLS-1$
+			put("cs", Messages.LanguageCodeType_15); //$NON-NLS-1$
+			put("da", Messages.LanguageCodeType_17); //$NON-NLS-1$
+			put("de", Messages.LanguageCodeType_19); //$NON-NLS-1$
+			put("el", Messages.LanguageCodeType_21); //$NON-NLS-1$
+			put("en", Messages.LanguageCodeType_23); //$NON-NLS-1$
+			put("es", Messages.LanguageCodeType_25); //$NON-NLS-1$
+			put("et", Messages.LanguageCodeType_27); //$NON-NLS-1$
+			put("eu", Messages.LanguageCodeType_29); //$NON-NLS-1$
+			put("fa", Messages.LanguageCodeType_31); //$NON-NLS-1$
+			put("fi", Messages.LanguageCodeType_33); //$NON-NLS-1$
+			put("fo", Messages.LanguageCodeType_35); //$NON-NLS-1$
+			put("fr", Messages.LanguageCodeType_37); //$NON-NLS-1$
+			put("gd", Messages.LanguageCodeType_39); //$NON-NLS-1$
+			put("he", Messages.LanguageCodeType_41); //$NON-NLS-1$
+			put("hi", Messages.LanguageCodeType_43); //$NON-NLS-1$
+			put("hr", Messages.LanguageCodeType_45); //$NON-NLS-1$
+			put("hu", Messages.LanguageCodeType_47); //$NON-NLS-1$
+			put("id", Messages.LanguageCodeType_49); //$NON-NLS-1$
+			put("is", Messages.LanguageCodeType_51); //$NON-NLS-1$
+			put("it", Messages.LanguageCodeType_53); //$NON-NLS-1$
+			put("ja", Messages.LanguageCodeType_55); //$NON-NLS-1$
+			put("ko", Messages.LanguageCodeType_57); //$NON-NLS-1$
+			put("lt", Messages.LanguageCodeType_59); //$NON-NLS-1$
+			put("lv", Messages.LanguageCodeType_61); //$NON-NLS-1$
+			put("mk", Messages.LanguageCodeType_63); //$NON-NLS-1$
+			put("ms", Messages.LanguageCodeType_65); //$NON-NLS-1$
+			put("mt", Messages.LanguageCodeType_67); //$NON-NLS-1$
+			put("nl", Messages.LanguageCodeType_69); //$NON-NLS-1$
+			put("no", Messages.LanguageCodeType_71); //$NON-NLS-1$
+			put("pl", Messages.LanguageCodeType_73); //$NON-NLS-1$
+			put("pt", Messages.LanguageCodeType_75); //$NON-NLS-1$
+			put("rm", Messages.LanguageCodeType_77); //$NON-NLS-1$
+			put("ro", Messages.LanguageCodeType_79); //$NON-NLS-1$
+			put("ru", Messages.LanguageCodeType_81); //$NON-NLS-1$
+			put("sk", Messages.LanguageCodeType_83); //$NON-NLS-1$
+			put("sl", Messages.LanguageCodeType_85); //$NON-NLS-1$
+			put("sq", Messages.LanguageCodeType_87); //$NON-NLS-1$
+			put("sr", Messages.LanguageCodeType_89); //$NON-NLS-1$
+			put("sv", Messages.LanguageCodeType_91); //$NON-NLS-1$
+			put("sx", Messages.LanguageCodeType_93); //$NON-NLS-1$
+			put("sz", Messages.LanguageCodeType_95); //$NON-NLS-1$
+			put("th", Messages.LanguageCodeType_97); //$NON-NLS-1$
+			put("tn", Messages.LanguageCodeType_99); //$NON-NLS-1$
+			put("tr", Messages.LanguageCodeType_101); //$NON-NLS-1$
+			put("ts", Messages.LanguageCodeType_103); //$NON-NLS-1$
+			put("uk", Messages.LanguageCodeType_105); //$NON-NLS-1$
+			put("ur", Messages.LanguageCodeType_107); //$NON-NLS-1$
+			put("vi", Messages.LanguageCodeType_109); //$NON-NLS-1$
+			put("xh", Messages.LanguageCodeType_111); //$NON-NLS-1$
+			put("yi", Messages.LanguageCodeType_113); //$NON-NLS-1$
+			put("zh", Messages.LanguageCodeType_115); //$NON-NLS-1$
+			put("zu", Messages.LanguageCodeType_117);			 //$NON-NLS-1$
+		}
+		
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LengthType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LengthType.java
new file mode 100644
index 0000000..70c5069
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LengthType.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+/**
+ * Meta-data processing type representing an length attribute value runtime type.
+ * Does not support min and max values from MD.  Length must be positive.
+ * that implements IValidValues, IDefaultValue, IValidELValues.
+ */
+public class LengthType extends IntegerType {	
+	private static final String INVALID_LENGTH = Messages.LengthType_invalid_integer;
+	/**
+	 * Type coercion according to JSP 2.0 spec: JSP.1.14.2.1 Conversions from String values
+	 * Allows a percentage.
+	 * @see org.eclipse.jst.jsf.metadataprocessors.features.IValidValues#isValidValue(java.lang.String)
+	 **/
+	public boolean isValidValue(String value) {	
+		//FIXME:  this is not right... px, em, etc. are also valid... and spaces between # and units are not
+		//see http://www.w3.org/TR/html401/types.html#h-6.6
+		if (value == null) return true;
+		String aValue = stripPercentIfPresent(value);		
+		try {
+			int anInt = Integer.valueOf(aValue).intValue();
+			if (anInt < 0)
+				addNewValidationMessage(INVALID_LENGTH);
+			
+			return getValidationMessages().isEmpty();
+		} catch (NumberFormatException e) {
+			addNewValidationMessage(INVALID_LENGTH);
+			return false;
+		}
+
+	}
+	//will strip '%' if at end of string.  If string is only '%', then will return empty which will be invalid.
+	private String stripPercentIfPresent(String value) {
+		//"%" is allowed at end
+		if (value.length() > 0
+			&& value.lastIndexOf('%') == value.length() - 1)
+				return value.replaceFirst("%",""); //$NON-NLS-1$ //$NON-NLS-2$
+		
+		return value;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LinkType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LinkType.java
new file mode 100644
index 0000000..ead9b79
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LinkType.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation., and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.PossibleValue;
+
+/**
+ * Meta-data processing type representing a Link type.
+ * 
+ * Possible values are only common types; not all
+ * Valid values just checks for a non-empty value, and not against known link types
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ */
+
+public class LinkType extends EnumerationType implements IPossibleValues{
+	//common link types
+	private String[] _linkTypes = new String[]{
+			"Alternate", //$NON-NLS-1$
+			"Stylesheet", //$NON-NLS-1$
+			"Start", //$NON-NLS-1$
+			"Next", //$NON-NLS-1$
+			"Prev", //$NON-NLS-1$
+			"Contents", //$NON-NLS-1$
+			"Index", //$NON-NLS-1$
+			"Glossary", //$NON-NLS-1$
+			"Copyright", //$NON-NLS-1$
+			"Chapter", //$NON-NLS-1$
+			"Section", //$NON-NLS-1$
+			"Subsection", //$NON-NLS-1$
+			"Appendix", //$NON-NLS-1$
+			"Help", //$NON-NLS-1$
+			"Bookmark" //$NON-NLS-1$
+		};
+	
+	
+	@Override
+	protected String getReturnType() {
+		return "java.lang.String"; //$NON-NLS-1$
+	}
+
+	public List getPossibleValues() {
+		List ret = new ArrayList();		
+		for(int i=0;i<_linkTypes.length;i++){
+			PossibleValue pv = new PossibleValue(_linkTypes[i].toString(), _linkTypes[i].toString());
+			ret.add(pv);
+		}
+		return ret;
+	}
+
+	public boolean isValidValue(String value) {
+		if (value == null || value.trim().length() == 0){
+			addNewValidationMessage(Messages.LinkType_16);
+			return false;
+		}
+		return true;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LocaleType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LocaleType.java
new file mode 100644
index 0000000..09ebaf0
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LocaleType.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation., and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValue;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidELValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.PossibleValue;
+import org.eclipse.jst.jsf.metadataprocessors.features.ValidationMessage;
+
+/**
+ * Meta-data processing type representing a Locale Code type.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ */
+
+public class LocaleType extends EnumerationType implements IPossibleValues, IValidValues, IValidELValues{
+	private List<IPossibleValue> _pvs;
+	@Override
+	protected String getReturnType() {
+		return "java.util.Locale"; //$NON-NLS-1$
+	}
+
+	public List getPossibleValues() {
+		if (_pvs == null){
+			_pvs = new ArrayList();	
+			Locale[]_locales = getLocales();
+			for(int i=0;i<_locales.length;i++){
+				PossibleValue pv = new PossibleValue(_locales[i].toString(), _locales[i].getDisplayName());
+				_pvs.add(pv);
+			}
+			Collections.sort(_pvs, new Comparator(){
+				public int compare(Object o1, Object o2) {
+					PossibleValue pv1 = (PossibleValue)o1;
+					PossibleValue pv2 = (PossibleValue)o2;
+					return (pv1.getDisplayValue().compareTo(pv2.getDisplayValue()));
+				}
+			
+			});
+		}
+		return _pvs;
+	}
+
+	private Locale[] getLocales() {
+		return Locale.getAvailableLocales();
+	}
+
+	public boolean isValidValue(String value) {
+		Locale[]_locales = getLocales();
+		for(int i=0;i<_locales.length;i++){
+			Locale local = getLocales()[i];
+			if (local.toString().equals(value))
+				return true;
+		}
+		getValidationMessages().add(new ValidationMessage(Messages.LocaleType_1));
+		return false;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LongType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LongType.java
index 441abd7..a7791e9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LongType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/LongType.java
@@ -19,6 +19,7 @@
  * Meta-data processing type representing a long attribute value runtime type
  * that implements IValidValues, IDefaultValue, IValidELValues
  *  
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public class LongType extends NumberType {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/Messages.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/Messages.java
index 39f413f..447ef78 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/Messages.java
@@ -15,6 +15,10 @@
 
 /**
  * Message bundle for attributevalue types/features
+ * 
+ * <p>
+ * <b>Provisional API - subject to change</b>
+ * </p>
  */
 public class Messages extends NLS {
 	private static final String BUNDLE_NAME = "org.eclipse.jst.jsf.taglibprocessing.attributevalues.messages"; //$NON-NLS-1$
@@ -25,96 +29,1073 @@
 	 * see messages.properties
 	 */
 	public static String ActionType_navcase_display;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String ActionType_invalid_value;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
+	public static String ActionType_invalid_empty_value;
+	/**
+	 * see messages.properties
+	 */
 	public static String BooleanType_invalid_values;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
+	public static String ContentType_MIME_not_empty;
+	/**
+	 * see messages.properties
+	 */
 	public static String ComponentBindingType_invalid_value;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String ComponentIDType_invalid_as_el;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String ComponentIDType_invalid_value;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String DoubleType_invalid_double;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String DoubleType_invalid_member;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String FacesConfigConverterIDFeatures_converterid_empty;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String FacesConfigIdentifierType_invalid_converter_id;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String FacesConfigIdentifierType_invalid_validator_id;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String FacesConfigValidatorIDFeatures_validatorid_empty;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String IntegerType_invalid_integer;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String IntegerType_invalid_member;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String JavaClassType_invalid_type;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String JavaClassType_not_found;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String LongType_invalid_long;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String LongType_invalid_member;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String MethodBindingType_invalid_value;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_invalid;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_10;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_100;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_101;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_102;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_103;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_104;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_105;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_106;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_107;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_108;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_109;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_11;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_110;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_111;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_112;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_113;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_114;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_115;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_116;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_117;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_118;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_119;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_12;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_120;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_121;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_122;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_123;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_124;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_125;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_126;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_127;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_128;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_129;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_13;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_130;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_131;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_132;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_133;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_134;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_135;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_136;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_137;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_138;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_139;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_14;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_140;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_141;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_142;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_143;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_144;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_145;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_146;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_147;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_148;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_149;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_15;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_150;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_151;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_152;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_153;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_154;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_155;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_156;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_157;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_158;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_159;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_16;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_160;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_161;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_162;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_163;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_164;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_165;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_166;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_167;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_168;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_169;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_17;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_170;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_171;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_172;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_173;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_174;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_18;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_19;
+	/**
+	 * see messages.properties
+	 */
+	public static String CharacterType_0;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_2;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_20;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_21;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_22;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_23;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_24;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_25;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_26;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_27;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_28;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_29;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_3;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_30;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_31;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_32;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_33;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_34;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_35;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_36;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_37;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_38;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_39;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_4;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_40;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_41;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_42;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_43;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_44;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_45;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_46;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_47;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_48;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_49;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_5;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_50;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_51;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_52;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_53;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_54;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_55;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_56;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_57;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_58;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_59;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_6;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_60;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_61;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_62;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_63;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_64;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_65;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_66;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_67;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_68;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_69;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_7;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_70;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_71;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_72;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_73;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_74;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_75;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_76;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_77;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_78;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_79;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_8;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_80;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_81;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_82;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_83;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_84;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_85;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_86;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_87;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_88;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_89;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_9;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_0;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_1;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_7;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_9;
+	/**
+	 * see messages.properties
+	 */
+	public static String LinkType_16;
+	/**
+	 * see messages.properties
+	 */
+	public static String LocaleType_1;
+	/**
+	 * see messages.properties
+	 */
+	public static String WebPathType_1;
+	/**
+	 * see messages.properties
+	 */
+	public static String WebPathType_2;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_11;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_13;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_15;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_17;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_19;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_21;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_23;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_25;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_27;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_29;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_31;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_33;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_35;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_37;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_39;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_41;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_43;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_45;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_47;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_49;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_51;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_53;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_55;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_57;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_59;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_61;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_63;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_65;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_67;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_69;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_71;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_73;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_75;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_77;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_79;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_81;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_83;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_85;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_87;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_89;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_91;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_93;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_95;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_97;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_99;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_101;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_103;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_105;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_107;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_109;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_111;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_113;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_115;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_117;
+	/**
+	 * see messages.properties
+	 */
+	public static String LanguageCodeType_118;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_90;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_91;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_92;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_93;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_94;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_95;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_96;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_97;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_98;
+	/**
+	 * see messages.properties
+	 */
+	public static String CurrencyCodeType_99;
+	/**
+	 * see messages.properties
+	 */
 	public static String NumberType_max_val;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String NumberType_min_val;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
+	public static String RelativePathType_0;
+	/**
+	 * see messages.properties
+	 */
 	public static String StringType_invalid_value;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String ValueType_invalid_value;
-    /**
-     * see messages.properties
-     */
+	/**
+	 * see messages.properties
+	 */
 	public static String ValueType_invalid_value_without_setter;
+	/**
+	 * see messages.properties
+	 */
+	public static String LengthType_invalid_integer;
+	/**
+	 * see messages.properties
+	 */
+	public static String ColorType_invalid_color;
+
+	/**
+	 * see messages.properties
+	 */
+	public static String Bundle_not_found_rb;
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/MethodBindingType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/MethodBindingType.java
index 41ea21d..fbc20fa 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/MethodBindingType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/MethodBindingType.java
@@ -23,6 +23,8 @@
 
 /**
  * Meta-data processing type representing an method-binding attribute value runtime type
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public class MethodBindingType extends ExpressionBindingType implements IValidELValues, IValidValues{
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/NumberPatternType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/NumberPatternType.java
new file mode 100644
index 0000000..b5add42
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/NumberPatternType.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation., and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jst.jsf.metadataprocessors.AbstractRootTypeDescriptor;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.PossibleValue;
+
+/**
+ * Meta-data processing type representing a numeric pattern type.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ */
+
+public class NumberPatternType extends AbstractRootTypeDescriptor implements IPossibleValues{
+	//should we ever decide to validate the patterns, extend EnumerationType
+	final private static String[] PATTERNS = {					
+			"0.00", //$NON-NLS-1$
+			"#,##0", //$NON-NLS-1$
+			"#,##0.00", //$NON-NLS-1$
+			"#,##0;(#,##0)", //$NON-NLS-1$
+			"#,##0.00;(#,##0.00)", //$NON-NLS-1$
+			"0.##E0", //$NON-NLS-1$
+			"0%", //$NON-NLS-1$
+			"0.00%" //$NON-NLS-1$
+	};
+
+	public List getPossibleValues() {
+		List ret = new ArrayList();		
+		for (int i=0;i<PATTERNS.length;i++){
+			ret.add(new PossibleValue(PATTERNS[i]));
+		}
+		return ret;
+	}
+
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/NumberType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/NumberType.java
index bcaf192..4ee78b9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/NumberType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/NumberType.java
@@ -15,6 +15,8 @@
 
 /**
  * Abstract meta-data processing type representing a numeric attribute value runtime type
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public abstract class NumberType extends EnumerationType{
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ObjectType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ObjectType.java
index 9d13292..07120d4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ObjectType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ObjectType.java
@@ -13,6 +13,8 @@
 
 /**
  * Abstract meta-data processing type representing an Object attribute value runtime type
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public abstract class ObjectType extends DirectBindingType {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/PathType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/PathType.java
new file mode 100644
index 0000000..5f4f311
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/PathType.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.metadataprocessors.AbstractRootTypeDescriptor;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidationMessage;
+
+/**
+ * EXPERIMENTAL - may change or dissappear
+ *
+ */
+public abstract class PathType extends AbstractRootTypeDescriptor {
+
+	private IProject _project = null;
+	private final List<IValidationMessage> _validationMsgs = new ArrayList<IValidationMessage>(1);
+
+	/**
+	 * Constructor
+	 */
+	public PathType() {
+		super();
+	}
+
+	/**
+	 * @return IProject
+	 */
+	protected IProject getProject() {
+		if( _project == null )
+		{
+	        final IWorkspaceContextResolver wkspaceResolver =
+	            IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver( getStructuredDocumentContext() );
+	        _project = wkspaceResolver.getProject();
+		}
+		
+		return _project;
+	}
+
+	/**
+	 * @return list of {@link IValidationMessage}
+	 */
+	public List<IValidationMessage> getValidationMessages() {
+		return _validationMsgs;
+	}
+
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/RelativePathType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/RelativePathType.java
new file mode 100644
index 0000000..82dd380
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/RelativePathType.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.ValidationMessage;
+
+/**
+ * Path is relative to project
+ * <b>EXPERIMENTAL</b> - may change or dissappear
+ * 
+ */
+public class RelativePathType extends PathType implements
+		IMetaDataEnabledFeature, IValidValues{
+
+	public boolean isValidValue(String value) {
+		//is this a relative path, or absolute url?
+		try {
+			new URL(value);			
+			//not much else we what to do for now
+			return true;
+		} catch (MalformedURLException e) {
+			//is this a valid path relative to the 			
+			IProject project = getProject();
+			IFile  file= project.getFile(new Path(value));
+			if (! file.exists())
+				getValidationMessages().add(new ValidationMessage( value+Messages.RelativePathType_0));
+			
+			return getValidationMessages().size() == 0;
+		}
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ResourceBundleType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ResourceBundleType.java
new file mode 100644
index 0000000..65f2fc9
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ResourceBundleType.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * 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:
+ *    Vadim Dmitriev - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jst.jsf.core.internal.tld.LoadBundleUtil;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.ValidationMessage;
+
+/**
+ * Meta-data processing type representing a path to resource bundle on classpath
+ * Patch by Vadim Dmitriev.  See https://bugs.eclipse.org/bugs/show_bug.cgi?id=203307.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ * @author Vadim Dmitriev
+ * 
+ * 
+ */
+public class ResourceBundleType extends PathType implements IValidValues 
+{
+	public boolean isValidValue( String value )
+	{
+		try
+		{
+			IProject project = getProject();
+			IStorage bundle = LoadBundleUtil.getLoadBundleResource( project , value );
+			if( bundle != null )
+			{
+				return true;
+			}
+		}
+		catch (CoreException e) 
+		{
+			//error message is generated later
+		}
+		
+		final String message = 
+			MessageFormat.format(Messages.Bundle_not_found_rb, value); 
+		getValidationMessages().add(new ValidationMessage(message, "", IStatus.ERROR)); //$NON-NLS-1$
+		return false;
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ScriptType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ScriptType.java
new file mode 100644
index 0000000..9df83d4
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ScriptType.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import org.eclipse.jst.jsf.metadataprocessors.AbstractRootTypeDescriptor;
+
+/**
+ * Represents script type
+ * <p><b>Provisional API - subject to change</b></p>
+ */
+public class ScriptType extends AbstractRootTypeDescriptor {
+//
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/StringType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/StringType.java
index 5757792..fa8f3af 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/StringType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/StringType.java
@@ -24,6 +24,7 @@
  * Meta-data processing type representing a String attribute value runtime type
  * that implements IPossibleValues, IValidValues and IDefaultValues
  * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public class StringType extends EnumerationType implements IValidValues,
@@ -43,7 +44,7 @@
 			return true;
 		
 		//if the value is empty but there is a default value, consider it valid		
-		if (getDefaultValue() != null  && (value == null || value.trim().equals("")))
+		if (getDefaultValue() != null  && (value == null || value.trim().equals(""))) //$NON-NLS-1$
 			return true;
 		
 		if(! vals.contains(value)){
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/TimeZoneType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/TimeZoneType.java
new file mode 100644
index 0000000..56af13d
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/TimeZoneType.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation., and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.PossibleValue;
+
+/**
+ * Meta-data processing type representing a TimeZone Code type.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ */
+
+public class TimeZoneType extends EnumerationType implements IPossibleValues, IValidValues{
+	private String[] _timezones;
+	
+	@Override
+	protected String getReturnType() {
+		return "java.lang.String"; //$NON-NLS-1$
+	}
+
+	public List getPossibleValues() {
+		List ret = new ArrayList();		
+		for(int i=0;i<getTimeZones().length;i++){
+			PossibleValue pv = new PossibleValue(_timezones[i], _timezones[i]);
+			ret.add(pv);
+		}
+		return ret;
+	}
+
+	private String[] getTimeZones() {
+		if (_timezones == null)
+			_timezones = TimeZone.getAvailableIDs();
+		return _timezones;
+	}
+
+	public boolean isValidValue(String value) {
+		for(int i=0;i<getTimeZones().length;i++){
+			if (getTimeZones()[i].equals(value))
+				return true;
+		}
+		return false;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/URIType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/URIType.java
new file mode 100644
index 0000000..889959b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/URIType.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+
+/**
+ * URI Type: attribute values are Uniform Resource Identifiers (URIs), as defined in RFC 2396.
+ * URI attribute values may include full URIs such as http://www.foobar.com/ as well as relative URIs such as foo.html and ../foo/.
+ * EXPERIMENTAL - will change or dissappear
+ */
+public class URIType extends PathType implements IMetaDataEnabledFeature{
+	//TODO: add validation... refactor or WebPath, RelativePath, etc.
+	
+	/**
+	 * Constructor
+	 */
+	public URIType() {
+		//
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ValueBindingType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ValueBindingType.java
index d588ce5..ef9c455 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ValueBindingType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ValueBindingType.java
@@ -21,6 +21,7 @@
  * Meta-data processing type representing a Value Bound attribute value runtime type
  * that implements IValidValues
  * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public class ValueBindingType extends ExpressionBindingType implements IValidELValues{
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ValueType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ValueType.java
index a0406e5..7c03fae 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ValueType.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/ValueType.java
@@ -19,6 +19,7 @@
  * Meta-data processing type representing a "value" attribute 
  * that implements IValidValues and IValidELValues
  * 
+ * <p><b>Provisional API - subject to change</b></p>
  * @author Gerry Kessler - Oracle
  */
 public class ValueType extends ValueBindingType implements IValidValues, IValidELValues {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/WebPathType.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/WebPathType.java
new file mode 100644
index 0000000..c1c8c0d
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/WebPathType.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * 		Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.ValidationMessage;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.resources.IVirtualContainer;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
+
+/**
+ * Path relative to web root
+ * <b>EXPERIMENTAL</b> - may change or dissappear
+ *
+ */
+public class WebPathType extends PathType implements
+	IMetaDataEnabledFeature, IValidValues{
+
+	public boolean isValidValue(String value) {
+		//is this a relative path, or absolute url?
+		try {
+			URL url = new URL(value);			
+			//if file protocol, see if it is valid?  Otherwise assume ok.
+			if (url.getProtocol().equals("file")){ //$NON-NLS-1$
+				validateFileRelativeToWebRoot(url.getPath());
+			} 
+		} catch (MalformedURLException e) {
+			//is this a valid path relative to the 			
+			validateFileRelativeToWebRoot(value);						
+		}
+		return getValidationMessages().size() == 0;
+
+	}
+
+    private void validateFileRelativeToWebRoot(String value) {
+		IVirtualContainer webRoot = getWebRoot();
+		if (! webRoot.exists()){
+			getValidationMessages().add(new ValidationMessage( Messages.WebPathType_1));
+		} 
+		else {
+			IVirtualFile file = webRoot.getFile(new Path(value));
+			if (!file.exists()) {
+				//was this a valid file path string, or bogus url?
+				getValidationMessages().add(new ValidationMessage(Messages.WebPathType_2));
+			}									
+			//we could also validate the expected file-extensions from meta data
+		}
+		
+	}
+
+	private IVirtualContainer getWebRoot()
+    {
+        IVirtualContainer webRoot =
+            ComponentCore.createComponent(getProject()).getRootFolder();
+        	       
+        return webRoot;
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/messages.properties b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/messages.properties
index 27e867f..22ddc87 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/messages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/messages.properties
@@ -8,24 +8,253 @@
 # Contributors:
 #     Oracle Corporation - initial API and implementation
 ###############################################################################
- ##############################################################################*
- # Copyright (c) 2006 Oracle Corporation.
- # 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:
- #    Gerry Kessler/Oracle - initial API and implementation
- #    
- ################################################################################/
 IntegerType_invalid_integer=Value is not a valid integer.
 IntegerType_invalid_member=Value is not a member of the provided valid values
+LengthType_invalid_integer=Value is not a valid positive integer or positive integer percentage.
 LongType_invalid_long=Value is not a valid Long.
 LongType_invalid_member=Value is not a member of the provided valid values
 BooleanType_invalid_values=Valid values are "true" or "false"
+CurrencyCodeType_invalid=Invalid currency code
+CurrencyCodeType_10=Aruba, Guilders (also called Florins)
+CurrencyCodeType_100=Malta, Liri
+CurrencyCodeType_101=Mauritius, Rupees
+CurrencyCodeType_102=Maldives (Maldive Islands), Rufiyaa
+CurrencyCodeType_103=Malawi, Kwachas
+CurrencyCodeType_104=Mexico, Pesos
+CurrencyCodeType_105=Malaysia, Ringgits
+CurrencyCodeType_106=Mozambique, Meticais
+CurrencyCodeType_107=Namibia, Dollars
+CurrencyCodeType_108=Nigeria, Nairas
+CurrencyCodeType_109=Nicaragua, Cordobas
+CurrencyCodeType_11=Azerbaijan, Manats
+CurrencyCodeType_110=Norway, Krone
+CurrencyCodeType_111=Nepal, Nepal Rupees
+CurrencyCodeType_112=New Zealand, Dollars
+CurrencyCodeType_113=Oman, Rials
+CurrencyCodeType_114=Panama, Balboa
+CurrencyCodeType_115=Peru, Nuevos Soles
+CurrencyCodeType_116=Papua New Guinea, Kina
+CurrencyCodeType_117=Philippines, Pesos
+CurrencyCodeType_118=Pakistan, Rupees
+CurrencyCodeType_119=Poland, Zlotych
+CurrencyCodeType_12=Bosnia and Herzegovina, Convertible Marka
+CurrencyCodeType_120=Paraguay, Guarani
+CurrencyCodeType_121=Qatar, Rials
+CurrencyCodeType_122=Romania, Lei
+CurrencyCodeType_123=Russia, Rubles
+CurrencyCodeType_124=Rwanda, Rwanda Francs
+CurrencyCodeType_125=Saudi Arabia, Riyals
+CurrencyCodeType_126=Solomon Islands, Dollars
+CurrencyCodeType_127=Seychelles, Rupees
+CurrencyCodeType_128=Sudan, Dinars
+CurrencyCodeType_129=Sweden, Kronor
+CurrencyCodeType_13=Barbados, Dollars
+CurrencyCodeType_130=Singapore, Dollars
+CurrencyCodeType_131=Saint Helena, Pounds
+CurrencyCodeType_132=Slovenia, Tolars
+CurrencyCodeType_133=Slovakia, Koruny
+CurrencyCodeType_134=Sierra Leone, Leones
+CurrencyCodeType_135=Somalia, Shillings
+CurrencyCodeType_136=Seborga, Luigini
+CurrencyCodeType_137=Suriname, Dollars
+CurrencyCodeType_138=Principe and S\u00E3o Tome, Dobras
+CurrencyCodeType_139=El Salvador, Colones
+CurrencyCodeType_14=Bangladesh, Taka
+CurrencyCodeType_140=Syria, Pounds
+CurrencyCodeType_141=Swaziland, Emalangeni
+CurrencyCodeType_142=Thailand, Baht
+CurrencyCodeType_143=Tajikistan, Somoni
+CurrencyCodeType_144=Turkmenistan, Manats
+CurrencyCodeType_145=Tunisia, Dinars
+CurrencyCodeType_146=Tonga, Pa'anga
+CurrencyCodeType_147=Turkey, Liras [being phased out]
+CurrencyCodeType_148=Turkey, New Lira
+CurrencyCodeType_149=Trinidad and Tobago, Dollars
+CurrencyCodeType_15=Bulgaria, Leva
+CurrencyCodeType_150=Tuvalu, Tuvalu Dollars
+CurrencyCodeType_151=Taiwan, New Dollars
+CurrencyCodeType_152=Tanzania, Shillings
+CurrencyCodeType_153=Ukraine, Hryvnia
+CurrencyCodeType_154=Uganda, Shillings
+CurrencyCodeType_155=United States of America, Dollars
+CurrencyCodeType_156=Uruguay, Pesos
+CurrencyCodeType_157=Uzbekistan, Sums
+CurrencyCodeType_158=Venezuela, Bolivares
+CurrencyCodeType_159=Viet Nam, Dong
+CurrencyCodeType_16=Bahrain, Dinars
+CurrencyCodeType_160=Vanuatu, Vatu
+CurrencyCodeType_161=Samoa, Tala
+CurrencyCodeType_162=Communaut\u00E9 Financi\u00E8re Africaine BEAC Franc , Francs
+CurrencyCodeType_163=Silver, Ounces
+CurrencyCodeType_164=Gold, Ounces
+CurrencyCodeType_165=East Caribbean Dollars
+CurrencyCodeType_166=International Monetary Fund (IMF) Special Drawing Rights
+CurrencyCodeType_167=Communaut\u00E9 Financi\u00E8re Africaine BCEAO, Francs
+CurrencyCodeType_168=Palladium Ounces
+CurrencyCodeType_169=Comptoirs Francais du Pacifique, Francs
+CurrencyCodeType_17=Burundi, Francs
+CurrencyCodeType_170=Platinum, Ounces
+CurrencyCodeType_171=Yemen, Rials
+CurrencyCodeType_172=South Africa, Rand
+CurrencyCodeType_173=Zambia, Kwacha
+CurrencyCodeType_174=Zimbabwe, Zimbabwe Dollars
+CurrencyCodeType_18=Bermuda, Dollars
+CurrencyCodeType_19=Brunei Darussalam, Dollars
+CharacterType_0=Single unicode character is required
+CurrencyCodeType_2=United Arab Emirates, Dirhams
+CurrencyCodeType_20=Bolivia, Bolivianos
+CurrencyCodeType_21=Brazil, Brazil Real
+CurrencyCodeType_22=Bahamas, Dollars
+CurrencyCodeType_23=Bhutan, Ngultrum
+CurrencyCodeType_24=Botswana, Pulas
+CurrencyCodeType_25=Belarus, Rubles
+CurrencyCodeType_26=Belize, Dollars
+CurrencyCodeType_27=Canada, Dollars
+CurrencyCodeType_28=Congo/Kinshasa, Congolese Francs
+CurrencyCodeType_29=Switzerland, Francs
+CurrencyCodeType_3=Afghanistan, Afghanis
+CurrencyCodeType_30=Chile, Pesos
+CurrencyCodeType_31=China, Yuan Renminbi
+CurrencyCodeType_32=Colombia, Pesos
+CurrencyCodeType_33=Costa Rica, Colones
+CurrencyCodeType_34=Serbia, Dinars
+CurrencyCodeType_35=Cuba, Pesos
+CurrencyCodeType_36=Cape Verde, Escudos
+CurrencyCodeType_37=Cyprus, Pounds
+CurrencyCodeType_38=Czech Republic, Koruny
+CurrencyCodeType_39=Djibouti, Francs
+CurrencyCodeType_4=Albania, Leke
+CurrencyCodeType_40=Denmark, Kroner
+CurrencyCodeType_41=Dominican Republic, Pesos
+CurrencyCodeType_42=Algeria, Algeria Dinars
+CurrencyCodeType_43=Estonia, Krooni
+CurrencyCodeType_44=Egypt, Pounds
+CurrencyCodeType_45=Eritrea, Nakfa
+CurrencyCodeType_46=Ethiopia, Birr
+CurrencyCodeType_47=Euro Member Countries, Euro
+CurrencyCodeType_48=Fiji, Dollars
+CurrencyCodeType_49=Falkland Islands (Malvinas), Pounds
+CurrencyCodeType_5=Armenia, Drams
+CurrencyCodeType_50=United Kingdom, Pounds
+CurrencyCodeType_51=Georgia, Lari
+CurrencyCodeType_52=Guernsey, Pounds
+CurrencyCodeType_53=Ghana, Cedis
+CurrencyCodeType_54=Gibraltar, Pounds
+CurrencyCodeType_55=Gambia, Dalasi
+CurrencyCodeType_56=Guinea, Francs
+CurrencyCodeType_57=Guatemala, Quetzales
+CurrencyCodeType_58=Guyana, Dollars
+CurrencyCodeType_59=Hong Kong, Dollars
+CurrencyCodeType_6=Netherlands Antilles, Guilders (also called Florins)
+CurrencyCodeType_60=Honduras, Lempiras
+CurrencyCodeType_61=Croatia, Kuna
+CurrencyCodeType_62=Haiti, Gourdes
+CurrencyCodeType_63=Hungary, Forint
+CurrencyCodeType_64=Indonesia, Rupiahs
+CurrencyCodeType_65=Israel, New Shekels
+CurrencyCodeType_66=Isle of Man, Pounds
+CurrencyCodeType_67=India, Rupees
+CurrencyCodeType_68=Iraq, Dinars
+CurrencyCodeType_69=Iran, Rials
+CurrencyCodeType_7=Angola, Kwanza
+CurrencyCodeType_70=Iceland, Kronur
+CurrencyCodeType_71=Jersey, Pounds
+CurrencyCodeType_72=Jamaica, Dollars
+CurrencyCodeType_73=Jordan, Dinars
+CurrencyCodeType_74=Japan, Yen
+CurrencyCodeType_75=Kenya, Shillings
+CurrencyCodeType_76=Kyrgyzstan, Soms
+CurrencyCodeType_77=Cambodia, Riels
+CurrencyCodeType_78=Comoros, Francs
+CurrencyCodeType_79=Korea (North), Won
+CurrencyCodeType_8=Argentina, Pesos
+CurrencyCodeType_80=Korea (South), Won
+CurrencyCodeType_81=Kuwait, Dinars
+CurrencyCodeType_82=Cayman Islands, Dollars
+CurrencyCodeType_83=Kazakhstan, Tenge
+CurrencyCodeType_84=Laos, Kips
+CurrencyCodeType_85=Lebanon, Pounds
+CurrencyCodeType_86=Sri Lanka, Rupees
+CurrencyCodeType_87=Liberia, Dollars
+CurrencyCodeType_88=Lesotho, Maloti
+CurrencyCodeType_89=Lithuania, Litai
+CurrencyCodeType_9=Australia, Dollars
+LanguageCodeType_0=ar Arabic (needs subtype)
+LanguageCodeType_1=Invalid language code
+LanguageCodeType_101=tr Turkish
+LanguageCodeType_103=ts Tsonga
+LanguageCodeType_105=uk Ukrainian
+LanguageCodeType_107=ur Urdu
+LanguageCodeType_109=vi Vietnamese
+LanguageCodeType_11=br Breton
+LanguageCodeType_111=xh Xhosa
+LanguageCodeType_113=yi Yiddish
+LanguageCodeType_115=zh Chinese (needs subtype)
+LanguageCodeType_117=zu Zulu
+LanguageCodeType_118=af Afrikaans
+LanguageCodeType_13=ca Catalan
+LanguageCodeType_15=cs Czech
+LanguageCodeType_17=da Danish
+LanguageCodeType_19=de German (Standard)
+LanguageCodeType_21=el Greek
+LanguageCodeType_23=en English
+LanguageCodeType_25=es Spanish (Spain)
+LanguageCodeType_27=et Estonian
+LanguageCodeType_29=eu Basque
+LanguageCodeType_31=fa Farsi
+LanguageCodeType_33=fi Finnish
+LanguageCodeType_35=fo Faeroese
+LanguageCodeType_37=fr French (Standard)
+LanguageCodeType_39=gd Gaelic (Scotland)
+LanguageCodeType_41=he Hebrew
+LanguageCodeType_43=hi Hindi
+LanguageCodeType_45=hr Croatian
+LanguageCodeType_47=hu Hungarian
+LanguageCodeType_49=id Indonesian
+LanguageCodeType_51=is Icelandic
+LanguageCodeType_53=it Italian (Standard)
+LanguageCodeType_55=ja Japanese
+LanguageCodeType_57=ko Korean
+LanguageCodeType_59=lt Lithuanian
+LanguageCodeType_61=lv Latvian
+LanguageCodeType_63=mk Macedonian
+LanguageCodeType_65=ms Malaysian
+LanguageCodeType_67=mt Maltese
+LanguageCodeType_69=nl Dutch (Standard)
+LanguageCodeType_7=be Belarusian
+LanguageCodeType_71=no Norwegian (Bokmal/Nynorsk)
+LanguageCodeType_73=pl Polish
+LanguageCodeType_75=pt Portuguese (Standard)
+LanguageCodeType_77=rm Rhaeto-Romanic
+LanguageCodeType_79=ro Romanian
+LanguageCodeType_81=ru Russian
+LanguageCodeType_83=sk Slovak
+LanguageCodeType_85=sl Slovenian
+LanguageCodeType_87=sq Albanian
+LanguageCodeType_89=sr Serbian (Cyrillic/Latin)
+LanguageCodeType_9=bg Bulgarian
+LinkType_16=Link type value must not be empty
+LocaleType_1=Invalid locale value
+WebPathType_1=Web root path not found
+WebPathType_2=Invalid value
+LanguageCodeType_91=sv Swedish
+LanguageCodeType_93=sx Sutu
+LanguageCodeType_95=sz Sami (Lappish)
+LanguageCodeType_97=th Thai
+LanguageCodeType_99=tn Setswana
+CurrencyCodeType_90=Latvia, Lati
+CurrencyCodeType_91=Libya, Dinars
+CurrencyCodeType_92=Morocco, Dirhams
+CurrencyCodeType_93=Moldova, Lei
+CurrencyCodeType_94=Madagascar, Ariary
+CurrencyCodeType_95=Macedonia, Denars
+CurrencyCodeType_96=Myanmar (Burma), Kyats
+CurrencyCodeType_97=Mongolia, Tugriks
+CurrencyCodeType_98=Macau, Patacas
+CurrencyCodeType_99=Mauritania, Ouguiyas
 NumberType_max_val=Value exceeds maximum of {0}
 NumberType_min_val=Value is less than minimum of {0}
+RelativePathType_0=: path not found
 DoubleType_invalid_double=Value is not a valid double.
 DoubleType_invalid_member=Value is not a member of the provided valid values
 StringType_invalid_value=Value is not valid.
@@ -38,8 +267,12 @@
 ComponentBindingType_invalid_value=The 'binding' attribute requires an EL value binding reference to a UIComponent.
 ComponentIDType_invalid_as_el='id' attributes must be Strings.  Consider using 'binding' attribute instead.
 ComponentIDType_invalid_value=The 'id' attribute must be a non-zero length String and be uniquely defined on the page.
-ActionType_invalid_value=The action attribute must be a non-zero length String.
+ActionType_invalid_value=The action value does not match a navigation case outcome.
+ActionType_invalid_empty_value=The action attribute must be a non-zero length String or a method binding matching a navigation case outcome.
 ActionType_navcase_display={0}: goto {1} 
+ContentType_MIME_not_empty=Content (MIME) type must not be empty
 MethodBindingType_invalid_value=MethodBinding attribute values must be EL expressions.
 JavaClassType_invalid_type=Value for type attribute must be valid Java class and not empty.
 JavaClassType_not_found=Java type not found, not instantiable, or does implement correct interfaces or extend correct superclass.
+ColorType_invalid_color=Value is not a valid color.
+Bundle_not_found_rb=Resource bundle {0} cannot be found on classpath 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/package-info.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/package-info.java
new file mode 100644
index 0000000..8cd9907
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/taglibprocessing/attributevalues/package-info.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Gerry Kessler/Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+
+/**
+ * This package is used to provide types for tag attribute values so that the 
+ * org.eclipse.jst.jsf.core.metadataprocessors.features can be applied.  
+ * 
+ * A type is added using the org.eclipse.jst.jsf.core.AttributeValueRuntimeTypes extension point.
+ * These types are referenced using the design-time metadata framework in org.eclipse.jst.jsf.common
+ * The org.eclipse.jst.jsf.metadataprocessors.features provides the interesting tooling services based upon the type.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ */
+package org.eclipse.jst.jsf.taglibprocessing.attributevalues;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/AbstractXMLViewValidationStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/AbstractXMLViewValidationStrategy.java
new file mode 100644
index 0000000..bb54b84
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/AbstractXMLViewValidationStrategy.java
@@ -0,0 +1,39 @@
+package org.eclipse.jst.jsf.validation.internal;
+
+import org.eclipse.jst.jsf.common.dom.DOMAdapter;
+import org.eclipse.jst.jsf.common.internal.policy.IIdentifiable;
+
+/**
+ * A strategy that validates JSF views that are defined in XML format.
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class AbstractXMLViewValidationStrategy implements IIdentifiable<String>
+{
+    private final String            _id;
+
+    /**
+     * @param id
+     */
+    public AbstractXMLViewValidationStrategy(final String id)
+    {
+        _id = id;
+    }
+
+    /**
+     * @param domAdapter
+     */
+    public abstract void validate(final DOMAdapter  domAdapter);
+
+    /**
+     * @param domAdapter
+     * @return true if this validator is interested in validating this node
+     */
+    public abstract boolean isInteresting(final DOMAdapter  domAdapter);
+
+    public final String getId()
+    {
+        return _id;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/ELValidationPreferences.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/ELValidationPreferences.java
index aa02a63..38b80de 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/ELValidationPreferences.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/ELValidationPreferences.java
@@ -390,7 +390,8 @@
                 return Diagnostic.WARNING;
             case DiagnosticFactory.BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE_ID:
                 return Diagnostic.ERROR;
-            
+            case DiagnosticFactory.MEMBER_IS_INTERMEDIATE_ID:
+                return Diagnostic.WARNING;
             default:
                 throw new IllegalArgumentException("Diagnostic Id: "+ diagnosticId +" is out of range");
         }
@@ -462,7 +463,8 @@
                 return BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME;
             case DiagnosticFactory.BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE_ID:
                 return BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE;
-            
+            case DiagnosticFactory.MEMBER_IS_INTERMEDIATE_ID:
+                return MEMBER_IS_INTERMEDIATE;
             default:
                 throw new IllegalArgumentException("Diagnostic Id: "+ diagnosticId +" is out of range");
         }
@@ -590,6 +592,10 @@
         {
             return DiagnosticFactory.BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE_ID;
         }
+        else if (MEMBER_IS_INTERMEDIATE.equals(key))
+        {
+            return DiagnosticFactory.MEMBER_IS_INTERMEDIATE_ID;
+        }
         else
         {
             throw new IllegalArgumentException("Severity Key: "+ key);
@@ -753,6 +759,12 @@
     public final static String BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE = 
         createQualifiedKeyName("BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE");
     
+    /**
+     * preference key.  Match to DiagnosticFactory constants
+     */
+    public final static String MEMBER_IS_INTERMEDIATE =
+        createQualifiedKeyName("MEMBER_IS_INTERMEDIATE");
+    
     // values
     /**
      * Severity levels of problems
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/IJSFViewValidator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/IJSFViewValidator.java
new file mode 100644
index 0000000..6058c96
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/IJSFViewValidator.java
@@ -0,0 +1,78 @@
+package org.eclipse.jst.jsf.validation.internal;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+
+/**
+ * A validator for JSF views
+ * 
+ * @author cbateman
+ * 
+ */
+public interface IJSFViewValidator
+{
+    /**
+     * Validate the entire view file and report an problems using reporter.
+     * 
+     * @param viewFile
+     * @param reporter
+     */
+    void validateView(final IFile viewFile, final IValidationReporter reporter);
+
+    /**
+     * Validate only those regions specified in the viewFile and report problems
+     * using reporter.
+     * 
+     * @param viewFile
+     * @param regions
+     * @param reporter 
+     */
+    void validateView(final IFile viewFile,
+            final IStructuredDocumentRegion[] regions,
+            final IValidationReporter reporter);
+
+    /**
+     * Implemented by callers of the view validator to receive notification
+     * of problems discovered during validation.
+     *
+     */
+    public interface IValidationReporter
+    {
+        /**
+         * @param problem
+         * @param start
+         * @param length
+         */
+        void report(final Diagnostic problem, final int start, final int length);
+
+        /**
+         * @param message
+         * @deprecated internally by design
+         */
+        void report(final IMessage message);
+    }
+    
+    /**
+     * An empty adapter implementation of IValidationReporter.  All methods
+     * are noops.
+     * 
+     * @author cbateman
+     *
+     */
+    public class ReporterAdapter implements IValidationReporter
+    {
+
+        public void report(Diagnostic problem, int start, int length)
+        {
+            // do nothing
+        }
+
+        public void report(IMessage message)
+        {
+            // do nothing
+        }
+        
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/IJSPSemanticValidatorTest.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/IJSPSemanticValidatorTest.java
index f6d00af..0387541 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/IJSPSemanticValidatorTest.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/IJSPSemanticValidatorTest.java
@@ -2,29 +2,30 @@
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
-import org.eclipse.wst.validation.internal.provisional.core.IReporter;
-import org.w3c.dom.Element;
+import org.eclipse.jst.jsf.core.internal.region.Region2ElementAdapter;
+import org.eclipse.jst.jsf.validation.internal.IJSFViewValidator.IValidationReporter;
 
 /**
- * Exposes certain private members for use by testing. 
+ * Exposes certain private members for use by testing.
  * 
  * NOT intended for use by production code.
  * 
  * @author cbateman
  *
  */
-public interface IJSPSemanticValidatorTest 
+public interface IJSPSemanticValidatorTest
 {
-	/**
-	 * Proxies the internal call to validate the containment of a particular
-	 * tag. 
-	 * 
-	 * @param node
-	 * @param uri
-	 * @param tagName
-	 * @param reporter
-	 * @param file
-	 * @param context
-	 */
-	void validateContainment(Element node, String uri, String tagName, IReporter reporter, IFile file, IStructuredDocumentContext context);
+    /**
+     * Proxies the internal call to validate the containment of a particular
+     * tag.
+     * 
+     * @param adapter
+     * @param node
+     * @param uri
+     * @param tagName
+     * @param reporter
+     * @param file
+     * @param context
+     */
+    void validateContainment(Region2ElementAdapter adapter, IValidationReporter reporter, IFile file, IStructuredDocumentContext context);
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/JSFValidationContext.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/JSFValidationContext.java
new file mode 100644
index 0000000..766e87f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/JSFValidationContext.java
@@ -0,0 +1,126 @@
+package org.eclipse.jst.jsf.validation.internal;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler;
+import org.eclipse.jst.jsf.designtime.resolver.IStructuredDocumentSymbolResolverFactory;
+import org.eclipse.jst.jsf.validation.internal.IJSFViewValidator.IValidationReporter;
+import org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory;
+
+/**
+ * A context object used pass JSF validation information around. Not related to
+ * the model context framework.
+ * 
+ * @author cbateman
+ * 
+ */
+public final class JSFValidationContext
+{
+    private final ValidationPreferences _prefs;
+    private final boolean               _isIncremental;
+    private final IDTViewHandler        _adapter;
+    private final DiagnosticFactory     _diagnosticFactory;
+    private final IFile                 _file;
+    private final IValidationReporter   _reporter;
+    private final IStructuredDocumentSymbolResolverFactory _symbolResolverFactory;
+
+    /**
+     * @param isIncremental --
+     *            true if this is "as-you-type" validation, false if this is
+     *            "Build" or "Run Validation" validation *
+     * @param prefs
+     * @param adapter 
+     * @param diagnosticFactory 
+     * @param file
+     * @param reporter
+     * @param symbolResolveFactory 
+     */
+    public JSFValidationContext(final boolean isIncremental,
+            final ValidationPreferences prefs,
+            final IDTViewHandler adapter,
+            final DiagnosticFactory diagnosticFactory, final IFile file,
+            final IValidationReporter reporter, final IStructuredDocumentSymbolResolverFactory symbolResolveFactory)
+    {
+        super();
+        _isIncremental = isIncremental;
+        _prefs = prefs;
+        _adapter = adapter;
+        _diagnosticFactory = diagnosticFactory;
+        _file = file;
+        _reporter = reporter;
+        _symbolResolverFactory = symbolResolveFactory;
+    }
+
+    /**
+     * 
+     * @return true if user preferences say we should do EL validation, false
+     *         otherwise
+     */
+    public final boolean shouldValidateEL()
+    {
+        _prefs.load();
+        if (_isIncremental)
+        {
+            return _prefs.getElPrefs().isEnableIncrementalValidation();
+        }
+
+        return _prefs.getElPrefs().isEnableBuildValidation();
+    }
+
+
+    /**
+     * @return the view handler
+     */
+    public IDTViewHandler getAdapter()
+    {
+        return _adapter;
+    }
+
+    /**
+     * @return the validator
+     */
+//    public IValidator getValidator()
+//    {
+//        return _validator;
+//    }
+
+    /**
+     * @return validation preferences
+     */
+    public ValidationPreferences getPrefs()
+    {
+        return _prefs;
+    }
+
+    /**
+     * @return diagnostic factory
+     */
+    public DiagnosticFactory getDiagnosticFactory()
+    {
+        return _diagnosticFactory;
+    }
+
+    /**
+     * @return the file
+     */
+    public IFile getFile()
+    {
+        return _file;
+    }
+
+    /**
+     * @return the reporter.
+     */
+    public IValidationReporter getReporter()
+    {
+        return _reporter;
+    }
+
+    /**
+     * @return the symbol resolver factory for this context
+     */
+    public IStructuredDocumentSymbolResolverFactory getSymbolResolverFactory()
+    {
+        return _symbolResolverFactory;
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/JSFValidatorFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/JSFValidatorFactory.java
new file mode 100644
index 0000000..5f5ccef
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/JSFValidatorFactory.java
@@ -0,0 +1,18 @@
+package org.eclipse.jst.jsf.validation.internal;
+
+/**
+ * A factory that is to construct JSF validators
+ * 
+ * @author cbateman
+ *
+ */
+public class JSFValidatorFactory
+{
+    /**
+     * @return a default validator for XML-defined views.
+     */
+    public static IJSFViewValidator createDefaultXMLValidator()
+    {
+        return new XMLViewDefnValidator();
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/LocalizedMessage.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/LocalizedMessage.java
new file mode 100644
index 0000000..f6ca4e7
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/LocalizedMessage.java
@@ -0,0 +1,78 @@
+/**
+ * 
+ */
+package org.eclipse.jst.jsf.validation.internal;
+
+import java.util.Locale;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.wst.validation.internal.core.Message;
+
+/**
+ * Localized version of the message.
+ * 
+ * @author cbateman
+ *
+ */
+public class LocalizedMessage extends Message {
+
+    private String _message = null;
+
+    /**
+     * @param severity
+     * @param messageText
+     */
+    public LocalizedMessage(int severity, String messageText) {
+        this(severity, messageText, null);
+    }
+
+    /**
+     * @param severity
+     * @param messageText
+     * @param targetObject
+     */
+    public LocalizedMessage(int severity, String messageText, IResource targetObject) {
+        this(severity, messageText, (Object) targetObject);
+    }
+
+    /**
+     * @param severity
+     * @param messageText
+     * @param targetObject
+     */
+    public LocalizedMessage(int severity, String messageText, Object targetObject) {
+        super(null, severity, null);
+        setLocalizedMessage(messageText);
+        setTargetObject(targetObject);
+    }
+
+    /**
+     * @param message
+     */
+    public void setLocalizedMessage(String message) {
+        _message = message;
+    }
+
+    /**
+     * @return the message
+     */
+    public String getLocalizedMessage() {
+        return _message;
+    }
+
+    public String getText() {
+        return getLocalizedMessage();
+    }
+
+    public String getText(ClassLoader cl) {
+        return getLocalizedMessage();
+    }
+
+    public String getText(Locale l) {
+        return getLocalizedMessage();
+    }
+
+    public String getText(Locale l, ClassLoader cl) {
+        return getLocalizedMessage();
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/XMLViewDefnValidator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/XMLViewDefnValidator.java
new file mode 100644
index 0000000..b1e1275
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/XMLViewDefnValidator.java
@@ -0,0 +1,189 @@
+package org.eclipse.jst.jsf.validation.internal;
+
+import java.io.IOException;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.core.internal.region.Region2AttrAdapter;
+import org.eclipse.jst.jsf.core.internal.region.Region2ElementAdapter;
+import org.eclipse.jst.jsf.core.internal.region.Region2ElementAdapter.NoElementException;
+import org.eclipse.jst.jsf.designtime.DTAppManagerUtil;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler;
+import org.eclipse.jst.jsf.designtime.resolver.IStructuredDocumentSymbolResolverFactory;
+import org.eclipse.jst.jsf.designtime.resolver.StructuredDocumentSymbolResolverFactory;
+import org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory;
+import org.eclipse.jst.jsf.validation.internal.strategy.AttributeValidatingStrategy;
+import org.eclipse.jst.jsf.validation.internal.strategy.ContainmentValidatingStrategy;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+
+/**
+ * Validator for JSF view definitions that are structured in XML format
+ * 
+ * @author cbateman
+ * 
+ */
+public class XMLViewDefnValidator implements IJSFViewValidator
+{
+    // TODO: should the source validator be a separate class in jsp.ui?
+    // problem with simple split off is that preference must also be split off
+    static final boolean DEBUG;
+    static
+    {
+        final String value = Platform
+        .getDebugOption("org.eclipse.jst.jsf.core/validation"); //$NON-NLS-1$
+        DEBUG = value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$
+    }
+
+    // default.  Overridable by calling setSymbolResolverFactory
+    private IStructuredDocumentSymbolResolverFactory   _symbolResolverFactory =
+        StructuredDocumentSymbolResolverFactory.getInstance();
+
+    /**
+     * Validates a JSP tag.
+     * 
+     * Currently only attribute values with supplied annotation meta-data is
+     * being validated. Also, only JSF EL is being validated and not JSP EL.
+     * 
+     * This method may be extended in the future to validate tag semantics an
+     * other cross attribute validations.
+     * 
+     * @param container
+     * @param jsfValidationContext 
+     * 
+     */
+    private void validateTag(final IStructuredDocumentRegion container,
+            final JSFValidationContext jsfValidationContext, 
+            final ContainmentValidatingStrategy containmentStrategy)
+    {
+        try
+        {
+            final Region2ElementAdapter regionAdapter = new Region2ElementAdapter(
+                    container);
+
+//            final IStructuredDocumentContext elementContext = 
+//                IStructuredDocumentContextFactory.INSTANCE
+//                    .getContext(container.getParentDocument(), container
+//                            .getStartOffset());
+
+            if (containmentStrategy.isInteresting(regionAdapter))
+            {
+                containmentStrategy.validate(regionAdapter);
+            }
+
+            final AttributeValidatingStrategy  strategy =
+                new AttributeValidatingStrategy(jsfValidationContext);
+
+            for (final Region2AttrAdapter attrAdapter : regionAdapter
+                    .getAttributes().values())
+            {
+                if (strategy.isInteresting(attrAdapter))
+                {
+                    strategy.validate(attrAdapter);
+                }
+            }
+        }
+        catch (NoElementException ne)
+        {
+            // XXX:
+        }
+    }
+
+    public void validateView(final IFile viewFile, final IValidationReporter reporter)
+    {
+        IStructuredModel model = null;
+        if (DEBUG)
+        {
+            System.out.println("executing JSPSemanticsValidator.validateFile");
+        }
+
+        try
+        {
+            final JSFValidationContext jsfValidationContext =
+                createValidationContext(false, viewFile, reporter);
+
+            if (jsfValidationContext == null)
+            {
+                return;
+            }
+
+            model = StructuredModelManager.getModelManager().getModelForRead(
+                    viewFile);
+
+            final IStructuredDocument structuredDoc =
+                model.getStructuredDocument();
+            final IStructuredDocumentRegion[] regions =
+                structuredDoc.getStructuredDocumentRegions();
+            validateRegions(regions, jsfValidationContext, new ContainmentValidatingStrategy(jsfValidationContext));
+        }
+        catch (final CoreException e)
+        {
+            JSFCorePlugin.log("Error validating JSF", e);
+        }
+        catch (final IOException e)
+        {
+            JSFCorePlugin.log("Error validating JSF", e);
+        }
+        finally
+        {
+            if (null != model)
+            {
+                model.releaseFromRead();
+            }
+        }
+    }
+
+    public void validateView(IFile viewFile,
+            IStructuredDocumentRegion[] regions, IValidationReporter reporter)
+    {
+        final JSFValidationContext jsfValidationContext =
+            createValidationContext(true, viewFile, reporter);
+
+        if (jsfValidationContext == null)
+        {
+            return;
+        }
+
+        validateRegions(regions, jsfValidationContext, new ContainmentValidatingStrategy(jsfValidationContext));
+    }
+    
+    private void validateRegions(final IStructuredDocumentRegion[] regions, 
+                                 final JSFValidationContext context,
+                                 final ContainmentValidatingStrategy containmentValidator)
+    {
+        for (final IStructuredDocumentRegion curNode : regions)
+        {
+            if (curNode.getFirstRegion().getType() == DOMRegionContext.XML_TAG_OPEN)
+            {
+                validateTag(curNode, context, containmentValidator);
+            }
+        }
+    }
+
+    private JSFValidationContext createValidationContext(
+            final boolean isIncremental, final IFile file,
+            final IValidationReporter reporter)
+    {
+        final ValidationPreferences prefs = new ValidationPreferences(
+                JSFCorePlugin.getDefault().getPreferenceStore());
+        prefs.load();
+        final DiagnosticFactory diagnosticFactory = new DiagnosticFactory();
+
+        final IDTViewHandler viewHandler = DTAppManagerUtil.getViewHandler(file
+                .getProject());
+
+        // only validate files that our designtime supports
+        if (viewHandler == null || !viewHandler.supportsViewDefinition(file))
+        {
+            return null;
+        }
+
+        return new JSFValidationContext(isIncremental, prefs, viewHandler,
+                diagnosticFactory, file, reporter, _symbolResolverFactory);
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AppConfigValidationUtil.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AppConfigValidationUtil.java
index 6746274..92af976 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AppConfigValidationUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AppConfigValidationUtil.java
@@ -53,24 +53,26 @@
      * 
      * @param fullyQualifiedName
      * @param instanceOf 
+     * @param mustBeAClass 
      * @param project 
      * @return null if no problems or a Message if problem found
      */
     public static IMessage validateClassName(final String fullyQualifiedName, 
                                              final String instanceOf,
+                                             final boolean mustBeAClass,
                                              final IProject project)
     {
         try
         {
             IType type = getType(project, fullyQualifiedName);
-            if (type == null)
+            if (type == null || !type.exists())
             {
                 return DiagnosticFactory
                         .create_CANNOT_FIND_CLASS_NAME(fullyQualifiedName);
             }
             
             // must be a class, not an interface or enum
-            if (!type.isClass())
+            if (mustBeAClass && !type.isClass())
             {
                 return DiagnosticFactory
                         .create_FULLY_QUALIFIED_NAME_MUST_BE_A_CLASS
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ApplicationValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ApplicationValidationVisitor.java
index 2c2bd31..1dc04c9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ApplicationValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ApplicationValidationVisitor.java
@@ -139,7 +139,7 @@
          */
         public ActionListenerValidationVisitor(final String version) {
             super(FacesConfigPackage.eINSTANCE.getApplicationType_ActionListener(),
-                    version,"javax.faces.event.ActionListener");
+                    version,"javax.faces.event.ActionListener", true);
         }
     }
     
@@ -150,7 +150,7 @@
          */
         public NavigationHandlerValidationVisitor(final String version) {
             super(FacesConfigPackage.eINSTANCE.getApplicationType_NavigationHandler(),
-                    version,"javax.faces.application.NavigationHandler");
+                    version,"javax.faces.application.NavigationHandler", true);
         }
     }
     
@@ -159,7 +159,7 @@
         ViewHandlerValidationVisitor(final String version)
         {
             super(FacesConfigPackage.eINSTANCE.getApplicationType_ViewHandler(),
-                    version,"javax.faces.application.ViewHandler");
+                    version,"javax.faces.application.ViewHandler", true);
         }
     }
     
@@ -167,8 +167,10 @@
     {
         StateManagerValidationVisitior(final String version)
         {
+            // must a concrete class with a zero arg constructor:
+            //   JSF1.1_3.2.3.2 and JSF1.2_3.2.4.2
             super(FacesConfigPackage.eINSTANCE.getApplicationType_StateManager(),
-                    version,"javax.faces.application.StateManager");
+                    version,"javax.faces.application.StateManager", true);
         }    
     }
     
@@ -177,7 +179,7 @@
         PropertyResolverValidationVisitor(final String version)
         {
             super(FacesConfigPackage.eINSTANCE.getApplicationType_PropertyResolver(),
-                    version,"javax.faces.el.PropertyResolver");
+                    version,"javax.faces.el.PropertyResolver", true);
         }
 
         protected void doValidate(EObject object, List messages, IFile file) {
@@ -201,7 +203,7 @@
         VariableResolverValidationVisitor(final String version)
         {
             super(FacesConfigPackage.eINSTANCE.getApplicationType_VariableResolver(),
-                    version, "javax.faces.el.VariableResolver");
+                    version, "javax.faces.el.VariableResolver", true);
         }
 
         protected void doValidate(EObject object, List messages, IFile file) {
@@ -224,8 +226,10 @@
     {
         ELResolverValidationVisitor(final String version)
         {
+            // must be a class and have zero-arg constructor
+            //   JSF1.2_5.6.1.4
             super(FacesConfigPackage.eINSTANCE.getApplicationType_ELResolver(),
-                    version, "javax.el.ELResolver");
+               version, "javax.el.ELResolver", true);
         }
 
         protected void doValidate(EObject object, List messages, IFile file) {
@@ -249,16 +253,20 @@
     private abstract static class ApplicationClassNameBasedValidationVisitor extends ClassNameEObjectValidationVisitor
     {
         private final String _instanceOf;
+        private final boolean _mustBeClass;
         
         /**
          * @param feature 
          * @param version 
          * @param instanceOf 
+         * @param mustBeClass 
          */
         protected ApplicationClassNameBasedValidationVisitor(EStructuralFeature feature,
-                final String version, final String instanceOf) {
+                final String version, final String instanceOf, final boolean mustBeClass) 
+        {
             super(feature, version);
             _instanceOf = instanceOf;
+            _mustBeClass = mustBeClass;
         }
 
         protected String getFullyQualifiedName(EObject eobj) 
@@ -273,6 +281,11 @@
             return null;
         }
 
+        @Override
+        protected boolean mustBeClass() {
+            return _mustBeClass;
+        }
+
         protected EObjectValidationVisitor[] getChildNodeValidators() {
             // no children
             return NO_CHILDREN;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AttributeValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AttributeValidationVisitor.java
index 291c802..2ddd7e8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AttributeValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/AttributeValidationVisitor.java
@@ -71,6 +71,13 @@
         protected EObjectValidationVisitor[] getChildNodeValidators() {
             return NO_CHILDREN;
         }
+
+        @Override
+        protected boolean mustBeClass() 
+        {
+            // attribute could be a class or an enum
+            return false;
+        }
         
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ClassNameEObjectValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ClassNameEObjectValidationVisitor.java
index 3757298..0c1e18c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ClassNameEObjectValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ClassNameEObjectValidationVisitor.java
@@ -41,9 +41,8 @@
         fullyQualifiedName = fullyQualifiedName == null ? "" : fullyQualifiedName;
         addMessageInfo(messages,  
             AppConfigValidationUtil
-                .validateClassName(fullyQualifiedName, getInstanceOf(), 
-                        file.getProject())
-                        ,object, file);
+                .validateClassName(fullyQualifiedName, getInstanceOf()
+                        , false, file.getProject()),object, file);
     }
 
     /**
@@ -56,4 +55,10 @@
      * @return a fully-qualified 
      */
     protected abstract String getInstanceOf();
+    
+    /**
+     * @return true if the class being named must be a class
+     * and may not be an enum or interface
+     */
+    protected abstract boolean mustBeClass();
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ComponentValidatorVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ComponentValidatorVisitor.java
index 0743670..3a891ae 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ComponentValidatorVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ComponentValidatorVisitor.java
@@ -72,6 +72,12 @@
         protected EObjectValidationVisitor[] getChildNodeValidators() {
             return NO_CHILDREN;
         }
+
+        @Override
+        protected boolean mustBeClass() {
+            // must a class
+            return true;
+        }
     }
     
     private static class ComponentFacetValidationVisitor extends EObjectValidationVisitor
@@ -115,7 +121,7 @@
                     String nameValue = name.getTextContent().trim();
 
                     // TODO: isJavaIdentifierStart seems broken...
-                    if (Character.isJavaIdentifierStart(nameValue.charAt(0)));
+                    if (Character.isJavaIdentifierStart(nameValue.charAt(0)))
                     {
                         isValid = true;
                         for (int i = 1; i < nameValue.length(); i++)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ConverterValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ConverterValidationVisitor.java
index d46999c..06b0377 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ConverterValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ConverterValidationVisitor.java
@@ -70,6 +70,12 @@
         protected EObjectValidationVisitor[] getChildNodeValidators() {
             return NO_CHILDREN;
         }
+
+        @Override
+        protected boolean mustBeClass() {
+            // can't be an enum
+            return true;
+        }
     }
     
     private static class ConverterForClassValidationVisitor extends ClassNameEObjectValidationVisitor
@@ -93,6 +99,12 @@
         protected EObjectValidationVisitor[] getChildNodeValidators() {
             return NO_CHILDREN;
         }
+
+        @Override
+        protected boolean mustBeClass() {
+            // could be a converter for all instances of an enum type
+            return false;
+        }
     }
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/DiagnosticFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/DiagnosticFactory.java
index b614f9a..219bd59 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/DiagnosticFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/DiagnosticFactory.java
@@ -142,7 +142,7 @@
     {
         return new MyLocalizedMessage(IMessage.NORMAL_SEVERITY,
                 MessageFormat.format(Messages.CANNOT_FIND_CLASS_NAME_ID,new Object[]{className}),
-                null, SYNTAX_ERROR_IN_EL_ID);
+                null, CANNOT_FIND_CLASS_NAME_ID);
     }
     
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/FacesConfigValidator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/FacesConfigValidator.java
index 53a63fd..29e1caa 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/FacesConfigValidator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/FacesConfigValidator.java
@@ -92,6 +92,11 @@
                 // no children
                 return NO_CHILDREN;
             }
+            @Override
+            protected boolean mustBeClass() {
+                // must be a class
+                return true;
+            }
         }
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/FactoryValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/FactoryValidationVisitor.java
index 5b187d5..3096f5d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/FactoryValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/FactoryValidationVisitor.java
@@ -66,6 +66,11 @@
             return "javax.faces.application.ApplicationFactory";
         }
 
+        @Override
+        protected boolean mustBeClass() {
+            return true;
+        }
+
         protected EObjectValidationVisitor[] getChildNodeValidators() {
             // none
             return NO_CHILDREN;
@@ -94,6 +99,13 @@
             // none
             return NO_CHILDREN;
         }
+
+        @Override
+        protected boolean mustBeClass() 
+        {
+            // must be a class
+            return true;
+        }
         
     }
 
@@ -118,6 +130,12 @@
             // none
             return NO_CHILDREN;
         }
+
+        @Override
+        protected boolean mustBeClass() {
+            // must be a class
+            return true;
+        }
         
     }
 
@@ -142,7 +160,11 @@
             // none
             return NO_CHILDREN;
         }
-        
-    }
 
+        @Override
+        protected boolean mustBeClass() {
+            // must be a class
+            return true;
+        }
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ManagedBeanValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ManagedBeanValidationVisitor.java
index 19791d6..4f4d47c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ManagedBeanValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ManagedBeanValidationVisitor.java
@@ -68,8 +68,10 @@
             String classTypeValue = classType.getTextContent();
             addMessageInfo(messages
                 , AppConfigValidationUtil.validateClassName
-                    (classTypeValue == null ? "" : classTypeValue, 
-                            null, file.getProject()), classType, file);
+                    (classTypeValue == null ? "" : classTypeValue
+                            , null, true,   // a managed bean must be a class 
+                            file.getProject())
+                            , classType, file);
         }
     }
     
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/RenderKitValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/RenderKitValidationVisitor.java
index bb81efa..ab66b3c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/RenderKitValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/RenderKitValidationVisitor.java
@@ -69,5 +69,11 @@
         protected EObjectValidationVisitor[] getChildNodeValidators() {
             return NO_CHILDREN;
         }
+
+        @Override
+        protected boolean mustBeClass() {
+            // must be a class
+            return true;
+        }
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/RendererValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/RendererValidationVisitor.java
index 7c5cfb5..cff0082 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/RendererValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/RendererValidationVisitor.java
@@ -69,5 +69,11 @@
         protected EObjectValidationVisitor[] getChildNodeValidators() {
             return NO_CHILDREN;
         }
+
+        @Override
+        protected boolean mustBeClass() {
+            // must be a class
+            return true;
+        }
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ValidatorTypeValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ValidatorTypeValidationVisitor.java
index 8068b0e..db26b68 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ValidatorTypeValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/ValidatorTypeValidationVisitor.java
@@ -69,5 +69,11 @@
         protected EObjectValidationVisitor[] getChildNodeValidators() {
             return NO_CHILDREN;
         }
+
+        @Override
+        protected boolean mustBeClass() {
+            // must be a class
+            return true;
+        }
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/constraints/ConstraintsPackage.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/constraints/ConstraintsPackage.java
index f21c649..5e140ea 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/constraints/ConstraintsPackage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/constraints/ConstraintsPackage.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: ConstraintsPackage.java,v 1.2 2007/04/16 17:50:08 cbateman Exp $
+ * $Id: ConstraintsPackage.java,v 1.4 2008/02/01 21:52:24 gkessler Exp $
  */
 package org.eclipse.jst.jsf.validation.internal.constraints;
 
@@ -26,6 +26,7 @@
  * @model kind="package"
  * @generated
  */
+@SuppressWarnings("hiding")
 public interface ConstraintsPackage extends EPackage {
     /**
      * The package name.
@@ -277,7 +278,7 @@
          * @see org.eclipse.jst.jsf.validation.internal.constraints.impl.ConstraintsPackageImpl#getTagId()
          * @generated
          */
-        @SuppressWarnings("hiding")
+ //       @SuppressWarnings("hiding")
         EClass TAG_ID = eINSTANCE.getTagId();
 
         /**
@@ -286,7 +287,7 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
+ //       @SuppressWarnings("hiding")
         EAttribute TAG_ID__URI = eINSTANCE.getTagId_Uri();
 
         /**
@@ -295,7 +296,7 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
+ //       @SuppressWarnings("hiding")
         EAttribute TAG_ID__NAME = eINSTANCE.getTagId_Name();
 
         /**
@@ -306,7 +307,7 @@
          * @see org.eclipse.jst.jsf.validation.internal.constraints.impl.ConstraintsPackageImpl#getTagSet()
          * @generated
          */
-        @SuppressWarnings("hiding")
+ //       @SuppressWarnings("hiding")
         EClass TAG_SET = eINSTANCE.getTagSet();
 
         /**
@@ -315,7 +316,7 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
+ //       @SuppressWarnings("hiding")
         EReference TAG_SET__TAGS = eINSTANCE.getTagSet_Tags();
 
         /**
@@ -326,7 +327,7 @@
          * @see org.eclipse.jst.jsf.validation.internal.constraints.impl.ConstraintsPackageImpl#getContainsTagConstraint()
          * @generated
          */
-        @SuppressWarnings("hiding")
+ //       @SuppressWarnings("hiding")
         EClass CONTAINS_TAG_CONSTRAINT = eINSTANCE.getContainsTagConstraint();
 
         /**
@@ -335,7 +336,7 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
+ //       @SuppressWarnings("hiding")
         EReference CONTAINS_TAG_CONSTRAINT__SET_GENERATOR = eINSTANCE.getContainsTagConstraint_SetGenerator();
 
         /**
@@ -344,7 +345,7 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
+ //       @SuppressWarnings("hiding")
         EReference CONTAINS_TAG_CONSTRAINT__SATISFIES_SET = eINSTANCE.getContainsTagConstraint_SatisfiesSet();
 
     }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ASTSemanticValidator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ASTSemanticValidator.java
index 2bb8348..e8b2ba9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ASTSemanticValidator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ASTSemanticValidator.java
@@ -7,15 +7,12 @@
  *
  * Contributors:
  *    Cameron Bateman/Oracle - initial API and implementation
- *    
+ * 
  ********************************************************************************/
 
 package org.eclipse.jst.jsf.validation.internal.el;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.emf.common.util.Diagnostic;
@@ -36,11 +33,10 @@
 import org.eclipse.jst.jsf.context.symbol.ISymbol;
 import org.eclipse.jst.jsf.context.symbol.internal.util.IObjectSymbolBasedValueType;
 import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.designtime.resolver.IStructuredDocumentSymbolResolverFactory;
 import org.eclipse.jst.jsf.designtime.resolver.ISymbolContextResolver;
-import org.eclipse.jst.jsf.designtime.resolver.StructuredDocumentSymbolResolverFactory;
-import org.eclipse.jst.jsf.validation.internal.ELValidationPreferences;
+import org.eclipse.jst.jsf.validation.internal.IJSFViewValidator.IValidationReporter;
 import org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory;
-import org.eclipse.jst.jsf.validation.internal.el.diagnostics.ValidationMessageFactory;
 import org.eclipse.jst.jsf.validation.internal.el.operators.BinaryOperator;
 import org.eclipse.jst.jsf.validation.internal.el.operators.BracketOperator;
 import org.eclipse.jst.jsf.validation.internal.el.operators.DotOperator;
@@ -67,76 +63,71 @@
 import org.eclipse.jst.jsp.core.internal.java.jspel.ParseException;
 import org.eclipse.jst.jsp.core.internal.java.jspel.SimpleNode;
 import org.eclipse.jst.jsp.core.internal.java.jspel.Token;
-import org.eclipse.wst.validation.internal.core.Message;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-import org.eclipse.wst.validation.internal.provisional.core.IReporter;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 
 
 class ASTSemanticValidator implements JSPELParserVisitor, IExpressionSemanticValidator
 {
-	private final IFile								_targetFile;
-	private final ASTExpression 					_expr;
-	private final IStructuredDocumentContext		_context;
-	private final ISymbolContextResolver			_symbolResolver;
-	private final List<IMessage>					_messages;
-	private final EvaluationTracker                 _tracker;
-	private final DiagnosticFactory                 _diagnosticFactory;
-	private final ELValidationPreferences           _prefs;
-    private boolean                                 _validatorHasBeenCalled; //=false
-    
-	ASTSemanticValidator(ASTExpression expr, IStructuredDocumentContext context, ELValidationPreferences prefs)
-	{
-		final IWorkspaceContextResolver resolver = 
-            IStructuredDocumentContextResolverFactory.
-                INSTANCE.getWorkspaceContextResolver(context);
-        
-		if (resolver != null)
-		{
-			_targetFile = (IFile) resolver.getResource();
-		}
-		else
-		{
-			_targetFile = null;
-		}
-        
-		_expr = expr;
-		_context = context;
-		_symbolResolver = StructuredDocumentSymbolResolverFactory.getInstance().getSymbolContextResolver(_context);
-		_messages = new ArrayList<IMessage>();
+    private final IFile                             _targetFile;
+    private final ASTExpression                     _expr;
+    private final IStructuredDocumentContext        _context;
+    private final ISymbolContextResolver            _symbolResolver;
+//    private final List<IMessage>                    _messages;
+    private final EvaluationTracker                 _tracker;
+    private final DiagnosticFactory                 _diagnosticFactory;
+    private final IValidationReporter               _reporter;
+
+    ASTSemanticValidator(final ASTExpression expr,
+            final IStructuredDocumentContext context,
+            final IStructuredDocumentSymbolResolverFactory symbolResolverFactory,
+            final IValidationReporter reporter)
+    {
+        final IWorkspaceContextResolver resolver = IStructuredDocumentContextResolverFactory.INSTANCE
+                .getWorkspaceContextResolver(context);
+
+        if (resolver != null)
+        {
+            _targetFile = (IFile) resolver.getResource();
+        }
+        else
+        {
+            _targetFile = null;
+        }
+
+        _expr = expr;
+        _context = context;
+        _symbolResolver = symbolResolverFactory.getSymbolContextResolver(context);
         _tracker = new EvaluationTracker();
         _diagnosticFactory = new DiagnosticFactory();
-        _prefs = prefs;
-	}
-	
-	/* (non-Javadoc)
+        _reporter = reporter;
+    }
+
+    /* (non-Javadoc)
      * @see org.eclipse.jst.jsf.validation.internal.el.IExpressionSemanticValidator#validate()
      */
-	public void validate()
-	{
-		_expr.jjtAccept(this, _tracker);
-        _validatorHasBeenCalled = true;
-	}
-	
-	public Object visit(ASTAddExpression node, Object data) 
-	{
+    public void validate()
+    {
+        _expr.jjtAccept(this, _tracker);
+    }
+
+    public Object visit(final ASTAddExpression node, final Object data)
+    {
         performBinaryEvaluation(node, (EvaluationTracker)data);
         return data;
-	}
+    }
 
-	public Object visit(ASTAndExpression node, Object data) 
-	{
+    public Object visit(final ASTAndExpression node, final Object data)
+    {
         performBinaryEvaluation(node, (EvaluationTracker)data);
         return data;
-	}
+    }
 
-	public Object visit(ASTChoiceExpression node, Object data) 
+    public Object visit(final ASTChoiceExpression node, final Object data)
     {
         if (node.jjtGetNumChildren() != 3)
         {
             throw new AssertionError("Binary operators should always have two sub-expressions");
         }
-        
+
         // evaluate choice argument
         node.jjtGetChild(0).jjtAccept(this, data);
         final ValueType choiceArg = ((EvaluationTracker)data).getValueType();
@@ -146,27 +137,24 @@
         //evaluate when false argument
         node.jjtGetChild(2).jjtAccept(this, data);
         final ValueType whenFalseArg = ((EvaluationTracker)data).getValueType();
-        
-        
+
+
         if (choiceArg != null && whenTrueArg != null && whenFalseArg != null)
         {
-            final TernaryChoiceOperator operator = 
+            final TernaryChoiceOperator operator =
                 new TernaryChoiceOperator(_diagnosticFactory);
-            
-            final Diagnostic diagnostic = 
+
+            final Diagnostic diagnostic =
                 operator.validate(choiceArg/* whenTrueArg, whenFalseArg*/);
-            
+
             if (diagnostic.getSeverity() != Diagnostic.OK)
             {
                 final Token firstToken = node.getFirstToken();
                 final int offset = _context.getDocumentPosition() + firstToken.beginColumn - 1;
                 final int length = node.getLastToken().endColumn - firstToken.beginColumn+1;
-                final Message message = 
-                    ValidationMessageFactory.createFromDiagnostic(diagnostic, 
-                                                   offset, length, _targetFile, _prefs);
-                _messages.add(message);
+                _reporter.report(diagnostic, offset, length);
             }
-            
+
             ((EvaluationTracker)data).setType(operator.perform(choiceArg, whenTrueArg, whenFalseArg));
         }
         else
@@ -175,28 +163,28 @@
         }
 
         return data;
-	}
+    }
 
-	public Object visit(ASTEqualityExpression node, Object data) 
+    public Object visit(final ASTEqualityExpression node, final Object data)
     {
         performBinaryEvaluation(node, (EvaluationTracker)data);
         return data;
     }
 
-	public Object visit(ASTExpression node, Object data) {
-		return node.childrenAccept(this, data);
-	}
+    public Object visit(final ASTExpression node, final Object data) {
+        return node.childrenAccept(this, data);
+    }
 
-	public Object visit(ASTFunctionInvocation node, Object data) 
+    public Object visit(final ASTFunctionInvocation node, final Object data)
     {
-	    // when we see a function invocation, null the type
+        // when we see a function invocation, null the type
         // we do not validate function invocations currently
-        Object retVal = node.childrenAccept(this, data);
+        final Object retVal = node.childrenAccept(this, data);
         ((EvaluationTracker)data).setType(null);
         return retVal;
-	}
+    }
 
-	public Object visit(ASTLiteral node, Object data) 
+    public Object visit(final ASTLiteral node, final Object data)
     {
         // note, there is an implicit assumption here that literals
         // are all terminals (leafs in the tree)
@@ -204,50 +192,50 @@
         {
             throw new AssertionError("Literals should be terminal");
         }
-        
+
         LiteralType type = null;
-        
-        Token  literalToken = node.getFirstToken();
-        
+
+        final Token  literalToken = node.getFirstToken();
+
         switch (literalToken.kind)
         {
             case JSPELParserConstants.STRING_LITERAL:
                 type = new StringLiteralType(stripQuotes(literalToken.image));
-            break;
-            
+                break;
+
             case JSPELParserConstants.INTEGER_LITERAL:
                 type = new IntegerLiteralType(Long.parseLong(literalToken.image));
-            break;
-        
+                break;
+
             case JSPELParserConstants.FLOATING_POINT_LITERAL:
                 type = new FloatLiteralType(Double.parseDouble(literalToken.image));
-            break;
-            
+                break;
+
             case JSPELParserConstants.FALSE:
                 type = BooleanLiteralType.FALSE;
-            break;
-            
+                break;
+
             case JSPELParserConstants.TRUE:
                 type = BooleanLiteralType.TRUE;
-            break;
-            
+                break;
+
             case JSPELParserConstants.NULL:
                 type = NullLiteralType.SINGLETON;
-            break;
-            
+                break;
+
             default:
                 JSFCorePlugin.log("Unknown EL literal: " +literalToken.toString(), new Throwable("This throwable simply used to mark a stack trace"));
         }
 
         ((EvaluationTracker)data).setType(type);
         return data;
-	}
+    }
 
-    private String stripQuotes(String stringLiteral)
+    private String stripQuotes(final String stringLiteral)
     {
         if (stringLiteral.startsWith("'")
                 || stringLiteral.startsWith("\""))
-                        
+
         {
             if (stringLiteral.length() > 2)
             {
@@ -257,29 +245,29 @@
             // if only two characters, then the empty string
             return "";
         }
-        
+
         return stringLiteral;
     }
-    
-	public Object visit(ASTMultiplyExpression node, Object data) 
+
+    public Object visit(final ASTMultiplyExpression node, final Object data)
     {
         performBinaryEvaluation(node, (EvaluationTracker)data);
         return data;
-	}
+    }
 
-	public Object visit(ASTOrExpression node, Object data) 
-    {
-	    performBinaryEvaluation(node, (EvaluationTracker)data);
-        return data;
-	}
-
-	public Object visit(ASTRelationalExpression node, Object data) 
+    public Object visit(final ASTOrExpression node, final Object data)
     {
         performBinaryEvaluation(node, (EvaluationTracker)data);
         return data;
-	}
+    }
 
-	public Object visit(ASTUnaryExpression node, Object data) 
+    public Object visit(final ASTRelationalExpression node, final Object data)
+    {
+        performBinaryEvaluation(node, (EvaluationTracker)data);
+        return data;
+    }
+
+    public Object visit(final ASTUnaryExpression node, final Object data)
     {
         // assertion here is that this expression decomposes:
         // UnaryExpr -> Value
@@ -288,7 +276,7 @@
         // always have exactly one child
         node.childrenAccept(this, data);
         final SignatureBasedType type = ((EvaluationTracker)data).getType();
-        
+
         if (type != null)
         {
             final Token  firstToken = node.getFirstToken();
@@ -298,46 +286,45 @@
                 {
                     final UnaryOperator unaryOp = UnaryOperator.createUnaryOperator(firstToken, _diagnosticFactory);
                     final Diagnostic diagnostic = unaryOp.validate((ValueType)type);
-                    
+
                     if (diagnostic.getSeverity() != Diagnostic.OK)
                     {
                         final int offset = _context.getDocumentPosition() + firstToken.beginColumn - 1;
                         final int length = node.getLastToken().endColumn - firstToken.beginColumn+1;
-                        final Message message = 
-                            ValidationMessageFactory.createFromDiagnostic(diagnostic, offset, length, _targetFile,_prefs);
-                        _messages.add(message);
+                        _reporter.report(diagnostic, offset, length);
                     }
-   
+
                     ((EvaluationTracker)data).
-                            setType(unaryOp.performOperation ((ValueType)type));
+                    setType(unaryOp.performOperation ((ValueType)type));
                 }
                 // cannot apply operations to method bindings
                 else
                 {
-                    final int offset = _context.getDocumentPosition() + 
-                                    firstToken.beginColumn - 1;
-                    final int length = node.getLastToken().endColumn - 
-                                        firstToken.beginColumn+1;
+                    final int offset = _context.getDocumentPosition() +
+                    firstToken.beginColumn - 1;
+                    final int length = node.getLastToken().endColumn -
+                    firstToken.beginColumn+1;
+
+                    Diagnostic diagnostic = 
+                        _diagnosticFactory.create_CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING();
                     
-                    _messages.add(ValidationMessageFactory.
-                            createFromDiagnostic(_diagnosticFactory.create_CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING(),
-                                    offset, length, _targetFile,_prefs));
+                    _reporter.report(diagnostic, offset, length);
                 }
             }
         }
 
         return data;
-	}
+    }
 
-	public Object visit(ASTValue node, final Object data) {
-        ValueExpressionTracker  tracker = new ValueExpressionTracker();
-        
+    public Object visit(final ASTValue node, final Object data) {
+        final ValueExpressionTracker  tracker = new ValueExpressionTracker();
+
         ((EvaluationTracker)data).setValueTracker(tracker);
-        
-		node.childrenAccept(this, data);
-        
-        SignatureBasedType type = ((EvaluationTracker)data).getType();
-        
+
+        node.childrenAccept(this, data);
+
+        final SignatureBasedType type = ((EvaluationTracker)data).getType();
+
         // now check the tracker.  If the last property in the expression
         // is non-null (i.e. the value has one or more suffices) then we
         // to very the leaf node (i.e. 'z' in #{x.y.z}) is more than just
@@ -346,111 +333,107 @@
                 && ((IObjectSymbolBasedValueType)type).getSymbol() instanceof IPropertySymbol
                 && ((IPropertySymbol)((IObjectSymbolBasedValueType)type).getSymbol()).isIntermediate())
         {
-            final int problemStartOffset = tracker.getCurPropertySymbolOffset();
+            final int offset = tracker.getCurPropertySymbolOffset();
             final int length = tracker.getCurPropertySymbolLength();
-            _messages.add(ValidationMessageFactory.createFromDiagnostic(
-                    _diagnosticFactory.create_MEMBER_NOT_FOUND(
-                        ((IPropertySymbol)((IObjectSymbolBasedValueType)type).getSymbol()).getName()
-                        , tracker.getRootSymbolName())
-                        , problemStartOffset, length, _targetFile, _prefs));
+            final Diagnostic diagnostic = 
+                _diagnosticFactory.create_MEMBER_IS_INTERMEDIATE(
+                        ((IPropertySymbol)((IObjectSymbolBasedValueType)type).getSymbol()).getName());
+            _reporter.report(diagnostic, offset, length);
         }
-            
+
         return data;
-	}
+    }
 
-	public Object visit(ASTValuePrefix node, final Object data) 
+    public Object visit(final ASTValuePrefix node, final Object data)
     {
-		if (node.jjtGetNumChildren() == 0)
-		{
-			final Token token = node.getFirstToken();
-			final String image = token.image;
+        if (node.jjtGetNumChildren() == 0)
+        {
+            final Token token = node.getFirstToken();
+            final String image = token.image;
 
-			final ISymbol symbol = _symbolResolver.getVariable(image);
+            final ISymbol symbol = _symbolResolver.getVariable(image);
 
-			if (symbol == null)
-			{
-                final int problemStartOffset = 
+            if (symbol == null)
+            {
+                final int offset =
                     _context.getDocumentPosition() + token.beginColumn - 1;
                 final int length = token.endColumn - token.beginColumn + 1;
- 
-                final Diagnostic diag =  
+
+                final Diagnostic diagnostic =
                     _diagnosticFactory.create_VARIABLE_NOT_FOUND(image);
-                
-                if (diag.getSeverity() != Diagnostic.OK)
+
+                if (diagnostic.getSeverity() != Diagnostic.OK)
                 {
-    				_messages.add(
-    				    ValidationMessageFactory.createFromDiagnostic(diag, 
-    	                        problemStartOffset, length, _targetFile, _prefs));
+                    _reporter.report(diagnostic, offset, length);
                 }
-			}
-			else if (symbol instanceof IInstanceSymbol)
-			{
+            }
+            else if (symbol instanceof IInstanceSymbol)
+            {
                 final IObjectSymbolBasedValueType symbolType =
                     IObjectSymbolBasedValueType.getInstance(symbol);
                 ((EvaluationTracker) data).setType(symbolType);
-			}
-		}
+            }
+        }
 
-		return node.childrenAccept(this, data);
-	}
+        return node.childrenAccept(this, data);
+    }
 
-	public Object visit(final ASTValueSuffix node, final Object data) 
+    public Object visit(final ASTValueSuffix node, final Object data)
     {
         final ValueExpressionTracker tracker = ((EvaluationTracker) data).getValueTracker();
         final SignatureBasedType type = ((EvaluationTracker) data).getType();
-        
+
         if (type instanceof IObjectSymbolBasedValueType)
         {
-            final IObjectSymbolBasedValueType symbolType = 
+            final IObjectSymbolBasedValueType symbolType =
                 (IObjectSymbolBasedValueType) type;
-    		final Token firstToken = node.getFirstToken();
-    
-    		if (node.jjtGetNumChildren() == 0
-    				&& firstToken.kind == JSPELParserConstants.DOT)
-    		{
-    			final Token dotId = node.getLastToken();
-    
-                final int startOffset = 
+            final Token firstToken = node.getFirstToken();
+
+            if (node.jjtGetNumChildren() == 0
+                    && firstToken.kind == JSPELParserConstants.DOT)
+            {
+                final Token dotId = node.getLastToken();
+
+                final int offset =
                     _context.getDocumentPosition() + dotId.beginColumn - 1;
                 final int length = dotId.endColumn - dotId.beginColumn + 1;
 
                 final DotOperator dotOp = new DotOperator(_diagnosticFactory, _targetFile);
 
                 final StringLiteralType  suffixLiteral = new StringLiteralType(dotId.image);
-                Diagnostic diag = 
-                    dotOp.validate(symbolType, 
-                                        suffixLiteral);
-                
-			    if (diag.getSeverity() != Diagnostic.OK)
-			    {
-			        _messages.add(ValidationMessageFactory.createFromDiagnostic(
-                         diag, startOffset, length, _targetFile, _prefs));
+                final Diagnostic diagnostic =
+                    dotOp.validate(symbolType,
+                            suffixLiteral);
+
+                if (diagnostic.getSeverity() != Diagnostic.OK)
+                {
+                    _reporter.report(diagnostic, offset, length);
                     ((EvaluationTracker) data).setType(null);
                 }
                 else
                 {
-//                    // if the base (value-a) is a map, then using the bracket value-a['y'] type
-//                    // syntax is recommended.  Note that we do this here instead of 
-//                    // DotOperator so that we don't tie the default property resolver
-//                    // behaviour to that operator class.  If someone changes the rules
-//                    // of how the prop resolver interprets the base, then they may want to
-//                    // write their own validator that doesn't do this
-//                    if (symbolType.getSymbol().supportsCoercion(TypeConstants.TYPE_MAP))
-//                    {
-//                        _messages.add(ValidationMessageFactory.createFromDiagnostic(
-//                                DiagnosticFactory.create_BINARY_OP_DOT_WITH_VALUEA_MAP_SHOULD_USE_ARRAY
-//                                    (symbolType.getSymbol().getName(), dotId.image), 
-//                                        startOffset, length, _targetFile));
-//                    }
-                    
-                    ((EvaluationTracker) data).setType(dotOp.performOperation(symbolType, 
+                    //                    // if the base (value-a) is a map, then using the bracket value-a['y'] type
+                    //                    // syntax is recommended.  Note that we do this here instead of
+                    //                    // DotOperator so that we don't tie the default property resolver
+                    //                    // behaviour to that operator class.  If someone changes the rules
+                    //                    // of how the prop resolver interprets the base, then they may want to
+                    //                    // write their own validator that doesn't do this
+                    //                    if (symbolType.getSymbol().supportsCoercion(TypeConstants.TYPE_MAP))
+                    //                    {
+                    //                        _messages.add(ValidationMessageFactory.createFromDiagnostic(
+                    //                                DiagnosticFactory.create_BINARY_OP_DOT_WITH_VALUEA_MAP_SHOULD_USE_ARRAY
+                    //                                    (symbolType.getSymbol().getName(), dotId.image),
+                    //                                        startOffset, length, _targetFile));
+                    //                    }
+
+                    ((EvaluationTracker) data).setType(dotOp.performOperation(symbolType,
                             suffixLiteral));
-                    tracker.setCurMemberSymbol(startOffset, length);
+                    tracker.setCurMemberSymbol(offset, length);
                 }
-                
+
                 // we finished with the single dot suffix here
                 return data;
-    		}
+            }
             else if (firstToken.kind == JSPELParserConstants.LBRACKET)
             {
                 final EvaluationTracker subExprTracker = new EvaluationTracker();
@@ -461,66 +444,62 @@
                 if (subExprType instanceof ValueType)
                 {
                     final Token lastToken = node.getLastToken();
-                    final int startOffset = 
+                    final int offset =
                         _context.getDocumentPosition() + firstToken.beginColumn - 1;
                     final int length = lastToken.endColumn - firstToken.beginColumn + 1;
 
                     final BracketOperator  bracketOperator = new BracketOperator(_diagnosticFactory, _targetFile);
-                    
-                    final Diagnostic diag = 
-                        bracketOperator.validate(symbolType, 
-                                            (ValueType)subExprType);
 
-                    if (diag.getSeverity() != Diagnostic.OK)
+                    final Diagnostic diagnostic =
+                        bracketOperator.validate(symbolType,
+                                (ValueType)subExprType);
+
+                    if (diagnostic.getSeverity() != Diagnostic.OK)
                     {
-                        _messages.add(ValidationMessageFactory.createFromDiagnostic(
-                                diag, 
-                                startOffset, length, _targetFile, _prefs));
+                        _reporter.report(diagnostic, offset, length);
                         ((EvaluationTracker) data).setType(null);
                     }
                     else
                     {
-                        ((EvaluationTracker) data).setType(bracketOperator.performOperation(symbolType, 
+                        ((EvaluationTracker) data).setType(bracketOperator.performOperation(symbolType,
                                 (ValueType)subExprType));
-                        tracker.setCurMemberSymbol(startOffset, length);
+                        tracker.setCurMemberSymbol(offset, length);
                     }
                 }
                 // we are finished with the bracketed suffix at this point.
                 return data;
             }
         }
-        
+
         // don't bother to accept children, since if we haven't done
         // something above, there's not much sensible we can do with it
         // clear the type first though
         ((EvaluationTracker) data).setType(null);
-		return data; //node.childrenAccept(this, data);
-	}
+        return data; //node.childrenAccept(this, data);
+    }
 
-	public Object visit(SimpleNode node, Object data) {
-		return node.childrenAccept(this, data);
-	}
+    public Object visit(final SimpleNode node, final Object data) {
+        return node.childrenAccept(this, data);
+    }
 
-	/**
-	 * Copies stored messages into the validation reporter 
-	 * @param validator
-	 * @param reporter
-	 */
-	public void reportFindings(IValidator validator, IReporter reporter)
-	{
-		for (final Iterator<IMessage> it = _messages.iterator(); it.hasNext();)
-		{
-		    IMessage message = it.next();
-		    
-		    // don't report messages that have no severity.
-		    if ((message.getSeverity() & IMessage.ALL_MESSAGES) != 0)
-		    {
-		        reporter.addMessage(validator, message);
-		    }
-		}
-	}
-    
-    private void performBinaryEvaluation(ASTOperatorExpression node, EvaluationTracker tracker)
+    /**
+     * Copies stored messages into the validation reporter
+     * @param validator
+     * @param reporter
+     */
+//    public void reportFindings(final IValidator validator, final IReporter reporter)
+//    {
+//        for (final IMessage message : _messages)
+//        {
+//            // don't report messages that have no severity.
+//            if ((message.getSeverity() & IMessage.ALL_MESSAGES) != 0)
+//            {
+//                reporter.addMessage(validator, message);
+//            }
+//        }
+//    }
+
+    private void performBinaryEvaluation(final ASTOperatorExpression node, final EvaluationTracker tracker)
     {
         if (node.jjtGetNumChildren() < 2)
         {
@@ -530,45 +509,42 @@
         {
             throw new AssertionError("Binary operators should always have one operator token less than number of sub-expressions");
         }
-        
+
         // evaluate left-most argument
         node.jjtGetChild(0).jjtAccept(this, tracker);
-        
-        ValueType curType = getValueTypeForBinaryOperation(tracker.getType(), (SimpleNode) node.jjtGetChild(0)); 
-            
+
+        ValueType curType = getValueTypeForBinaryOperation(tracker.getType(), (SimpleNode) node.jjtGetChild(0));
+
         for (int child = 1; child < node.jjtGetNumChildren(); child++)
         {
             // evaluate next argument running left-to-right
             node.jjtGetChild(child).jjtAccept(this, tracker);
-            final ValueType secondType = 
+            final ValueType secondType =
                 getValueTypeForBinaryOperation(tracker.getType(), (SimpleNode) node.jjtGetChild(child));
-            
+
             if (curType != null && secondType != null)
             {
-                final BinaryOperator operator = 
+                final BinaryOperator operator =
                     BinaryOperator.getBinaryOperator((Token)node.getOperatorTokens().get(child-1), _diagnosticFactory, _context);
-                
+
                 final Diagnostic diagnostic = operator.validate(curType, secondType);
-                
+
                 if (diagnostic.getSeverity() != Diagnostic.OK)
                 {
                     final Token firstToken = node.getFirstToken();
                     final int offset = _context.getDocumentPosition() + firstToken.beginColumn - 1;
                     final int length = node.getLastToken().endColumn - firstToken.beginColumn+1;
-                    final Message message = 
-                        ValidationMessageFactory.createFromDiagnostic
-                                (diagnostic, offset, length, _targetFile, _prefs);
-                    _messages.add(message);
+                    _reporter.report(diagnostic, offset, length);
                 }
-                
+
                 curType = operator.performOperation(curType, secondType);
             }
         }
-        
+
         tracker.setType(curType);
     }
 
-    private ValueType getValueTypeForBinaryOperation(SignatureBasedType type, SimpleNode node)
+    private ValueType getValueTypeForBinaryOperation(final SignatureBasedType type, final SimpleNode node)
     {
         if (type instanceof ValueType)
         {
@@ -578,27 +554,25 @@
         {
             final int offset = _context.getDocumentPosition() + node.getFirstToken().beginColumn - 1;
             final int length = node.getLastToken().endColumn - node.getFirstToken().beginColumn+1;
-            
-            _messages.add(ValidationMessageFactory.createFromDiagnostic
-                    (_diagnosticFactory.create_CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING(), 
-                            offset, length, _targetFile, _prefs));
+            final Diagnostic diagnostic = _diagnosticFactory.create_CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING();
+            _reporter.report(diagnostic, offset, length);
         }
 
         return null;
     }
-    
-	/* (non-Javadoc)
+
+    /* (non-Javadoc)
      * @see org.eclipse.jst.jsf.validation.internal.el.IExpressionSemanticValidator#getMessages()
      */
-	public List getMessages()
-	{
-	    if (!_validatorHasBeenCalled)
-        {
-	        throw new AssertionError("Should not call getMessages before validate has been called");
-        }
-		return _messages;
-	}
-    
+//    public List getMessages()
+//    {
+//        if (!_validatorHasBeenCalled)
+//        {
+//            throw new AssertionError("Should not call getMessages before validate has been called");
+//        }
+//        return _messages;
+//    }
+
     /* (non-Javadoc)
      * @see org.eclipse.jst.jsf.validation.internal.el.IExpressionSemanticValidator#getExpressionType()
      */
@@ -606,33 +580,33 @@
     {
         return _tracker.getType();
     }
-    
+
     /**
      * @param args
      * @throws IOException
-     * @throws ParseException 
+     * @throws ParseException
      */
-    public static void main(String[] args) throws IOException, ParseException
+    public static void main(final String[] args) throws IOException, ParseException
     {
         String elText = "";
         int nextCharacter;
-        
+
         while(((nextCharacter = System.in.read()) != -1))
         {
-            char nextChar = (char) nextCharacter;
-            
+            final char nextChar = (char) nextCharacter;
+
             if (nextChar == '\n')
             {
-                JSPELParser parser = JSPELParser.createParser(elText);
-                ASTExpression expr = parser.Expression();
+                final JSPELParser parser = JSPELParser.createParser(elText);
+                final ASTExpression expr = parser.Expression();
                 expr.dump("");
-                
+
                 elText = "";
             }
             else
             {
                 elText += nextChar;
-            }   
+            }
         }
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ELExpressionValidator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ELExpressionValidator.java
index 055311a..71ccead 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ELExpressionValidator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ELExpressionValidator.java
@@ -12,26 +12,18 @@
 
 package org.eclipse.jst.jsf.validation.internal.el;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.util.Diagnostic;
 import org.eclipse.jst.jsf.common.internal.types.CompositeType;
 import org.eclipse.jst.jsf.common.internal.types.SignatureBasedType;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
-import org.eclipse.jst.jsf.validation.internal.ELValidationPreferences;
+import org.eclipse.jst.jsf.designtime.resolver.IStructuredDocumentSymbolResolverFactory;
+import org.eclipse.jst.jsf.validation.internal.IJSFViewValidator.IValidationReporter;
 import org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory;
-import org.eclipse.jst.jsf.validation.internal.el.diagnostics.ValidationMessageFactory;
 import org.eclipse.jst.jsp.core.internal.java.jspel.ASTExpression;
 import org.eclipse.jst.jsp.core.internal.java.jspel.JSPELParser;
 import org.eclipse.jst.jsp.core.internal.java.jspel.ParseException;
 import org.eclipse.jst.jsp.core.internal.java.jspel.Token;
 import org.eclipse.jst.jsp.core.internal.java.jspel.TokenMgrError;
-import org.eclipse.wst.validation.internal.provisional.core.IMessage;
-import org.eclipse.wst.validation.internal.provisional.core.IReporter;
-import org.eclipse.wst.validation.internal.provisional.core.IValidator;
 
 /**
  * Validates a single expression string
@@ -41,32 +33,30 @@
  */
 public class ELExpressionValidator 
 {
-    private final IStructuredDocumentContext        _context;
-    private final String                            _elText;
-    private final IFile                             _file;
-    private final DiagnosticFactory                 _diagnosticFactory;
-    private final ELValidationPreferences           _prefs;
-    
-    private final List<IMessage>                    _syntaxProblems;
-    private ASTSemanticValidator                    _semanticValidator;
-    
+    private final IStructuredDocumentContext               _context;
+    private final String                                   _elText;
+    private final DiagnosticFactory                        _diagnosticFactory;
+
+    private ASTSemanticValidator                           _semanticValidator;
+    private final IStructuredDocumentSymbolResolverFactory _symbolResolverFactory;
+    private final IValidationReporter                      _reporter;
+
     /**
      * @param context
      * @param elText
-     * @param file
-     * @param prefs 
+     * @param symbolResolverFactory 
+     * @param reporter 
      */
     public ELExpressionValidator(final IStructuredDocumentContext context,
                                  final String elText, 
-                                 final IFile file,
-                                 final ELValidationPreferences prefs)
+                                 final IStructuredDocumentSymbolResolverFactory symbolResolverFactory,
+                                 final IValidationReporter reporter)
     {
         _context = context;
         _elText = elText;
-        _file = file;
-        _prefs = prefs;
         _diagnosticFactory = new DiagnosticFactory();
-        _syntaxProblems = new ArrayList<IMessage>();
+        _symbolResolverFactory = symbolResolverFactory;
+        _reporter = reporter;
     }
     
     /**
@@ -85,7 +75,6 @@
             validateSemantics(expr, _context);
             //final long endSemantics = System.currentTimeMillis();
 
-            
             //System.out.println("Time to parse '"+elText+"' = "+(endParsing-startParsing));
             //System.out.println("Time to semantic checking '"+elText+"' = "+(endSemantics-startSemantics));
             
@@ -94,13 +83,12 @@
             // some syntatical issue
             if (expr.getLastToken().endColumn < _elText.trim().length()-1)
             {
-                int offset = _context.getDocumentPosition() + expr.getLastToken().endColumn;
-                int length = _elText.trim().length() - expr.getLastToken().endColumn;
-
-                _syntaxProblems.add(
-                    ValidationMessageFactory.createFromDiagnostic(
-                            _diagnosticFactory.create_GENERAL_SYNTAX_ERROR(), 
-                                offset, length, _file, _prefs));
+                final int offset = _context.getDocumentPosition() + expr.getLastToken().endColumn;
+                final int length = _elText.trim().length() - expr.getLastToken().endColumn;
+                final Diagnostic diagnostic =
+                    _diagnosticFactory.create_GENERAL_SYNTAX_ERROR();
+                
+                _reporter.report(diagnostic, offset, length);
             }
             
             return expr;
@@ -109,50 +97,21 @@
             Token curTok = e.currentToken;
             int offset = _context.getDocumentPosition() + curTok.beginColumn;
             int length = curTok.endColumn - curTok.beginColumn + 1;
-            _syntaxProblems.add(
-                    ValidationMessageFactory.createFromDiagnostic(
-                            _diagnosticFactory.create_GENERAL_SYNTAX_ERROR(), 
-                                offset, length, _file, _prefs));
+            final Diagnostic diagnostic = _diagnosticFactory.create_GENERAL_SYNTAX_ERROR();
+            _reporter.report(diagnostic, offset, length);
             return null;
         }
         catch (TokenMgrError te) {
             final int offset = _context.getDocumentPosition();
             final int length = _elText.length();
-            _syntaxProblems.add(
-                    ValidationMessageFactory.createFromDiagnostic(
-                            _diagnosticFactory.create_GENERAL_SYNTAX_ERROR(), 
-                                offset, length, _file, _prefs));
+            final Diagnostic diagnostic =
+                _diagnosticFactory.create_GENERAL_SYNTAX_ERROR();
+            _reporter.report(diagnostic, offset, length);
             return null;
         }
     }
 
     /**
-     * Report the results of this EL Expression validation to reportor
-     * using validator as a source
-     * 
-     * @param validator
-     * @param reporter
-     */
-    public void reportFindings(IValidator validator, IReporter reporter)
-    {
-        for (final Iterator<IMessage> it = _syntaxProblems.iterator(); it.hasNext();)
-        {
-            IMessage message = it.next();
-            
-            // don't report messages that have no severity level
-            if ((message.getSeverity() & IMessage.ALL_MESSAGES) != 0)
-            {
-                reporter.addMessage(validator, message);
-            }
-        }
-        
-        if (_semanticValidator != null)
-        {
-            _semanticValidator.reportFindings(validator,reporter);
-        }
-    }
-
-    /**
      * @return the type of the expression or null if 
      * the type could not be evaluated
      */
@@ -172,15 +131,7 @@
         return null;
     }
     
-    /**
-     * @return an unmodifiable list containing all the detected syntax errors
-     * or an empty list if validate has not yet been called.
-     */
-    public List getSyntaxProblems()
-    {
-        return Collections.unmodifiableList(_syntaxProblems);
-    }
-    
+
     /**
      * @return the EL semantic validator for this expression validitor or
      * null if one has not yet been constructor.  One will only be construct
@@ -201,7 +152,7 @@
      */
     private void validateSemantics(ASTExpression expr,IStructuredDocumentContext context)
     {
-        _semanticValidator = new ASTSemanticValidator(expr, context, _prefs);
+        _semanticValidator = new ASTSemanticValidator(expr, context, _symbolResolverFactory, _reporter);
         _semanticValidator.validate();
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/IExpressionSemanticValidator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/IExpressionSemanticValidator.java
index cf8d2d9..9e94e2f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/IExpressionSemanticValidator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/IExpressionSemanticValidator.java
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.jst.jsf.validation.internal.el;
 
-import java.util.List;
-
 import org.eclipse.jst.jsf.common.internal.types.SignatureBasedType;
 
 /**
@@ -29,11 +27,6 @@
     public abstract void validate();
 
     /**
-     * @return the list of generated message (may be empty if validate has not been called).
-     */
-    public abstract List getMessages();
-
-    /**
      * @return the value type of fully resolved expression
      * or null if not resolved (or could not be resolved)
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ValueExpressionTracker.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ValueExpressionTracker.java
index c5bf4bc..702f997 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ValueExpressionTracker.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/ValueExpressionTracker.java
@@ -15,26 +15,9 @@
 
 class ValueExpressionTracker
 {
-    private String      				_rootSymbol;
-    
     private int                         _curPropertySymbolOffset;
     private int                         _curPropertySymbolLength;
-    
-	/**
-	 * @return the root symbol or null if not set
-	 */
-	public String getRootSymbolName() {
-		return _rootSymbol;
-	}
-	
-    /**
-     * @param newName
-     */
-    public void setRootSymbolName(String newName)
-    {
-        _rootSymbol = newName;
-    }
-    
+
     /**
      * @param offset 
      * @param length 
@@ -60,59 +43,4 @@
     {
         return _curPropertySymbolLength;
     }
-
-    /**
-     * @return the type of this value expression or null if it cannot be
-     * resolved
-     * @throws IllegalStateException if root symbol is not yet set
-     */
-//    public SignatureBasedType resolveType()
-//    {
-//        if (!_isRootValid || _rootSymbol == null)
-//        {
-//            throw new IllegalStateException("Cannot resolve type without root symbol");
-//        }
-//        
-//        // if there's been an error resolving the expression semantics, don't
-//        // bother trying to determine type
-//        if (_errorFlag)
-//        {
-//            return null;
-//        }
-//        
-//        if (_curMemberSymbol instanceof IMethodSymbol)
-//        {
-//            return new MethodType(_curMemberSymbol.getName(),
-//                                  ((IMethodSymbol)_curMemberSymbol).getSignature());
-//        }
-//
-//        IObjectSymbol  objectSymbol = null;
-//        
-//        // no properties, so resolve root's type
-//        if (_curMemberSymbol == null)
-//        {
-//            objectSymbol = _rootSymbol;
-//        }
-//        else 
-//        {
-//            objectSymbol = (IObjectSymbol) _curMemberSymbol;
-//        }
-//
-//        final ITypeDescriptor typeDesc = objectSymbol.getTypeDescriptor();
-//        int   assignability = 0;
-//        assignability |= objectSymbol.isReadable() 
-//                            ? IAssignable.ASSIGNMENT_TYPE_RHS
-//                            : 0;
-//        assignability |= objectSymbol.isWritable() 
-//                            ? IAssignable.ASSIGNMENT_TYPE_LHS
-//                            : 0;
-//        final String typeDescString = typeDesc.getTypeSignature();
-//        final String[] superTypes = (String[]) 
-//            typeDesc.getSuperTypeSignatures().toArray(new String[0]);
-//        final String[] interfaceTypes = (String[]) 
-//            typeDesc.getInterfaceTypeSignatures().toArray(new String[0]);
-//
-//        return new ValueType(typeDescString, superTypes, interfaceTypes,
-//                assignability);
-//    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/DiagnosticFactory.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/DiagnosticFactory.java
index 0cb7f56..2a91cfa 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/DiagnosticFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/DiagnosticFactory.java
@@ -158,9 +158,16 @@
     public final static int BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE_ID = 28;
     
     /**
+     * Indicates a situation such as x.y where x is a bundle and 
+     * 'x.y.z' exists, but x.y while partially valid, does not have a value
+     * associated.
+     */
+    public final static int MEMBER_IS_INTERMEDIATE_ID = 29;
+    
+    /**
      * Count of ids
      */
-    public final static int NUM_IDS = 29;
+    public final static int NUM_IDS = 30;
     
     /**
      * @param operatorName
@@ -440,12 +447,13 @@
     }
 
     /**
+     * @param operatorName 
      * @return a configured diagnostic
      */
-    public Diagnostic create_BINARY_OP_DOT_WITH_VALUEB_NULL()
+    public Diagnostic create_BINARY_OP_DOT_WITH_VALUEB_NULL(final String operatorName)
     {
         return create(BINARY_OP_DOT_WITH_VALUEB_NULL_ID
-                , Messages.BINARY_OP_DOT_WITH_VALUEB_NULL);
+                , Messages.bind(Messages.BINARY_OP_DOT_WITH_VALUEB_NULL, operatorName));
     }
     
     /**
@@ -526,6 +534,17 @@
                 , Messages.BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE);
     }
 
+    /**
+     * @param intermediateMemberName
+     * @return a diagnostic
+     */
+    public Diagnostic create_MEMBER_IS_INTERMEDIATE(final String intermediateMemberName)
+    {
+        return create(MEMBER_IS_INTERMEDIATE_ID
+                        ,  NLS.bind(Messages.MEMBER_IS_INTERMEDIATE
+                                , intermediateMemberName));
+    }
+    
     private BasicDiagnostic create(int diagnosticId, String message)
     {
         final int severity = ELValidationPreferences.getDefaultSeverity(diagnosticId);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/Messages.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/Messages.java
index 7cd60aa..c14a851 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/Messages.java
@@ -148,6 +148,10 @@
      * see messages.properties
      */
     public static String BINARY_COMPARISON_WITH_ENUM_AND_UNCOERCABLE_NONCONST_ALWAYS_SAME;
+    /**
+     * see messages.properties
+     */
+    public static String MEMBER_IS_INTERMEDIATE;
 
     private Messages() {
         // do nothing; no external instantiation
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/messages.properties b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/messages.properties
index 0116cb7..11a534e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/messages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/diagnostics/messages.properties
@@ -34,10 +34,11 @@
 UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION=Could not make numeric conversion for {0} operation
 UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED=Type coercion for {0} operator not guaranteed for possible runtime types: {1}
 TERNARY_OP_CHOICE_IS_ALWAYS_SAME=Choice argument is always {0}.  {1} argument is always returned
-BINARY_OP_DOT_WITH_VALUEB_NULL=Applying the dot operator with null second argument always results in null
+BINARY_OP_DOT_WITH_VALUEB_NULL=Applying the {0} operator with null second argument always results in null
 BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY=Array syntax is preferred when accessing Map properties with keys containing dots (i.e. {0}[''{1}''])
 POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS=Possible array index out of bound on list/array access with value: {0}
 BINARY_COMPARISON_WITH_ENUM_AND_CONST_ALWAYS_SAME=Comparison using {0} will always evaluate to {1}.  Enumeration type {2} does not have a constant named {3}
 BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE=Comparison of incompatible enumeration vales may cause a ClassCastException.
 BINARY_COMPARISON_WITH_TWO_ENUMS_ALWAYS_SAME=Comparison using {0} will always evaulate to {1}.  Enumeration type {2} is not equality comparable with {3}
-BINARY_COMPARISON_WITH_ENUM_AND_UNCOERCABLE_NONCONST_ALWAYS_SAME=Comparison using {0} will always evaulate to {1}.  Enumeration type {2} is not equality comparable with non-enumeration type {3}
\ No newline at end of file
+BINARY_COMPARISON_WITH_ENUM_AND_UNCOERCABLE_NONCONST_ALWAYS_SAME=Comparison using {0} will always evaulate to {1}.  Enumeration type {2} is not equality comparable with non-enumeration type {3}
+MEMBER_IS_INTERMEDIATE={0} is an intermediate property which does not have its own value associated with it.
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/AddArithmeticBinaryOperator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/AddArithmeticBinaryOperator.java
index 56d1457..e1975f0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/AddArithmeticBinaryOperator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/AddArithmeticBinaryOperator.java
@@ -32,11 +32,11 @@
 
     protected Long doRealOperation(Long firstArg, Long secondArg) 
     {
-        return new Long(firstArg.longValue() + secondArg.longValue());
+        return Long.valueOf(firstArg.longValue() + secondArg.longValue());
     }
 
     protected Double doRealOperation(Double firstArg, Double secondArg) {
-        return new Double(firstArg.doubleValue() + secondArg.doubleValue());
+        return Double.valueOf(firstArg.doubleValue() + secondArg.doubleValue());
     }
 
     protected BigDecimal doRealOperation(BigDecimal firstArg,
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/BracketOperator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/BracketOperator.java
index 1ff1058..4cfc74e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/BracketOperator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/BracketOperator.java
@@ -156,4 +156,10 @@
         // if can't be resolved, return null
         return null;
     }
+
+    @Override
+    protected String getOperatorName()
+    {
+        return Messages.getString("BracketOperator.Name");
+    }    
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/DivArithmeticBinaryOperator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/DivArithmeticBinaryOperator.java
index 34c63c4..b1d3059 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/DivArithmeticBinaryOperator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/DivArithmeticBinaryOperator.java
@@ -252,7 +252,7 @@
     }
 
     protected Long doRealOperation(Long firstArg, Long secondArg) {
-        return new Long(firstArg.longValue() / secondArg.longValue());
+        return Long.valueOf(firstArg.longValue() / secondArg.longValue());
     }
 
     protected String getOperatorName() {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/DotOperator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/DotOperator.java
index 644f519..414530e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/DotOperator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/DotOperator.java
@@ -50,13 +50,21 @@
 	}
 
 	public Diagnostic validateObjectSymbolValue(IObjectSymbolBasedValueType firstArg,
-															ValueType secondArg) 
+												ValueType secondArg) 
 	{
+	    Diagnostic diag = Diagnostic.OK_INSTANCE;
+	    
         if (secondArg instanceof LiteralType)
         {
-        	return validateNamedPropertyAccessorBase(firstArg, (LiteralType) secondArg);
+        	diag = validateNamedPropertyAccessorBase(firstArg, (LiteralType) secondArg);
         }
 
-        return Diagnostic.OK_INSTANCE;
+        return diag;
 	}
+	
+    @Override
+    protected String getOperatorName()
+    {
+        return Messages.getString("DotOperator.Name");
+    }
 }
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/EqualityRelationalBinaryOperator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/EqualityRelationalBinaryOperator.java
index cb150b6..fcfca03 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/EqualityRelationalBinaryOperator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/EqualityRelationalBinaryOperator.java
@@ -139,13 +139,13 @@
         // if the first is not an enum, then we have non-Enum == Enum case
         if (!firstArg.isEnumType())
         {
-            return handleComparsionOfEnumAndNonEnum(firstArg, secondArg);
+            return handleComparsionOfEnumAndNonEnum(secondArg, firstArg);
         }
         
         // if the second is not an enum, then we have Enum == non-Enum case
         if (!secondArg.isEnumType())
         {
-            return handleComparsionOfEnumAndNonEnum(secondArg, firstArg);
+            return handleComparsionOfEnumAndNonEnum(firstArg, secondArg);
         }
         
         // only other case is they are both enums.  Check if they are directly
@@ -197,7 +197,8 @@
         if (TypeCoercer.typeIsNull(firstArg.getSignature())
                 || TypeCoercer.typeIsNull(secondArg.getSignature()))
         {
-            final boolean result = doRealOperation(new Integer(4), null);
+            // TODO: this is a strange thing to do...
+            final boolean result = doRealOperation(Integer.valueOf(4), null);
             return _diagnosticFactory.create_BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME(Boolean.toString(result));
         }
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/MemberAccessorOperator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/MemberAccessorOperator.java
index ef0272a..db5737e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/MemberAccessorOperator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/MemberAccessorOperator.java
@@ -31,33 +31,34 @@
 import org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory;
 
 /**
- * Super-class for all operators whose function is to access members of an
- * EL object. i.e. the "." and "[]" operators
+ * Super-class for all operators whose function is to access members of an EL
+ * object. i.e. the "." and "[]" operators
  * 
  * @author cbateman
- *
+ * 
  */
-public abstract class MemberAccessorOperator 
+public abstract class MemberAccessorOperator
 {
     /**
-     * The source file for the EL expression in which this operator
-     * is being evaluated.
+     * The source file for the EL expression in which this operator is being
+     * evaluated.
      */
-    protected final IFile                   _file;
+    protected final IFile             _file;
 
     /**
      * the common factory used to create diagnostics
      */
-    protected final DiagnosticFactory       _diagnosticFactory;
-    
+    protected final DiagnosticFactory _diagnosticFactory;
+
     // TODO: need to reconcile with BinaryOperator? performOperation must return
-    // SignatureBasedType since it may return a method.  This can't happen
+    // SignatureBasedType since it may return a method. This can't happen
     // with other operators (besides eqiv [])
     /**
-     * @param file 
-     * @param diagnosticFactory 
+     * @param file
+     * @param diagnosticFactory
      */
-    protected MemberAccessorOperator(final IFile file, final DiagnosticFactory diagnosticFactory)
+    protected MemberAccessorOperator(final IFile file,
+            final DiagnosticFactory diagnosticFactory)
     {
         _file = file;
         _diagnosticFactory = diagnosticFactory;
@@ -68,134 +69,149 @@
      * @param secondArg
      * @return the result of validating the dot operation with these arguments.
      */
-    public Diagnostic validate(ValueType firstArg, ValueType secondArg) 
+    public Diagnostic validate(final ValueType firstArg, final ValueType secondArg)
     {
         if (!(firstArg instanceof IObjectSymbolBasedValueType))
         {
-            throw new AssertionError("The first argument of the member operator must always be a symbol resolvable value type");
-        }
-        
-        if (TypeCoercer.typeIsNull(secondArg.getSignature()))
-        {
-            return _diagnosticFactory.create_BINARY_OP_DOT_WITH_VALUEB_NULL();
+            throw new AssertionError(
+            "The first argument of the member operator must always be a symbol resolvable value type");
         }
 
-        return validateObjectSymbolValue((IObjectSymbolBasedValueType) firstArg, secondArg);
+        if (TypeCoercer.typeIsNull(secondArg.getSignature()))
+        {
+            return _diagnosticFactory
+            .create_BINARY_OP_DOT_WITH_VALUEB_NULL(getOperatorName());
+        }
+
+        return validateObjectSymbolValue(
+                (IObjectSymbolBasedValueType) firstArg, secondArg);
     }
-    
+
     /**
      * @param firstArg
      * @param secondArg
      * @return the diagnostic for member(firstArg, secondArg)
      */
-    protected abstract Diagnostic validateObjectSymbolValue(IObjectSymbolBasedValueType firstArg, ValueType secondArg);
-    
+    protected abstract Diagnostic validateObjectSymbolValue(
+            IObjectSymbolBasedValueType firstArg, ValueType secondArg);
+
     /**
      * @param firstArg
      * @param secondArg
-     * @return a validation of a named property accessible base (map or bean) given
-     * an a literal key argument
+     * @return a validation of a named property accessible base (map or bean)
+     *         given an a literal key argument
      */
-    protected Diagnostic validateNamedPropertyAccessorBase(IObjectSymbolBasedValueType firstArg
-                                                  , LiteralType secondArg)
+    protected Diagnostic validateNamedPropertyAccessorBase(
+            final IObjectSymbolBasedValueType firstArg, final LiteralType secondArg)
     {
-		final IObjectSymbol curBaseSymbol = firstArg.getSymbol();
-		
-		final ISymbol nextSymbol = getMemberSymbol(firstArg.getSymbol(), 
-											secondArg.getLiteralValueRaw());
-		
-		// if the x in x.y is an unconstrained map an it returns
-		// a java.lang.Object, then return null.  We can't really say
-		// anything meaningful about such a property anyway.
-		// TODO: do we need to refine the type descriptor on such 
-		// a property object to make this more precise?
-		if (curBaseSymbol.supportsCoercion(TypeConstants.TYPE_MAP)
-				&& nextSymbol instanceof IPropertySymbol
-				&& TypeConstants.TYPE_JAVAOBJECT.equals(((IPropertySymbol)nextSymbol).getTypeDescriptor().getTypeSignature()))
-		{
-			// if we get a symbol back that's a generic object coming from a map
-			// then stop validating; we can't tell anything for sure
-			return Diagnostic.OK_INSTANCE;
-		}
-		
-		if (nextSymbol == null)
-		{
-			return _diagnosticFactory.create_MEMBER_NOT_FOUND(secondArg.getLiteralValue()
-			,firstArg.getSymbol().getName());
-		}
-		
-		return Diagnostic.OK_INSTANCE;
+        final IObjectSymbol curBaseSymbol = firstArg.getSymbol();
+
+        final ISymbol nextSymbol =
+            getMemberSymbol(firstArg.getSymbol(), secondArg
+                    .getLiteralValueRaw());
+
+        // if the x in x.y is an unconstrained map an it returns
+        // a java.lang.Object, then return null. We can't really say
+        // anything meaningful about such a property anyway.
+        // TODO: do we need to refine the type descriptor on such
+        // a property object to make this more precise?
+        if (curBaseSymbol.supportsCoercion(TypeConstants.TYPE_MAP)
+                && nextSymbol instanceof IPropertySymbol
+                && TypeConstants.TYPE_JAVAOBJECT
+                .equals(((IPropertySymbol) nextSymbol)
+                        .getTypeDescriptor().getTypeSignature()))
+        {
+            // if we get a symbol back that's a generic object coming from a map
+            // then stop validating; we can't tell anything for sure
+            return Diagnostic.OK_INSTANCE;
+        }
+
+        if (nextSymbol == null)
+        {
+            return _diagnosticFactory.create_MEMBER_NOT_FOUND(secondArg
+                    .getLiteralValue(), firstArg.getSymbol().getName());
+        }
+
+        return Diagnostic.OK_INSTANCE;
     }
-    
+
     /**
      * @param firstArg
      * @param secondArg
      * @return the resolved type for the operation or null if not computable
      */
-    public SignatureBasedType performOperation(ValueType firstArg, ValueType secondArg) 
+    public SignatureBasedType performOperation(final ValueType firstArg,
+            final ValueType secondArg)
     {
         if (!(firstArg instanceof IObjectSymbolBasedValueType))
         {
-        	return null;
+            return null;
         }
 
-        // per JSP.2.3.4, if value-b is null, then return null (not literal null)
+        // per JSP.2.3.4, if value-b is null, then return null (not literal
+        // null)
         if (TypeCoercer.typeIsNull(secondArg.getSignature()))
         {
             return null;
         }
 
-        return handlePerformObjectSymbolValue((IObjectSymbolBasedValueType)firstArg, secondArg);
+        return handlePerformObjectSymbolValue(
+                (IObjectSymbolBasedValueType) firstArg, secondArg);
     }
 
     /**
-     * @param firstArg -- represents value-a (expr-a after step 1) in JSP.2.3.4
-     * @param secondArg -- represents value-b (expr-b after step 3) in JSP.2.3.4
+     * @param firstArg --
+     *            represents value-a (expr-a after step 1) in JSP.2.3.4
+     * @param secondArg --
+     *            represents value-b (expr-b after step 3) in JSP.2.3.4
      * @return the new ValueType for this operation or null
      */
-    protected abstract SignatureBasedType handlePerformObjectSymbolValue(IObjectSymbolBasedValueType firstArg
-                                                  , ValueType secondArg);
+    protected abstract SignatureBasedType handlePerformObjectSymbolValue(
+            IObjectSymbolBasedValueType firstArg, ValueType secondArg);
 
     /**
      * @param firstArg
      * @param secondArg
-     * @return the resolved type for firstArg[secondArg] treating firstArg as a type
-     * that uses a named property accessor (i.e. a map or bean but not a list or array)
-     * or null if unresolved
+     * @return the resolved type for firstArg[secondArg] treating firstArg as a
+     *         type that uses a named property accessor (i.e. a map or bean but
+     *         not a list or array) or null if unresolved
      */
-    protected SignatureBasedType handlePerformNamedPropertyAccessorBase(IObjectSymbolBasedValueType firstArg
-                                                  , LiteralType secondArg)
+    protected SignatureBasedType handlePerformNamedPropertyAccessorBase(
+            final IObjectSymbolBasedValueType firstArg, final LiteralType secondArg)
     {
-        final ISymbol symbol = 
-            getMemberSymbol(firstArg.getSymbol(), secondArg.getLiteralValueRaw());
+        final ISymbol symbol =
+            getMemberSymbol(firstArg.getSymbol(), secondArg
+                    .getLiteralValueRaw());
 
         if (symbol instanceof IPropertySymbol)
         {
-            return new IObjectSymbolBasedValueType((IPropertySymbol)symbol);
+            return new IObjectSymbolBasedValueType((IPropertySymbol) symbol);
         }
         else if (symbol instanceof IMethodSymbol)
         {
             return new IMethodSymbolBasedType((IMethodSymbol) symbol);
         }
-        
+
         // fall-through and return null
-        // per JSP2.3.4 steps 5 and 6, return null literal if map, null (error) otherwise
+        // per JSP2.3.4 steps 5 and 6, return null literal if map, null (error)
+        // otherwise
         if (firstArg.isInstanceOf(TypeConstants.TYPE_MAP))
         {
-        	return NullLiteralType.SINGLETON;
+            return NullLiteralType.SINGLETON;
         }
         return null;
     }
-    
+
     /**
      * @param symbol
      * @param name
-     * @return the member symbol of 'symbol' corresponding to 'name' or
-     * null if there is no such member
+     * @return the member symbol of 'symbol' corresponding to 'name' or null if
+     *         there is no such member
      */
-    protected final ISymbol getMemberSymbol(final IObjectSymbol symbol, final Object name)
+    protected final ISymbol getMemberSymbol(final IObjectSymbol symbol,
+            final Object name)
     {
-        ISymbol  memberSymbol = getPropertySymbol(symbol, name);
+        ISymbol memberSymbol = getPropertySymbol(symbol, name);
 
         if (memberSymbol != null)
         {
@@ -203,32 +219,33 @@
         }
 
         memberSymbol = getMethodSymbol(symbol, name);
-        
+
         // otherwise, see if it's a valid method
         if (memberSymbol != null)
         {
             return memberSymbol;
         }
-        
+
         // if not a property or method, then not a valid member
         return null;
     }
-    
+
     /**
      * @param symbol
      * @param name
-     * @return the property symbol called name relative to 'symbol' or null
-     * if one doesn't exist
+     * @return the property symbol called name relative to 'symbol' or null if
+     *         one doesn't exist
      */
-    protected final ISymbol getPropertySymbol(final ISymbol symbol, final Object name)
+    protected final ISymbol getPropertySymbol(final ISymbol symbol,
+            final Object name)
     {
-        AbstractDTPropertyResolver resolver = getPropertyResolver();
-        
+        final AbstractDTPropertyResolver resolver = getPropertyResolver();
+
         if (resolver != null)
         {
-            return resolver.getProperty(symbol,name);
+            return resolver.getProperty(symbol, name);
         }
-        
+
         JSFCorePlugin.log("Error acquiring property resolver", new Throwable());
         return null;
     }
@@ -236,40 +253,57 @@
     /**
      * @param symbol
      * @param name
-     * @return the method symbol on 'symbol' corresponding to
-     * 'name' or null if no such member
+     * @return the method symbol on 'symbol' corresponding to 'name' or null if
+     *         no such member
      */
-    protected final IMethodSymbol getMethodSymbol(final IObjectSymbol symbol, final Object name)
+    protected final IMethodSymbol getMethodSymbol(final IObjectSymbol symbol,
+            final Object name)
     {
-        AbstractDTMethodResolver resolver = getMethodResolver();
-        
+        final AbstractDTMethodResolver resolver = getMethodResolver();
+
         if (resolver != null)
         {
             return resolver.getMethod(symbol, name);
         }
-        
+
         JSFCorePlugin.log("Error acquiring property resolver", new Throwable());
         return null;
 
     }
-    
+
     /**
      * @return the property resolver for the current source file
      */
-    protected final AbstractDTPropertyResolver  getPropertyResolver()
+    protected final AbstractDTPropertyResolver getPropertyResolver()
     {
-        return
-            DesignTimeApplicationManager.getInstance(_file.getProject())
-                .getPropertyResolver();
+        final DesignTimeApplicationManager manager =
+            DesignTimeApplicationManager.getInstance(_file.getProject());
+
+        if (manager != null)
+        {
+            return manager.getPropertyResolver();
+        }
+
+        return null;
     }
-    
+
     /**
      * @return the method resolver for the current source file
      */
     protected final AbstractDTMethodResolver getMethodResolver()
     {
-        return
-            DesignTimeApplicationManager.getInstance(_file.getProject())
-                .getMethodResolver();
+        final DesignTimeApplicationManager manager =
+            DesignTimeApplicationManager.getInstance(_file.getProject());
+
+        if (manager != null)
+        {
+            return manager.getMethodResolver();
+        }
+        return null;
     }
+
+    /**
+     * @return a user-readable name of the operator (i.e. dot or bracket)
+     */
+    protected abstract String getOperatorName();
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/ModArithmeticBinaryOperator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/ModArithmeticBinaryOperator.java
index ed8e394..ba4765b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/ModArithmeticBinaryOperator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/ModArithmeticBinaryOperator.java
@@ -41,7 +41,6 @@
 
     ModArithmeticBinaryOperator(DiagnosticFactory diagnosticFactory) {
         super(diagnosticFactory);
-        // TODO Auto-generated constructor stub
     }
 
     public ValueType performOperation(ValueType firstArg, ValueType secondArg) 
@@ -225,8 +224,8 @@
             if (firstValue != null && secondValue != null)
             {
                 return new IntegerLiteralType(
-                        doRealOperation(new Long(firstValue.longValue()), 
-                                        new Long(secondValue.longValue())).longValue());
+                        doRealOperation(Long.valueOf(firstValue.longValue()), 
+                                        Long.valueOf(secondValue.longValue())).longValue());
             }
 
             // if we get to here, the coercion is valid, so a Long will be
@@ -365,7 +364,7 @@
     }
     
     protected Long doRealOperation(Long firstArg, Long secondArg) {
-        return new Long(firstArg.longValue() % secondArg.longValue());
+        return Long.valueOf(firstArg.longValue() % secondArg.longValue());
      }
 
      protected Double doRealOperation(Double firstArg, Double secondArg) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/MultiplyArithmeticBinaryOperator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/MultiplyArithmeticBinaryOperator.java
index 01f8d9a..7076622 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/MultiplyArithmeticBinaryOperator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/MultiplyArithmeticBinaryOperator.java
@@ -35,7 +35,7 @@
 
     protected Long doRealOperation(Long firstArg, Long secondArg) 
     {
-        return new Long(firstArg.longValue() * secondArg.longValue());
+        return Long.valueOf(firstArg.longValue() * secondArg.longValue());
     }
 
     protected Double doRealOperation(Double firstArg, Double secondArg) 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/SubtractArithmeticBinaryOperator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/SubtractArithmeticBinaryOperator.java
index bc1b97b..2879cec 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/SubtractArithmeticBinaryOperator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/SubtractArithmeticBinaryOperator.java
@@ -34,7 +34,7 @@
 
     protected Long doRealOperation(Long firstArg, Long secondArg) 
     {
-        return new Long(firstArg.longValue() - secondArg.longValue());
+        return Long.valueOf(firstArg.longValue() - secondArg.longValue());
     }
 
     protected Double doRealOperation(Double firstArg, Double secondArg) 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/messages.properties b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/messages.properties
index eb40146..9d7d987 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/messages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/messages.properties
@@ -7,3 +7,5 @@
 LessThanRelationalBinaryOperator.OperationName=less than
 LtGtRelationalBinaryOperator.ConstantName.False=false
 NotEqualsBinaryRelationalOperator.OperationName=not equals
+BracketOperator.Name=bracket
+DotOperator.Name=dot
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/strategy/AttributeValidatingStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/strategy/AttributeValidatingStrategy.java
new file mode 100644
index 0000000..ba50482
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/strategy/AttributeValidatingStrategy.java
@@ -0,0 +1,376 @@
+package org.eclipse.jst.jsf.validation.internal.strategy;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.jst.jsf.common.dom.AttrDOMAdapter;
+import org.eclipse.jst.jsf.common.dom.AttributeIdentifier;
+import org.eclipse.jst.jsf.common.dom.DOMAdapter;
+import org.eclipse.jst.jsf.common.internal.types.CompositeType;
+import org.eclipse.jst.jsf.common.internal.types.TypeComparator;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.core.internal.region.Region2AttrAdapter;
+import org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledProcessingFactory;
+import org.eclipse.jst.jsf.metadataprocessors.features.ELIsNotValidException;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidELValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidationMessage;
+import org.eclipse.jst.jsf.validation.internal.AbstractXMLViewValidationStrategy;
+import org.eclipse.jst.jsf.validation.internal.JSFValidationContext;
+import org.eclipse.jst.jsf.validation.internal.el.ELExpressionValidator;
+import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionCollection;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+
+/**
+ * An XML view validation strategy that validates
+ * 
+ * @author cbateman
+ * 
+ */
+public class AttributeValidatingStrategy extends
+        AbstractXMLViewValidationStrategy
+{
+    // TODO: should the source validator be a separate class in jsp.ui?
+    // problem with simple split off is that preference must also be split off
+    static final boolean         DEBUG;
+    static
+    {
+        final String value = Platform
+                .getDebugOption("org.eclipse.jst.jsf.validation.internal.el/debug/jspsemanticsvalidator"); //$NON-NLS-1$
+        DEBUG = value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$
+    }
+
+    /**
+     * identifier
+     */
+    public final static String   ID = "org.eclipse.jst.jsf.validation.strategy.AttributeValidatingStrategy";
+
+    private JSFValidationContext _validationContext;
+
+    /**
+     * Default constructor
+     * 
+     * @param validationContext
+     */
+    public AttributeValidatingStrategy(
+            final JSFValidationContext validationContext)
+    {
+        super(ID);
+
+        _validationContext = validationContext;
+    }
+
+    @Override
+    public boolean isInteresting(final DOMAdapter domAdapter)
+    {
+        return (domAdapter instanceof AttrDOMAdapter);
+    }
+
+    @Override
+    public void validate(final DOMAdapter domAdapter)
+    {
+        if (domAdapter instanceof AttrDOMAdapter)
+        {
+            final Region2AttrAdapter attrAdapter = (Region2AttrAdapter) domAdapter;
+            final IStructuredDocumentContext context = 
+                IStructuredDocumentContextFactory.INSTANCE
+                    .getContext(attrAdapter.getDocumentContext()
+                            .getStructuredDocument(), attrAdapter
+                            .getOwningElement().getDocumentContext()
+                            .getDocumentPosition()
+                            + attrAdapter.getAttributeValueRegion().getStart());
+
+            validateAttributeValue(context, attrAdapter);
+        }
+    }
+
+    /**
+     * Validates the attribute value. Reports any problems to the reporter in
+     * the JSFValidationContext.
+     * 
+     * @param context
+     * @param attrAdapter
+     */
+    private void validateAttributeValue(
+            final IStructuredDocumentContext context,
+            final Region2AttrAdapter attrAdapter)
+    {
+        // if there's elText then validate it
+        // TODO: this approach will fail with mixed expressions
+        if (!checkIfELAndValidate(attrAdapter, context))
+        {
+            validateNonELAttributeValue(context, attrAdapter);
+        }
+    }
+
+    /**
+     * Checks the region to see if it contains an EL attribute value. If it
+     * does, validates it
+     * 
+     * @return true if validated EL, false otherwise
+     */
+    private boolean checkIfELAndValidate(final Region2AttrAdapter attrAdapter,
+            final IStructuredDocumentContext sDocContext)
+    {
+        final ITextRegion attrValueRegion = attrAdapter
+                .getAttributeValueRegion();
+        if (attrValueRegion instanceof ITextRegionCollection)
+        {
+            final ITextRegionCollection parentRegion = ((ITextRegionCollection) attrValueRegion);
+            if (parentRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE)
+            {
+                // look for attribute pattern "#{}"
+                // TODO: need to generalize this for RValue concatenation
+                final ITextRegionList regionList = parentRegion.getRegions();
+                if (regionList.size() >= 3)
+                {
+                    final ITextRegion openQuote = regionList.get(0);
+                    final ITextRegion openVBLQuote = regionList.get(1);
+
+                    if ((openQuote.getType() == DOMJSPRegionContexts.XML_TAG_ATTRIBUTE_VALUE_DQUOTE || openQuote
+                            .getType() == DOMJSPRegionContexts.XML_TAG_ATTRIBUTE_VALUE_SQUOTE)
+                            && (openVBLQuote.getType() == DOMJSPRegionContexts.JSP_VBL_OPEN))
+                    {
+                        // we appear to be inside "#{", so next should be a
+                        // VBL_CONTENT if there's anything
+                        // here to validate
+                        final ITextRegion content = regionList.get(2);
+                        if (content.getType() == DOMJSPRegionContexts.JSP_VBL_CONTENT)
+                        {
+                            final int contentStart = parentRegion
+                                    .getStartOffset(content);
+                            final IStructuredDocumentContext elContext = IStructuredDocumentContextFactory.INSTANCE
+                                    .getContext(sDocContext
+                                            .getStructuredDocument(),
+                                            contentStart);
+
+                            final String elText = parentRegion.getText(content);
+
+                            if (DEBUG)
+                            {
+                                System.out.println(addDebugSpacer(3)
+                                        + "EL attrVal= " + elText);
+                            }
+
+                            // EL validation is user configurable because
+                            // it can be computationally costly.
+                            if (_validationContext.shouldValidateEL())
+                            {
+                                final List elVals = MetaDataEnabledProcessingFactory
+                                        .getInstance()
+                                        .getAttributeValueRuntimeTypeFeatureProcessors(
+                                                IValidELValues.class,
+                                                elContext,
+                                                attrAdapter
+                                                        .getAttributeIdentifier());
+                                validateELExpression(sDocContext, elContext,
+                                        elVals, attrAdapter.getValue(), elText);
+                            }
+                        }
+                        else if (content.getType() == DOMJSPRegionContexts.JSP_VBL_CLOSE)
+                        {
+                            final int offset = parentRegion
+                                    .getStartOffset(openVBLQuote) + 1;
+                            final int length = 2;
+                            final Diagnostic diagnostic =
+                                _validationContext
+                                .getDiagnosticFactory()
+                                .create_EMPTY_EL_EXPRESSION();
+                            // detected empty EL expression
+                            _validationContext.getReporter().report(diagnostic, offset, length);
+                        }
+
+                        boolean foundClosingQuote = false;
+                        for (int i = 2; !foundClosingQuote
+                                && i < regionList.size(); i++)
+                        {
+                            final ITextRegion searchRegion = regionList.get(i);
+                            if (searchRegion.getType() == DOMJSPRegionContexts.JSP_VBL_CLOSE)
+                            {
+                                foundClosingQuote = true;
+                            }
+                        }
+
+                        if (!foundClosingQuote)
+                        {
+                            final int offset = sDocContext
+                                    .getDocumentPosition() + 1;
+                            final int length = parentRegion.getText().length();
+                            final Diagnostic diagnostic =
+                                _validationContext
+                                .getDiagnosticFactory()
+                                .create_MISSING_CLOSING_EXPR_BRACKET();
+                            _validationContext.getReporter().report(diagnostic, offset, length);
+                        }
+
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    private void validateELExpression(final IStructuredDocumentContext context,
+            final IStructuredDocumentContext elContext, final List elVals,
+            final String attributeVal, final String elText)
+    {
+        // Call EL validator which will perform at least the syntactical
+        // validation
+        final ELExpressionValidator elValidator = new ELExpressionValidator(
+                elContext, elText, _validationContext
+                        .getSymbolResolverFactory(), _validationContext.getReporter());
+        elValidator.validateXMLNode();
+
+        final CompositeType exprType = elValidator.getExpressionType();
+        if (exprType != null)
+        {
+            for (final Iterator it = elVals.iterator(); it.hasNext();)
+            {
+                final IValidELValues elval = (IValidELValues) it.next();
+                CompositeType expectedType;
+                Diagnostic status = null;
+                try
+                {
+                    expectedType = elval.getExpectedRuntimeType();
+
+                    if (expectedType != null)
+                    {
+                        status = TypeComparator
+                                .calculateTypeCompatibility(expectedType,
+                                        exprType);
+                        if (status.getSeverity() != Diagnostic.OK)
+                        {
+                            reportValidationMessage(status, context,
+                                    attributeVal);
+                        }
+                    }
+                }
+                catch (final ELIsNotValidException e)
+                {
+                    reportValidationMessage(
+                            createValidationMessage(context, attributeVal,
+                                    IStatus.WARNING, e.getMessage(),
+                                    _validationContext.getFile()), context,
+                            attributeVal);
+                }
+            }
+        }
+    }
+
+    /**
+     * Validates an attribute value in context using the JSF metadata processing
+     * framework
+     * 
+     * @param context
+     * @param region
+     * @param uri
+     * @param tagName
+     * @param attrName
+     * @param attributeVal
+     * @param reporter
+     * @param file
+     */
+    private void validateNonELAttributeValue(
+            final IStructuredDocumentContext context,
+            final Region2AttrAdapter attrAdapter)
+    {
+        final String attributeValue = attrAdapter.getValue();
+        // else validate as static attribute value
+        if (DEBUG)
+        {
+            System.out.println(addDebugSpacer(3) + "attrVal= "
+                    + (attributeValue != null ? attributeValue : "null"));
+        }
+
+        final AttributeIdentifier attributeId = attrAdapter
+                .getAttributeIdentifier();
+
+        if (attributeId.getTagIdentifier() == null
+                || attributeId.getTagIdentifier().getTagName() == null
+                || attributeId.getTagIdentifier().getTagName() == null
+                || attributeId.getName() == null)
+        {
+            return;
+        }
+
+        final List vv = MetaDataEnabledProcessingFactory.getInstance()
+                .getAttributeValueRuntimeTypeFeatureProcessors(
+                        IValidValues.class, context, attributeId);
+        if (!vv.isEmpty())
+        {
+            for (final Iterator it = vv.iterator(); it.hasNext();)
+            {
+                final IValidValues v = (IValidValues) it.next();
+                if (!v.isValidValue(attributeValue.trim()))
+                {
+                    if (DEBUG)
+                    {
+                        System.out.println(addDebugSpacer(4) + "NOT VALID ");
+                    }
+
+                    for (final Iterator msgs = v.getValidationMessages()
+                            .iterator(); msgs.hasNext();)
+                    {
+                        final IValidationMessage msg = (IValidationMessage) msgs
+                                .next();
+                        reportValidationMessage(createValidationMessage
+                                (context, attributeValue, msg.getSeverity(), msg
+                                        .getMessage(), _validationContext
+                                        .getFile()), context, attributeValue);
+                    }
+                }
+                else if (DEBUG)
+                {
+                    System.out.println(addDebugSpacer(5) + "VALID ");
+                }
+            }
+        }
+        else if (DEBUG)
+        {
+            System.out.println(addDebugSpacer(4) + "NO META DATA ");
+        }
+    }
+
+    private void reportValidationMessage(
+            final  Diagnostic  problem,
+            final IStructuredDocumentContext context,
+            final String attributeValue)
+    {
+        final int start = context.getDocumentPosition() + 1;
+        final int length = attributeValue.length();
+        _validationContext.getReporter().report(problem, start, length);
+    }
+
+    private Diagnostic createValidationMessage(
+            final IStructuredDocumentContext context,
+            final String attributeValue, final int severity, final String msg,
+            final IFile file)
+    {
+        // TODO: need factory
+        final Diagnostic diagnostic =
+            new BasicDiagnostic(severity, "", -1, msg, null);
+        return diagnostic;
+    }
+
+    private String addDebugSpacer(final int count)
+    {
+        final String TAB = "\t";
+        final StringBuffer ret = new StringBuffer("");
+        for (int i = 0; i <= count; i++)
+        {
+            ret.append(TAB);
+        }
+        return ret.toString();
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/strategy/ContainmentValidatingStrategy.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/strategy/ContainmentValidatingStrategy.java
new file mode 100644
index 0000000..f463668
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/strategy/ContainmentValidatingStrategy.java
@@ -0,0 +1,217 @@
+package org.eclipse.jst.jsf.validation.internal.strategy;
+
+import java.text.MessageFormat;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.jst.jsf.common.dom.DOMAdapter;
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.jsf.common.internal.JSPUtil;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
+import org.eclipse.jst.jsf.common.sets.AxiomaticSet;
+import org.eclipse.jst.jsf.common.sets.ConcreteAxiomaticSet;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.core.internal.region.Region2ElementAdapter;
+import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory;
+import org.eclipse.jst.jsf.core.set.constraint.MemberConstraint;
+import org.eclipse.jst.jsf.core.set.mapping.ElementToTagIdentifierMapping;
+import org.eclipse.jst.jsf.core.tagmatcher.EvaluationException;
+import org.eclipse.jst.jsf.core.tagmatcher.InvalidExpressionException;
+import org.eclipse.jst.jsf.core.tagmatcher.XPathMatchingAlgorithm;
+import org.eclipse.jst.jsf.validation.internal.AbstractXMLViewValidationStrategy;
+import org.eclipse.jst.jsf.validation.internal.JSFValidationContext;
+import org.eclipse.jst.jsf.validation.internal.constraints.ContainsTagConstraint;
+import org.eclipse.jst.jsf.validation.internal.constraints.TagId;
+import org.eclipse.jst.jsf.validation.internal.constraints.TagSet;
+import org.w3c.dom.Node;
+
+/**
+ * @author cbateman
+ * 
+ */
+public class ContainmentValidatingStrategy extends
+        AbstractXMLViewValidationStrategy
+{
+    /**
+     * identifier
+     */
+    public final static String                         ID = 
+        "org.eclipse.jst.jsf.validation.strategy.ElementValidatingStrategy";
+
+    private final static ElementToTagIdentifierMapping elem2TagIdMapper = 
+        new ElementToTagIdentifierMapping();
+    private int                                        _containmentValidationCount;  // = 0;
+    private final JSFValidationContext                 _jsfValidationContext;
+
+    /**
+     * @param jsfValidationContext
+     */
+    public ContainmentValidatingStrategy(
+            final JSFValidationContext jsfValidationContext)
+    {
+        super(ID);
+        _jsfValidationContext = jsfValidationContext;
+    }
+
+    @Override
+    public boolean isInteresting(DOMAdapter domAdapter)
+    {
+        return domAdapter instanceof Region2ElementAdapter;
+    }
+
+    @Override
+    public void validate(DOMAdapter domAdapter)
+    {
+        if (domAdapter instanceof Region2ElementAdapter)
+        {
+            final Region2ElementAdapter elementAdapter = 
+                (Region2ElementAdapter) domAdapter;
+            validateContainment(elementAdapter, _jsfValidationContext);
+        }
+    }
+
+    private void validateContainment(
+            final Region2ElementAdapter elementAdapter,
+            final JSFValidationContext jsfValidationContext)
+    {
+        // don't validate JSP fragments since the necessary containment may
+        // existing
+        // in the JSP files that include them
+        // also only validate the first instance of containment violation in a
+        // file
+        if (JSPUtil.isJSPFragment(jsfValidationContext.getFile())
+                || _containmentValidationCount > 0)
+        {
+            return;
+        }
+
+        final IStructuredDocumentContext context = elementAdapter
+                .getDocumentContext();
+        final IDOMContextResolver resolver = IStructuredDocumentContextResolverFactory.INSTANCE
+                .getDOMContextResolver(context);
+        final Node node = resolver.getNode();
+
+        final String uri = elementAdapter.getNamespace();
+        final String tagName = elementAdapter.getLocalName();
+        // final Element node = elementAdapter.
+
+        final ITaglibDomainMetaDataModelContext modelContext = TaglibDomainMetaDataQueryHelper
+                .createMetaDataModelContext(jsfValidationContext.getFile()
+                        .getProject(), uri);
+        final Entity entity = TaglibDomainMetaDataQueryHelper.getEntity(
+                modelContext, tagName);
+        if (entity != null)
+        {
+            final Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(
+                    entity, "containment-constraint");
+
+            if (trait != null)
+            {
+                final ContainsTagConstraint tagConstraint = (ContainsTagConstraint) trait
+                        .getValue();
+
+                final String algorithm = tagConstraint.getSetGenerator()
+                        .getAlgorithm();
+
+                // TODO: need generalized factory mechanism for registering and
+                // constructing algorithms.
+                if (!"xpath".equals(algorithm))
+                {
+                    return;
+                }
+
+                final String expr = tagConstraint.getSetGenerator()
+                        .getExpression();
+
+                // TODO: optimize on the expression and cache for reuse
+                final XPathMatchingAlgorithm xpathAlg = new XPathMatchingAlgorithm(
+                        expr);
+
+                AxiomaticSet set = null;
+
+                try
+                {
+                    set = xpathAlg.evaluate(node);
+                    // map dom nodes to tag identifiers
+                    set = elem2TagIdMapper.map(set);
+                }
+                catch (final InvalidExpressionException e)
+                {
+                    JSFCorePlugin.log(e, "Problem with expression: " + expr
+                            + " on node " + node);
+                    return;
+                }
+                catch (final EvaluationException e)
+                {
+                    JSFCorePlugin.log(e, "Problem evaluating expression: "
+                            + expr + " on node " + node);
+                    return;
+                }
+
+                final TagSet constraintData = tagConstraint.getSatisfiesSet();
+                final AxiomaticSet constraintSet = new ConcreteAxiomaticSet();
+                for (final Iterator it = constraintData.getTags().iterator(); it
+                        .hasNext();)
+                {
+                    final TagId tagId = (TagId) it.next();
+                    constraintSet.add(TagIdentifierFactory.createJSPTagWrapper(
+                            tagId.getUri(), tagId.getName()));
+                }
+                final MemberConstraint memberConstraint = new MemberConstraint(
+                        constraintSet);
+                final Diagnostic diag = memberConstraint.isSatisfied(set);
+
+                if (diag.getSeverity() != Diagnostic.OK)
+                {
+                    _containmentValidationCount++; // found a violation
+
+                    final List data = diag.getData();
+
+                    for (final Iterator it = data.iterator(); it.hasNext();)
+                    {
+                        final TagIdentifier missingParent = (TagIdentifier) it
+                                .next();
+
+                        reportContainmentProblem(context, node.getNodeName(),
+                                Diagnostic.WARNING, 
+                                missingParent.getTagName(), missingParent
+                                        .getUri());
+                    }
+                }
+            }
+        }
+    }
+
+    private static final String MESSAGE_PATTERN = 
+        "Tag {0} is missing required parent tag \"{1}\" ({2})";
+
+    // TODO: need a diagnostic factory
+    private void reportContainmentProblem(
+            final IStructuredDocumentContext context,
+            final String nodeName, final int severity, 
+             final String tagName, final String uri)
+    {
+
+        final String msg = MessageFormat.format(
+                MESSAGE_PATTERN, new Object[]
+                                           {nodeName, tagName, uri});
+
+        final Diagnostic problem = 
+            new BasicDiagnostic(severity, "", -1, msg, null);
+        // add one so that the start offset is at the node name, rather
+        // than the opening brace.
+        final int start = context.getDocumentPosition()+1;
+        final int length = nodeName.length();
+
+       _jsfValidationContext.getReporter().report(problem, start, length);
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/.settings/org.eclipse.jdt.core.prefs b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/.settings/org.eclipse.jdt.core.prefs
index e45508d..7826e11 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,6 +1,6 @@
-#Tue Apr 10 09:09:10 PDT 2007
+#Tue Oct 02 10:22:08 PDT 2007
 eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=1.5
@@ -65,11 +65,13 @@
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=error
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/META-INF/MANIFEST.MF
index 68b1433..e00f583 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.eclipse.jst.jsf.facesconfig.ui;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Activator: org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin
 Bundle-Vendor: %plugin.provider
 Bundle-Localization: plugin
@@ -15,21 +15,21 @@
  org.eclipse.wst.xml.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.sse.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.xml.ui;bundle-version="[1.0.100,1.1.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.4.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,3.0.0)",
  org.eclipse.jst.jsp.core;bundle-version="[1.1.0,1.3.0)",
- org.eclipse.wst.sse.ui;bundle-version="[1.0.101,1.1.0)",
- org.eclipse.wst.common.ui.properties;bundle-version="[1.0.101,1.2.0)",
+ org.eclipse.wst.sse.ui;bundle-version="[1.0.101,1.2.0)",
  org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.wst.common.emf;bundle-version="[1.1.103,2.0.0)",
  org.eclipse.jst.jsf.facesconfig;bundle-version="[1.0.0,1.1.0)",
  org.eclipse.wst.common.project.facet.core;bundle-version="[1.2.0,1.3.0)",
- org.eclipse.emf.edit.ui;bundle-version="[2.2.0,2.4.0)",
+ org.eclipse.emf.edit.ui;bundle-version="[2.2.0,3.0.0)",
  org.eclipse.jst.jsf.common.ui;bundle-version="[1.0.0,1.1.0)",
  org.eclipse.jdt.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jst.jsf.core;bundle-version="[1.0.0,1.1.0)",
  org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.common.modulecore;bundle-version="[1.1.0,1.2.0)"
-Eclipse-LazyStart: true
+ org.eclipse.wst.common.modulecore;bundle-version="[1.1.0,1.2.0)",
+ org.eclipse.ui.views.properties.tabbed;bundle-version="[3.2.0,4.0.0)"
+Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.jst.jsf.facesconfig.ui;x-internal:=true,
  org.eclipse.jst.jsf.facesconfig.ui.dialog;x-internal:=true,
  org.eclipse.jst.jsf.facesconfig.ui.page;x-internal:=true,
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/plugin.xml b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/plugin.xml
index 19845ce..8bb5f7f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/plugin.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/plugin.xml
@@ -4,7 +4,7 @@
   <extension
         point="org.eclipse.ui.preferencePages">
      <page
-           category="org.eclipse.wst.sse.ui.internal.provisional.preferences/org.eclipse.jst.jsf.ui.JSFRootPage"
+           category="org.eclipse.jst.jsf.ui.JSFRootPage"
            class="org.eclipse.jst.jsf.facesconfig.ui.preference.GEMPreferences"
            id="org.eclipse.jst.jsf.facesconfig.ui.preference.GEMPreferences"
            name="%preferencepage.jsffacesconfigui.name"/>
@@ -54,8 +54,8 @@
 	</extension>
 	<!-- ********** End Introduction Page ************** -->
 		<!-- ************* properties view ************** -->
-	<extension point="org.eclipse.wst.common.ui.properties.propertyTabs">
-		<propertyTabs
+	<extension point="org.eclipse.ui.views.properties.tabbed.propertyTabs"> 
+		<propertyTabs 
 			contributorId="org.eclipse.jst.jsf.facesconfig.ui.FacesConfigEditor">
 			<propertyTab label="%propertyTab.attribute" category="attribute"
 				id="org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.attribute"/>
@@ -63,12 +63,12 @@
 				id="org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.general"/>
 		</propertyTabs>
 	</extension>
-		<extension point="org.eclipse.wst.common.ui.properties.propertyContributor">
+		<extension point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
 		<propertyContributor
 			sectionDescriptorProvider="org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.PageflowSectionDescriptorProvider"
 			contributorId="org.eclipse.jst.jsf.facesconfig.ui.FacesConfigEditor"
 			labelProvider="org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.PageflowSectionLabelProvider">
-			<propertyCategory category="attribute"/>
+			<propertyCategory category="attribute" />
 			<propertyCategory category="general"/>
 		</propertyContributor>
 	</extension>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorMessages.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorMessages.java
index 0def039..39694bd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorMessages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorMessages.java
@@ -29,8 +29,14 @@
 		NLS.initializeMessages(BUNDLE_NAME, EditorMessages.class);
 	}
 
+	/**
+	 * see EditorMessages.properties
+	 */
 	public static String AddEditManagedPropertyDialog_Add;
 
+	/**
+	 * see EditorMessages.properties
+	 */
 	public static String AddEditManagedPropertyDialog_Edit;
 
 	/**
@@ -1538,4 +1544,9 @@
 	 */
 	public static String AlignmentAction_AlignTopAction_Tooltip;
 
+    /**
+     * User can turn off intro page in faces-config editor
+     */
+    public static String editor_pageflow_page_intro_NoIntroPage;
+
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorMessages.properties b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorMessages.properties
index 095ef07..adb0ac4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorMessages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorMessages.properties
@@ -48,6 +48,7 @@
 editor_pageflow_page_intro_title = Faces Configuration Introduction
 editor_pageflow_page_intro_help_HelpContextID = com.sybase.stf.jmt.faces_config_editor_introduction
 editor_pageflow_page_intro_help_HelpToolTip = Introduction
+editor_pageflow_page_intro_NoIntroPage=Don't show this page next time. 
 
 ####################################################
 #ManagedBean page 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorPlugin.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorPlugin.java
index 69cbda4..9014efb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorPlugin.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/EditorPlugin.java
@@ -27,7 +27,6 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
@@ -96,7 +95,7 @@
 	}
 
 	/**
-	 * Returns the shared instance.
+	 * @return the shared instance.
 	 */
 	public static EditorPlugin getDefault() {
 		return plugin;
@@ -111,6 +110,8 @@
 
 	/**
 	 * Returns a logger for the new class using this plugin for reference.
+	 * @param theClass 
+	 * @return the default root logger
 	 */
 	public static Logger getLogger(Class theClass) {
 		return getDefault().getRootLogger(); // .getLogger(theClass);
@@ -118,6 +119,7 @@
 
 	/**
 	 * Returns the plugin's root logger
+	 * @return the root logger
 	 */
 	public Logger getRootLogger() {
 		return log;
@@ -125,6 +127,7 @@
 
 	/**
 	 * Returns the plugin's resource bundle,
+	 * @return the resource bundle
 	 */
 	public ResourceBundle getResourceBundle() {
 		return resourceBundle;
@@ -133,6 +136,8 @@
 	/**
 	 * Returns the string from the plugin's resource bundle, or 'key' if not
 	 * found.
+	 * @param key 
+	 * @return the resource bundle string for key
 	 */
 	public static String getResourceString(String key) {
 		ResourceBundle bundle = getDefault().getResourceBundle();
@@ -147,6 +152,7 @@
 	 * Returns the standard display to be used. The method first checks, if the
 	 * thread calling this method has an associated dispaly. If so, this display
 	 * is returned. Otherwise the method returns the default display.
+	 * @return the standard display
 	 */
 	public static Display getStandardDisplay() {
 		Display display;
@@ -170,6 +176,9 @@
         return getDefault().getWorkbench().getActiveWorkbenchWindow();
 	}
 
+	/**
+	 * @return the active shell
+	 */
 	public static Shell getActiveShell() {
 		Shell shell = null;
 		IWorkbenchWindow workbenchWindow = getActiveWorkbenchWindow();
@@ -182,22 +191,6 @@
 	}
 
 	/**
-	 * Returns the active workbench page. Note that the active page may not be
-	 * the one that the user perceives as active in some situations so this
-	 * method of obtaining the activate page should only be used if no other
-	 * method is available.
-	 * 
-	 * @return the active workbench page
-	 */
-	public static IWorkbenchPage getActivePage() {
-		IWorkbenchWindow window = getActiveWorkbenchWindow();
-		if (window == null) {
-			return null;
-		}
-		return window.getActivePage();
-	}
-
-	/**
 	 * Returns a shared image for the given name
 	 * <p>
 	 * Note: Images returned from this method will be automitically disposed of
@@ -262,7 +255,7 @@
 	/**
 	 * Returns this plugin's unique identifier
 	 * 
-	 * @retun this plugin's unique identifier
+	 * @return this plugin's unique identifier
 	 * 
 	 */
 	public static String getPluginId() {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/FacesConfigActionBarContributor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/FacesConfigActionBarContributor.java
index c8b00f2..7171e35 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/FacesConfigActionBarContributor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/FacesConfigActionBarContributor.java
@@ -37,16 +37,17 @@
 
 public class FacesConfigActionBarContributor extends
 		MultiPageEditorActionBarContributor {
-	protected SourcePageActionContributor sourceActionContributor = null;
+	private SourcePageActionContributor sourceActionContributor = null;
 
-	protected PageflowActionBarContributor pageflowActionContributor = null;
+	private PageflowActionBarContributor pageflowActionContributor = null;
 
-	protected EditingDomainActionBarContributor formbasedPageActionContributor = null;
+	private EditingDomainActionBarContributor formbasedPageActionContributor = null;
 
 	private IEditorPart activeNestedEditor;
 
-	//private IEditorPart targetEditor;
-
+	/**
+	 * Default constructor
+	 */
 	public FacesConfigActionBarContributor() {
 		super();
 	}
@@ -142,25 +143,21 @@
 		return activeContributor;
 	}
 
-	public SourcePageActionContributor getSourceActionContributor() {
+	private SourcePageActionContributor getSourceActionContributor() {
 		if (sourceActionContributor == null) {
 			sourceActionContributor = new SourcePageActionContributor();
 		}
 		return sourceActionContributor;
 	}
 
-	public EditingDomainActionBarContributor getFormbasedPageActionContributor() {
+	private EditingDomainActionBarContributor getFormbasedPageActionContributor() {
 		if (formbasedPageActionContributor == null) {
 			formbasedPageActionContributor = new MyEditingDomainActionContributor();
 		}
 		return formbasedPageActionContributor;
 	}
 
-//	protected void declareGlobalActionKeys() {
-//        // 
-//	}
-
-	public PageflowActionBarContributor getPageflowActionContributor() {
+	private PageflowActionBarContributor getPageflowActionContributor() {
 		if (pageflowActionContributor == null) {
 			pageflowActionContributor = new PageflowActionBarContributor();
 		}
@@ -168,6 +165,9 @@
 
 	}
 
+	/**
+	 * update the action bars
+	 */
 	public void updateActionBars() {
 		EditorActionBarContributor activeContributor = getActionContributor(activeNestedEditor);
 		if (activeContributor instanceof INestedActionContributor)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/FacesConfigEditor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/FacesConfigEditor.java
index 0df29c3..3a80bdc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/FacesConfigEditor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/FacesConfigEditor.java
@@ -99,12 +99,12 @@
 import org.eclipse.ui.part.FileEditorInput;
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 import org.eclipse.ui.views.properties.IPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
 import org.eclipse.wst.common.project.facet.core.IFacetedProject;
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ITabbedPropertySheetPageContributor;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
 import org.eclipse.wst.sse.core.StructuredModelManager;
 import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
 import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
@@ -871,7 +871,7 @@
 			IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
 			if (file != null) {
 				doSaveAs(URI.createPlatformResourceURI(file.getFullPath()
-						.toString()), new FileEditorInput(file));
+						.toString(), false), new FileEditorInput(file));
 			}
 		}
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/IFacesConfigConstants.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/IFacesConfigConstants.java
index bb72553..ba23f6c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/IFacesConfigConstants.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/IFacesConfigConstants.java
@@ -17,60 +17,144 @@
  */
 public interface IFacesConfigConstants {
 
+	/**
+	 * 
+	 */
 	public static final String FACES_CONFIG = "faces-config";
 
+	/**
+	 * 
+	 */
 	public static final String MANAGED_PROPERTY = "managed-property";
 
+	/**
+	 * 
+	 */
 	public static final String VALUE = "value";
 
+	/**
+	 * 
+	 */
 	public static final String NULL_VALUE = "null-value";
 
+	/**
+	 * 
+	 */
 	public static final String MAP_ENTRIES = "map-entries";
 
+	/**
+	 * 
+	 */
 	public static final String MAP_ENTRY = "map-entry";
 
+	/**
+	 * 
+	 */
 	public static final String LIST_ENTRIES = "list-entries";
 
+	/**
+	 * 
+	 */
 	public static final String NAVIGATION_RULE = "navigation-rule";
 
+	/**
+	 * 
+	 */
 	public static final String COMPONENT_SUPER_CLASS = "javax.faces.component.UIComponent";
 
+	/**
+	 * 
+	 */
 	public static final String RENDER_KIT_SUPER_CLASS = "javax.faces.render.RenderKit";
 
+	/**
+	 * 
+	 */
 	public static final String CONVERTER_INTERFACE = "javax.faces.convert.Converter";
 
+	/**
+	 * 
+	 */
 	public static final String VALIDATOR_INTERFACE = "javax.faces.validator.Validator";
 
+	/**
+	 * 
+	 */
 	public static final String RENDERER_SUPER_CLASS = "javax.faces.render.Renderer";
 
+	/**
+	 * 
+	 */
 	public static final String ACTION_LISTENER_INTERFACE = "javax.faces.event.ActionListener";
 
+	/**
+	 * 
+	 */
 	public static final String NAVIGATION_HANDLE_SUPER_CLASS = "javax.faces.application.NavigationHandler";
 
+	/**
+	 * 
+	 */
 	public static final String PROPERTY_RESOLVER_SUPER_CLASS = "javax.faces.el.PropertyResolver";
 
+	/**
+	 * 
+	 */
 	public static final String STATE_MANAGER_SUPER_CLASS = "javax.faces.application.StateManager";
 
+	/**
+	 * 
+	 */
 	public static final String VARIABLE_RESOLVER_SUPER_CLASS = "javax.faces.el.VariableResolver";
 
+	/**
+	 * 
+	 */
 	public static final String VIEW_HANDLER_SUPER_CLASS = "javax.faces.application.ViewHandler";
 
+	/**
+	 * 
+	 */
 	public static final String APPLICATION_FACTORY_SUPER_CLASS = "javax.faces.application.ApplicationFactory";
 
+	/**
+	 * 
+	 */
 	public static final String FACES_CONTEXT_FACTORY_SUPER_CLASS = "javax.faces.context.FacesContextFactory";
 
+	/**
+	 * 
+	 */
 	public static final String LIFECYCLE_FACTORY_SUPER_CLASS = "javax.faces.lifecycle.LifecycleFactory";
 
+	/**
+	 * 
+	 */
 	public static final String RENDER_KIT_FACTORY_SUPER_CLASS = "javax.faces.render.RenderKitFactory";
 
+	/**
+	 * 
+	 */
 	public static final String PHASE_LISTENER_INTERFACE = "javax.faces.event.PhaseListener";
 
+	/**
+	 * 
+	 */
 	public static final String MANAGED_BEAN_SCOPE_APPLICATION = "application";
 
+	/**
+	 * 
+	 */
 	public static final String MANAGED_BEAN_SCOPE_SESSION = "session";
 
+	/**
+	 * 
+	 */
 	public static final String MANAGED_BEAN_SCOPE_REQUEST = "request";
 
+	/**
+	 * 
+	 */
 	public static final String MANAGED_BEAN_SCOPE_NONE = "none";
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/INestedActionContributor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/INestedActionContributor.java
index f50fc57..a36a2f4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/INestedActionContributor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/INestedActionContributor.java
@@ -18,5 +18,8 @@
  * required.
  */
 public interface INestedActionContributor {
+	/**
+	 * Updated nested actions
+	 */
 	void update();
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MultiPageEditorOutlinePage.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MultiPageEditorOutlinePage.java
index 90e5cae..d9110dd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MultiPageEditorOutlinePage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MultiPageEditorOutlinePage.java
@@ -384,7 +384,7 @@
 	/*
 	 * (non-Javadoc) Method declared on PageBookView.
 	 */
-	protected PageRec doCreatePage(IWorkbenchPart part) {
+	private PageRec doCreatePage(IWorkbenchPart part) {
 		// Try to get an outline page.
 		Object obj = part.getAdapter(IContentOutlinePage.class);
 		if (obj instanceof IContentOutlinePage) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MyEditingDomainActionContributor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MyEditingDomainActionContributor.java
index 93eb8e4..6c2559a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MyEditingDomainActionContributor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/MyEditingDomainActionContributor.java
@@ -27,6 +27,9 @@
  */
 public class MyEditingDomainActionContributor extends
 		EditingDomainActionBarContributor implements INestedActionContributor {
+	/**
+	 * Default constructor
+	 */
 	public MyEditingDomainActionContributor() {
 		super();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditAttributeDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditAttributeDialog.java
index 055fffc..46438cc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditAttributeDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditAttributeDialog.java
@@ -57,6 +57,10 @@
 
 	private boolean isNew;
 
+	/**
+	 * @param parentShell
+	 * @param isNew
+	 */
 	public AddEditAttributeDialog(Shell parentShell, boolean isNew) {
 		super(parentShell);
 		this.isNew = isNew;
@@ -184,7 +188,7 @@
 				shellSize.y);
 	}
 
-	public IProject getProject() {
+	private IProject getProject() {
 		return project;
 	}
 
@@ -200,38 +204,65 @@
 		super.okPressed();
 	}
 
+	/**
+	 * @return the attribute class
+	 */
 	public String getAttributeClass() {
 		return attributeClass;
 	}
 
+	/**
+	 * @param attributeClass
+	 */
 	public void setAttributeClass(String attributeClass) {
 		this.attributeClass = attributeClass;
 	}
 
+	/**
+	 * @return the attribute name
+	 */
 	public String getAttributeName() {
 		return attributeName;
 	}
 
+	/**
+	 * @param attributeName
+	 */
 	public void setAttributeName(String attributeName) {
 		this.attributeName = attributeName;
 	}
 
+	/**
+	 * @return the default value
+	 */
 	public String getDefaultValue() {
 		return defaultValue;
 	}
 
+	/**
+	 * @param defaultValue
+	 */
 	public void setDefaultValue(String defaultValue) {
 		this.defaultValue = defaultValue;
 	}
 
+	/**
+	 * @return the suggested value
+	 */
 	public String getSuggestedValue() {
 		return suggestedValue;
 	}
 
+	/**
+	 * @param suggestedValue
+	 */
 	public void setSuggestedValue(String suggestedValue) {
 		this.suggestedValue = suggestedValue;
 	}
 
+	/**
+	 * @param project
+	 */
 	public void setProject(IProject project) {
 		this.project = project;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditFacetDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditFacetDialog.java
index 5b5a1f0..d0df52d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditFacetDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditFacetDialog.java
@@ -181,26 +181,44 @@
 		super.okPressed();
 	}
 
+	/**
+	 * @return the description
+	 */
 	public String getDescription() {
 		return description;
 	}
 
+	/**
+	 * @return the display name
+	 */
 	public String getDisplayName() {
 		return displayName;
 	}
 
+	/**
+	 * @return the facet name
+	 */
 	public String getFacetName() {
 		return facetName;
 	}
 
+	/**
+	 * @param description
+	 */
 	public void setDescription(String description) {
 		this.description = description;
 	}
 
+	/**
+	 * @param displayName
+	 */
 	public void setDisplayName(String displayName) {
 		this.displayName = displayName;
 	}
 
+	/**
+	 * @param facetName
+	 */
 	public void setFacetName(String facetName) {
 		this.facetName = facetName;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditManagedPropertyDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditManagedPropertyDialog.java
index aa5aa21..170955a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditManagedPropertyDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditManagedPropertyDialog.java
@@ -96,7 +96,7 @@
 
 	private Composite parent;
 
-	public static final String[] valueTypes = { IFacesConfigConstants.VALUE,
+	private static final String[] valueTypes = { IFacesConfigConstants.VALUE,
 			IFacesConfigConstants.NULL_VALUE,
 			IFacesConfigConstants.MAP_ENTRIES,
 			IFacesConfigConstants.LIST_ENTRIES };
@@ -110,6 +110,7 @@
 	 * 
 	 * @param parentShell
 	 * @param managedBean
+	 * @param section 
 	 */
 	public AddEditManagedPropertyDialog(Shell parentShell,
 			ManagedBeanType managedBean, AbstractFacesConfigSection section) {
@@ -123,6 +124,7 @@
 	 * 
 	 * @param parentShell
 	 * @param managedProperty
+	 * @param section
 	 */
 	public AddEditManagedPropertyDialog(Shell parentShell,
 			ManagedPropertyType managedProperty, AbstractFacesConfigSection section) {
@@ -439,6 +441,9 @@
 				shellSize.y);
 	}
 
+	/**
+	 * @return the project
+	 */
 	public IProject getProject() {
 		if (project == null) {
 			project = (IProject) section.getPage().getEditor().getAdapter(
@@ -458,38 +463,65 @@
 		super.okPressed();
 	}
 
+	/**
+	 * @return the property class
+	 */
 	public String getPropertyClass() {
 		return propertyClass;
 	}
 
+	/**
+	 * @param attributeClass
+	 */
 	public void setAttributeClass(String attributeClass) {
 		this.propertyClass = attributeClass;
 	}
 
+	/**
+	 * @return the property name
+	 */
 	public String getPropertyName() {
 		return propertyName;
 	}
 
+	/**
+	 * @param attributeName
+	 */
 	public void setAttributeName(String attributeName) {
 		this.propertyName = attributeName;
 	}
 
+	/**
+	 * @return the value type
+	 */
 	public String getValueType() {
 		return valueType;
 	}
 
+	/**
+	 * @param defaultValue
+	 */
 	public void setValueType(String defaultValue) {
 		this.valueType = defaultValue;
 	}
 
+	/**
+	 * @param project
+	 */
 	public void setProject(IProject project) {
 		this.project = project;
 	}
 
+	/**
+	 * @return the value object
+	 */
 	public Object getValueObject() {
 		return valueObject;
 	}
 
+	/**
+	 * @param valueObject
+	 */
 	public void setValueObject(Object valueObject) {
 		this.valueObject = valueObject;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditMapEntryDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditMapEntryDialog.java
index 7586e73..c50e936 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditMapEntryDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditMapEntryDialog.java
@@ -54,6 +54,10 @@
 
 	private boolean isNullValue;
 
+	/**
+	 * @param parentShell
+	 * @param isNew
+	 */
 	public AddEditMapEntryDialog(Shell parentShell, boolean isNew) {
 		super(parentShell);
 		this.isNew = isNew;
@@ -119,6 +123,9 @@
 		}
 	}
 
+	/**
+	 * @param parent
+	 */
 	public void layoutKeySection(Composite parent) {
 		keyField = new StringDialogField();
 		keyField.setLabelText(EditorMessages.MapEntryEditGroup_Key); //$NON-NLS-1$
@@ -140,10 +147,11 @@
 
 	}
 
+	/**
+	 * @param parent
+	 */
 	public void layoutValueSection(Composite parent) {
-		Composite
-
-		valueSection = SWTUtils.createComposite(parent, SWT.NONE);
+		Composite valueSection = SWTUtils.createComposite(parent, SWT.NONE);
 
 		GridData gd = new GridData(GridData.FILL_BOTH);
 		valueSection.setLayoutData(gd);
@@ -203,26 +211,44 @@
 		super.okPressed();
 	}
 
+	/**
+	 * @return true if is null
+	 */
 	public boolean isNullValue() {
 		return isNullValue;
 	}
 
+	/**
+	 * @param isNullValue
+	 */
 	public void setNullValue(boolean isNullValue) {
 		this.isNullValue = isNullValue;
 	}
 
+	/**
+	 * @return the key 
+	 */ 
 	public String getKey() {
 		return key;
 	}
 
+	/**
+	 * @param key
+	 */
 	public void setKey(String key) {
 		this.key = key;
 	}
 
+	/**
+	 * @return the value
+	 */
 	public String getValue() {
 		return value;
 	}
 
+	/**
+	 * @param value
+	 */
 	public void setValue(String value) {
 		this.value = value;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditPropertyDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditPropertyDialog.java
index 5d80eec..abe5b23 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditPropertyDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditPropertyDialog.java
@@ -191,7 +191,7 @@
 				shellSize.y);
 	}
 
-	protected IProject getProject() {
+	private IProject getProject() {
 		return project;
 	}
 
@@ -204,38 +204,65 @@
 		super.okPressed();
 	}
 
+	/**
+	 * @return the default value
+	 */
 	public String getDefaultValue() {
 		return defaultValue;
 	}
 
+	/**
+	 * @param defaultValue
+	 */
 	public void setDefaultValue(String defaultValue) {
 		this.defaultValue = defaultValue;
 	}
 
+	/**
+	 * @return the property class
+	 */
 	public String getPropertyClass() {
 		return propertyClass;
 	}
 
+	/**
+	 * @param propertyClass
+	 */
 	public void setPropertyClass(String propertyClass) {
 		this.propertyClass = propertyClass;
 	}
 
+	/**
+	 * @return the property name
+	 */
 	public String getPropertyName() {
 		return propertyName;
 	}
 
+	/**
+	 * @param propertyName
+	 */
 	public void setPropertyName(String propertyName) {
 		this.propertyName = propertyName;
 	}
 
+	/**
+	 * @return the suggested value
+	 */
 	public String getSuggestedValue() {
 		return suggestedValue;
 	}
 
+	/**
+	 * @param suggestedValue
+	 */
 	public void setSuggestedValue(String suggestedValue) {
 		this.suggestedValue = suggestedValue;
 	}
 
+	/**
+	 * @param project
+	 */
 	public void setProject(IProject project) {
 		this.project = project;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditRendererDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditRendererDialog.java
index 1c0d3b6..cbcd0e8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditRendererDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/AddEditRendererDialog.java
@@ -231,38 +231,65 @@
 		super.okPressed();
 	}
 
+	/**
+	 * @return the renderer clas
+	 */
 	public String getRendererClass() {
 		return rendererClass;
 	}
 
+	/**
+	 * @param rendererClass
+	 */
 	public void setRendererClass(String rendererClass) {
 		this.rendererClass = rendererClass;
 	}
 
+	/**
+	 * @return the renderer name
+	 */
 	public String getRendererName() {
 		return rendererName;
 	}
 
+	/**
+	 * @param rendererName
+	 */
 	public void setRendererName(String rendererName) {
 		this.rendererName = rendererName;
 	}
 
+	/**
+	 * @return the component family
+	 */
 	public String getComponentFamily() {
 		return componentFamily;
 	}
 
+	/**
+	 * @param componentFamily
+	 */
 	public void setComponentFamily(String componentFamily) {
 		this.componentFamily = componentFamily;
 	}
 
+	/**
+	 * @return the renderer type
+	 */
 	public String getRendererType() {
 		return rendererType;
 	}
 
+	/**
+	 * @param rendererType
+	 */
 	public void setRendererType(String rendererType) {
 		this.rendererType = rendererType;
 	}
 
+	/**
+	 * @param project
+	 */
 	public void setProject(IProject project) {
 		this.project = project;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/CommonListDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/CommonListDialog.java
index 75dd0bc..36ae9fa 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/CommonListDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/CommonListDialog.java
@@ -58,6 +58,13 @@
 	/** The mini width for the text control */
 	private static final int TEXT_MINI_WIDTH = 100;
 
+	/**
+	 * @param parentShell
+	 * @param page
+	 * @param input
+	 * @param caption
+	 * @param label
+	 */
 	protected CommonListDialog(Shell parentShell, IFacesConfigPage page,
 			Object input, String caption, String label) {
 		super(parentShell);
@@ -149,6 +156,7 @@
 
 	/**
 	 * get the input object of this section.
+	 * @return the input
 	 */
 	public Object getInput() {
 		return input;
@@ -156,6 +164,7 @@
 
 	/**
 	 * set input object for this section.
+	 * @param newInput 
 	 */
 	public void setInput(Object newInput) {
 		input = newInput;
@@ -214,9 +223,15 @@
 		return (EditingDomain) page.getEditor().getAdapter(EditingDomain.class);
 	}
 
+	/**
+	 * @return the value
+	 */
 	public String getValue() {
 		return value;
 	}
+	/**
+	 * @param value
+	 */
 	public void setValue(String value) {
 		this.value = value;
 		refresh();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/ComponentListDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/ComponentListDialog.java
index 19f1f4d..0c3e155 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/ComponentListDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/ComponentListDialog.java
@@ -50,6 +50,13 @@
 		}
 	}
 
+	/**
+	 * @param parentShell
+	 * @param page
+	 * @param input
+	 * @param caption
+	 * @param label
+	 */
 	protected ComponentListDialog(Shell parentShell, IFacesConfigPage page,
 			Object input, String caption, String label) {
 		super(parentShell, page, input, caption, label);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/DialogUtil.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/DialogUtil.java
index d8c5618..77db79a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/DialogUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/DialogUtil.java
@@ -34,8 +34,15 @@
  * @author Zhi-peng Zhang
  * @version
  */
-public class DialogUtil {
+public final class DialogUtil {
 
+	/**
+	 * @param shell
+	 * @param project
+	 * @param superType
+	 * @param tyle
+	 * @return fully qualified class name or null
+	 */
 	public static String openClassDialog(Shell shell, IProject project,
 			String superType, int tyle) {
 		SelectionDialog dialog = JavaUIHelper
@@ -55,6 +62,11 @@
 		return null;
 	}
 
+	/**
+	 * @param shell
+	 * @param facesConfig
+	 * @return the name of the renderkit or null
+	 */
 	public static String openRenderKitDialog(Shell shell,
 			FacesConfigType facesConfig) {
 		if (facesConfig != null) {
@@ -85,6 +97,11 @@
 		return null;
 	}
 
+	/**
+	 * @param shell
+	 * @param existedLocaleList
+	 * @return the locale or null
+	 */
 	public static String openLocaleDialog(Shell shell, List existedLocaleList) {
 		LocaleDialog dialog = new LocaleDialog(shell, existedLocaleList);
 		if (dialog.open() == Window.OK) {
@@ -96,6 +113,12 @@
 		return null;
 	}
 
+	/**
+	 * @param shell
+	 * @param project
+	 * @param existedBundleList
+	 * @return the message bundle or null
+	 */
 	public static String openMessageBundleDialog(Shell shell, IProject project,
 			List existedBundleList) {
 		IJavaProject javaProject = null;
@@ -120,4 +143,9 @@
 		}
 		return null;
 	}
+	
+	private DialogUtil()
+	{
+		// no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditListEntriesDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditListEntriesDialog.java
index b89a83b..cbe79f3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditListEntriesDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditListEntriesDialog.java
@@ -339,6 +339,9 @@
 		updateButtonsStatus();
 	}
 
+	/**
+	 * update the status buttons
+	 */
 	public void updateButtonsStatus() {
 		if (((IStructuredSelection) tableViewer.getSelection()).size() > 0) {
 			editButton.setEnabled(true);
@@ -376,6 +379,9 @@
 				shellSize.y);
 	}
 
+	/**
+	 * @return the current project
+	 */
 	public IProject getProject() {
 		if (project == null) {
 			project = (IProject) section.getPage().getEditor().getAdapter(
@@ -384,14 +390,23 @@
 		return project;
 	}
 
+	/**
+	 * @param project
+	 */
 	public void setProject(IProject project) {
 		this.project = project;
 	}
 
+	/**
+	 * @return the list entries
+	 */
 	public ListEntriesType getListEntries() {
 		return listEntries;
 	}
 
+	/**
+	 * @param listEntries
+	 */
 	public void setListEntries(ListEntriesType listEntries) {
 		this.listEntries = listEntries;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditMapEntriesDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditMapEntriesDialog.java
index d03570a..ef48e05 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditMapEntriesDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditMapEntriesDialog.java
@@ -89,6 +89,7 @@
 	 * @param parentShell
 	 * @param mapEntries
 	 *            the map-entries element that working on.
+	 * @param section 
 	 */
 	public EditMapEntriesDialog(Shell parentShell, MapEntriesType mapEntries,
 			AbstractFacesConfigSection section) {
@@ -293,6 +294,9 @@
 		removeButton.setEnabled(false);
 	}
 	
+	/**
+	 * @return the current project
+	 */
 	public IProject getProject() {
 		if (project == null) {
 			project = (IProject) section.getPage().getEditor().getAdapter(
@@ -384,6 +388,9 @@
 		updateButtonsStatus();
 	}
 
+	/**
+	 * update the button status
+	 */
 	public void updateButtonsStatus() {
 		if (((IStructuredSelection) tableViewer.getSelection()).size() > 0) {
 			editButton.setEnabled(true);
@@ -419,14 +426,23 @@
 				shellSize.y);
 	}
 
+	/**
+	 * @param project
+	 */
 	public void setProject(IProject project) {
 		this.project = project;
 	}
 
+	/**
+	 * @return the map entries
+	 */
 	public MapEntriesType getMapEntries() {
 		return mapEntries;
 	}
 
+	/**
+	 * @param mapEntries
+	 */
 	public void setMapEntries(MapEntriesType mapEntries) {
 		this.mapEntries = mapEntries;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditValueDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditValueDialog.java
index c6cdbb6..aabdc93 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditValueDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/EditValueDialog.java
@@ -52,16 +52,28 @@
 
 	private Button nullValueTypeButton;
 
-	private boolean isNullButtonShown = false;
+	private boolean isNullButtonShown;
 
 	private boolean isNullValue;
 
+	/**
+	 * Equivilent to EditValueDialog(parentShell, false, false, value)
+	 * 
+	 * @param parentShell
+	 * @param value
+	 */
 	public EditValueDialog(Shell parentShell, String value) {
-		super(parentShell);
+		this(parentShell, false, false, value);
 		this.value = value;
 		this.isNullButtonShown = false;
 	}
 
+	/**
+	 * @param parentShell
+	 * @param isNullButtonShown
+	 * @param isNullValue
+	 * @param value
+	 */
 	public EditValueDialog(Shell parentShell, boolean isNullButtonShown,
 			boolean isNullValue, String value) {
 		super(parentShell);
@@ -198,10 +210,16 @@
 		super.buttonPressed(buttonId);
 	}
 
+	/**
+	 * @return the result data
+	 */
 	public Object getResultData() {
 		return value;
 	}
 
+	/**
+	 * @return tru if isNullButtonShown and isNullValue are both true
+	 */
 	public boolean isNullValue() {
 		return this.isNullButtonShown && isNullValue;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/ListChoiceDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/ListChoiceDialog.java
index e91881b..9538b11 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/ListChoiceDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/ListChoiceDialog.java
@@ -47,13 +47,15 @@
 	
 	private String labelString;
 
+	/**
+	 * @param parentShell
+	 * @param items
+	 * @param labelString
+	 */
 	public ListChoiceDialog(Shell parentShell, String[] items, String labelString) {
 		super(parentShell);
-		this.items = items;
-		if(this.items == null)
-		{
-			this.items = new String[0];
-		}
+		// if passed null for items, make it an empty array of strings
+		this.items = items == null ? new String[0] : items;
 		this.labelString = labelString;
 		
 	}
@@ -109,6 +111,9 @@
 				});
 	}
 	
+	/**
+	 * @return the result
+	 */
 	public String getResult()
 	{
 		return result;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/LocaleDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/LocaleDialog.java
index 5764013..21e5169 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/LocaleDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/LocaleDialog.java
@@ -174,6 +174,9 @@
 		return true;
 	}
 
+	/**
+	 * @return the result
+	 */
 	public String getResult()
 	{
 		return newLocale;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/MessageBundleViewerSorter.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/MessageBundleViewerSorter.java
index 0f18361..18a8129 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/MessageBundleViewerSorter.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/MessageBundleViewerSorter.java
@@ -14,7 +14,6 @@
 import java.text.Collator;
 
 import org.eclipse.jdt.core.IPackageFragmentRoot;
-import org.eclipse.jdt.internal.core.JarPackageFragmentRoot;
 import org.eclipse.jface.viewers.ViewerSorter;
 import org.eclipse.jst.jsf.common.ui.IFileFolderConstants;
 
@@ -45,7 +44,7 @@
 	 */
 	public int category(Object element) {
 		if (element instanceof IPackageFragmentRoot
-				&& !(element instanceof JarPackageFragmentRoot)) {
+				&& !((IPackageFragmentRoot)element).isArchive()) {
 			IPackageFragmentRoot root = (IPackageFragmentRoot) element;
 			if (IFileFolderConstants.FOLDER_SOURCE
 					.equals(root.getElementName())) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/StatusDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/StatusDialog.java
index 5eec461..22485d9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/StatusDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/dialog/StatusDialog.java
@@ -89,8 +89,14 @@
 		return label;
 	}
 
+	/**
+	 * @return true if is status is valid
+	 */
 	protected abstract boolean isValid();
 
+	/**
+	 * update the status information
+	 */
 	protected void updateStatus() {
 		if (isValid()) {
 			statusImage.setVisible(false);
@@ -103,10 +109,16 @@
 		}
 	}
 
+	/**
+	 * @return the current status message
+	 */
 	public String getStatusMessage() {
 		return statusMessage;
 	}
 
+	/**
+	 * @param statusMessage
+	 */
 	public void setStatusMessage(String statusMessage) {
 		this.statusMessage = statusMessage;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/page/IntroductionPage.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/page/IntroductionPage.java
index 3b12b6a..aa7686e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/page/IntroductionPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/page/IntroductionPage.java
@@ -11,6 +11,9 @@
  *******************************************************************************/
 package org.eclipse.jst.jsf.facesconfig.ui.page;
 
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.ISelectionProvider;
@@ -19,6 +22,11 @@
 import org.eclipse.jst.jsf.facesconfig.ui.EditorMessages;
 import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin;
 import org.eclipse.jst.jsf.facesconfig.ui.FacesConfigEditor;
+import org.eclipse.jst.jsf.facesconfig.ui.preference.GEMPreferences;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.ui.forms.IManagedForm;
 import org.eclipse.ui.forms.editor.FormPage;
 import org.eclipse.ui.forms.widgets.FormToolkit;
@@ -31,7 +39,10 @@
  * 
  * @author jchoi
  */
-public class IntroductionPage extends FormPage implements IFacesConfigPage, ISelectionProvider{
+public class IntroductionPage extends FormPage implements IFacesConfigPage, ISelectionProvider, IPropertyChangeListener{
+	
+	private Button noIntroPageButton = null;
+
 	/**
 	 * @param facesConfigEditor
 	 */
@@ -57,18 +68,30 @@
 		TableWrapLayout layout = new TableWrapLayout();
 		layout.numColumns = 1;
 		layout.makeColumnsEqualWidth = true;
+		layout.verticalSpacing = 20;
 		form.getBody().setLayout(layout);
 
 		IntroductionSection introPart = new IntroductionSection(
 				FacesConfigEditor.EDITOR_ID, managedForm, toolkit,
 				EditorMessages.editor_pageflow_page_intro_help_HelpContextID,
 				EditorMessages.editor_pageflow_page_intro_help_HelpToolTip);
-
+		
+		noIntroPageButton = toolkit.createButton(form.getBody(), EditorMessages.editor_pageflow_page_intro_NoIntroPage, SWT.CHECK);
+		noIntroPageButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				boolean selection = ((Button) e.widget).getSelection();
+				EditorPlugin.getDefault().getPreferenceStore().setValue(GEMPreferences.SHOW_INTRO_EDITOR, !selection);
+			}
+		});
 		TableWrapData td = new TableWrapData(TableWrapData.FILL_GRAB);
 		td.colspan = 1;
 		introPart.setLayoutData(td);
 
 		getSite().setSelectionProvider(this);
+		
+		IPreferenceStore preferenceStore = EditorPlugin.getDefault().getPreferenceStore();
+		preferenceStore.addPropertyChangeListener(this);
+		updatePrefenceControls(preferenceStore);
 	}
 
 	public void addSelectionChangedListener(ISelectionChangedListener listener) {
@@ -128,4 +151,24 @@
 		
 	}
 
+	public void propertyChange(PropertyChangeEvent event) {
+		if (event != null) {
+			String property = event.getProperty();
+			if (property == null || property.equals(GEMPreferences.SHOW_INTRO_EDITOR)) {
+				//assume that we are in an ui thread, as other listeners assume this too:
+				updatePrefenceControls(EditorPlugin.getDefault().getPreferenceStore());
+			}
+		}
+	}
+
+	private void updatePrefenceControls(IPreferenceStore preferenceStore) {
+		boolean noIntroPage = !GEMPreferences.getShowIntroEditor();
+		noIntroPageButton.setSelection(noIntroPage);
+	}
+
+	public void dispose() {
+		EditorPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
+		super.dispose();
+	}
+
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowActionBarContributor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowActionBarContributor.java
index 9f9a081..38020fb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowActionBarContributor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowActionBarContributor.java
@@ -32,6 +32,10 @@
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.actions.ActionFactory;
 
+/**
+ * The action bar contributor for the page flow editor
+ *
+ */
 public class PageflowActionBarContributor extends ActionBarContributor
 		implements INestedActionContributor {
 
@@ -66,6 +70,9 @@
 		// do nothing
 	}
 
+	/**
+	 * Update the action keys
+	 */
 	public void updateActionKeys() {
 		declareGlobalActionKeys();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowEditor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowEditor.java
index 1efb743..24a4ddf 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowEditor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowEditor.java
@@ -147,6 +147,9 @@
 	/** the editor's action registry */
 	private ActionRegistry actionRegistry = null;
 
+	/**
+	 * The id of the editor page
+	 */
 	public static final String PAGE_ID = "org.eclipse.jst.jsf.facesconfig.ui.pageflow.PageflowEditor";
 
 	/** the list of action ids that are to EditPart actions */
@@ -178,6 +181,9 @@
 
 	List stackActions = new ArrayList();
 
+	/**
+	 * @return the faces-config to pageflow model
+	 */
 	public FC2PFTransformer getModelsTransform() {
 		if (modelsTransform == null) {
 			modelsTransform = new FC2PFTransformer();
@@ -185,6 +191,9 @@
 		return modelsTransform;
 	}
 
+	/**
+	 * update the editor actions
+	 */
 	public void updateActions() {
 		updateActions(stackActions);
 		updateActions(editPartActionIDs);
@@ -368,8 +377,8 @@
 		addAction(zoomIn);
 		addAction(zoomOut);
 
-		getSite().getKeyBindingService().registerAction(zoomIn);
-		getSite().getKeyBindingService().registerAction(zoomOut);
+//		getSite().getKeyBindingService().registerAction(zoomIn);
+//		getSite().getKeyBindingService().registerAction(zoomOut);
 	}
 
 	/**
@@ -473,12 +482,7 @@
 				.addPropertyChangeListener(this);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see FlowEditor#getResourceFactory(IResource, ICodeGenEditor)
-	 */
-	protected CreationFactory getResourceFactory(IResource resource) {
+	private CreationFactory getResourceFactory(IResource resource) {
 		return new PageflowResourceFactory(resource);
 	}
 
@@ -669,7 +673,9 @@
 		return pageflow;
 	}
 
-	/** get the pageflow manager for this page */
+	/** get the pageflow manager for this page 
+	 * @return  the model manager
+	 */
 	public PageflowModelManager getPageflowManager() {
 		if (pageflowManager == null) {
 			pageflowManager = new PageflowModelManager();
@@ -828,6 +834,9 @@
 		return viewer;
 	}
 
+	/**
+	 * @param contents
+	 */
 	public void setGraphicalViewerContents(Object contents) {
 		viewer.setContents(contents);
 		propertyChange(null);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowMessages.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowMessages.java
index 64b31a6..52790e6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowMessages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowMessages.java
@@ -14,6 +14,10 @@
 
 import org.eclipse.osgi.util.NLS;
 
+/**
+ * Pageflow message bundle
+ *
+ */
 public final class PageflowMessages extends NLS {
 
 	private static final String BUNDLE_NAME = "org.eclipse.jst.jsf.facesconfig.ui.pageflow.PageflowMessages";
@@ -26,167 +30,413 @@
 		NLS.initializeMessages(BUNDLE_NAME, PageflowMessages.class);
 	}
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Label_True;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Label_False;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Label_Saving;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Dialog_Label_CreateFileTitle;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Dialog_Label_FileNotExistedPart1;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Dialog_Label_FileNotExistedPart2;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Action_OpenEditor_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Action_OpenEditor_ToolTip;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Action_ShowPropertyView_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Action_ShowPropertyView_ToolTip;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Action_ShowPaletteView_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Action_ShowPaletteView_ToolTip;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Action_SyncWithFacesConfig_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Action_SyncWithFacesConfig_ToolTip;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Action_UpdateFacesConfig_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Action_UpdateFacesConfig_ToolTip;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Group_Controls;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Select_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Select_Description;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Marquee_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Marquee_Description;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Link_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Link_Description;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Group_Nodes;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Begin_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Begin_Description;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_End_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_End_Description;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Action_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Action_Description;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Page_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_PaletteTool_Page_Description;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Contextmenu_Align_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Contextmenu_ShowView_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_AddNodeCommand_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_CreateNodeCommand_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_DeleteNodeCommand_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_ConnectionCommand_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_CreateBendpointCommand_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_MoveBendpointCommand_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_DeleteBendpointCommand_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_OpenEditorCommand_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_OrphanChildCommand_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_UpdatePageflowCommand_Label;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_CreateNodeCommand_SelectJSPDialog_Title;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Commands_CreateNodeCommand_SelectJSPDialog_Description;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_comment;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_name;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_largeicon;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_smallicon;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_action;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_path;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_begin;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_end;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_configfile;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_source;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_target;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_outcome;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_redirect;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_fromaction;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Attributes_referenceLink;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Items_Pageflow;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Items_PFPage;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Model_Items_PFLink;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Property_Action_OutcomeSelectionDialog_Choice;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Property_Action_OutcomeSelectionDialog_Title;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Property_Action_OutcomeSelectionDialog_JSPName;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Property_Action_OutcomeSelectionDialog_ActionListTable_Title;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Property_Action_OutcomeSelectionDialog_ActionListTable_Component;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Property_Action_OutcomeSelectionDialog_ActionListTable_Action;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Property_Action_OutcomeSelectionDialog_Outcome;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Validation_UndefinedOutcome;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Validation_NotExistedSourcePage;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Validation_MissingSourcePage;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Validation_InvalidWebPage;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Validation_NotExitedWebPage;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Validation_MissingWebPage;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Validation_MissingManagedBean;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String Pageflow_Validation_MissingAction;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String ExistingPagePathDialogCellEdito_LabelText;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String PageflowLinkEditPart_FromAction;
 
+	/**
+	 * see PageFlowMessages.properties
+	 */
 	public static String PageflowLinkEditPart_FromOutcome;
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/ResourceTransferDropTargetListener.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/ResourceTransferDropTargetListener.java
index f9ca215..ecb6c73 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/ResourceTransferDropTargetListener.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/ResourceTransferDropTargetListener.java
@@ -44,6 +44,7 @@
 	 * 
 	 * @param viewer -
 	 *            target pageflow editor view.
+	 * @param editor 
 	 */
 	public ResourceTransferDropTargetListener(EditPartViewer viewer,
 			IEditorPart editor) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/AbstractBatchEditCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/AbstractBatchEditCommand.java
index 4cd06f0..eded9f1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/AbstractBatchEditCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/AbstractBatchEditCommand.java
@@ -26,19 +26,28 @@
  * @author hmeng
  */
 
-public abstract class AbstractBatchEditCommand extends Command {
+/*package*/ abstract class AbstractBatchEditCommand extends Command {
 	Pageflow pageflow;
 
+	/**
+	 * @param pageflow
+	 */
 	public AbstractBatchEditCommand(Pageflow pageflow) {
-		super();
-		this.pageflow = pageflow;
+		this(pageflow, null);
 	}
 
+	/**
+	 * @param pageflow
+	 * @param label
+	 */
 	public AbstractBatchEditCommand(Pageflow pageflow, String label) {
 		super(label);
 		this.pageflow = pageflow;
 	}
 
+	/**
+	 * @return the pageflow
+	 */
 	public Pageflow getPageflow() {
 		return pageflow;
 	}
@@ -62,8 +71,14 @@
 		postExecute();
 	}
 
+	/**
+	 * 
+	 */
 	abstract public void doExecute();
 
+	/**
+	 * Do the customized redo
+	 */
 	public void doRedo() {
 		execute();
 	}
@@ -77,6 +92,9 @@
 						PageflowPackage.PAGEFLOW, null, null));
 	}
 
+	/**
+	 * execute the post-execution handling
+	 */
 	final protected void postExecute() {
 		getPageflow().eNotify(
 				new ENotificationImpl((InternalEObject) getPageflow(),
@@ -85,6 +103,9 @@
 		notifyPageflow(getPageflow());
 	}
 
+	/**
+	 * @param pageflow_
+	 */
 	protected void notifyPageflow(Pageflow pageflow_) {
 		pageflow_.notifyModelChanged(new ENotificationImpl(
 				(InternalEObject) pageflow_, Notification.ADD,
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/AddNodeCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/AddNodeCommand.java
index 2fcc0d5..be41ab2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/AddNodeCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/AddNodeCommand.java
@@ -31,6 +31,9 @@
 	/** index of pageflow nodes */
 	private int index = -1;
 
+	/**
+	 * Default constructor
+	 */
 	public AddNodeCommand() {
 		// Pageflow.Commands.AddNodeCommand.Label = add
 		super(PageflowMessages.Pageflow_Commands_AddNodeCommand_Label);
@@ -73,6 +76,7 @@
 
 	/**
 	 * get parent pageflow of the node.
+	 * @return the parent
 	 * 
 	 */
 	public Pageflow getParent() {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/BendpointCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/BendpointCommand.java
index cf03f6c..e4690d0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/BendpointCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/BendpointCommand.java
@@ -21,7 +21,7 @@
  * base class for bend point commands.
  * 
  */
-public abstract class BendpointCommand extends Command {
+/*package*/ abstract class BendpointCommand extends Command {
 	/** the index of the bend point */
 	protected int index;
 
@@ -37,6 +37,9 @@
 	/** relative dimension between the bendpoint with end point of the pflink */
 	private Dimension dimEnd;
 
+	/**
+	 * @param label
+	 */
 	public BendpointCommand(String label) {
 		super(label);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ConnectionCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ConnectionCommand.java
index 27b1c18..dafa9f6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ConnectionCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ConnectionCommand.java
@@ -39,6 +39,9 @@
 	/** pageflow link */
 	protected PageflowLink link;
 
+	/**
+	 * Default constructor
+	 */
 	public ConnectionCommand() {
 		super(PageflowMessages.Pageflow_Commands_ConnectionCommand_Label);
 	}
@@ -52,6 +55,9 @@
 		return TransformUtil.isValidPageflowElement(link);
 	}
 
+	/**
+	 * perform the main command execution.  Sub-classes should override.
+	 */
 	protected void doExecute() {
 	    // do nothing; sub-class can over-ride
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ConnectionCommandFactory.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ConnectionCommandFactory.java
index 61a6c16..8c7397c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ConnectionCommandFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ConnectionCommandFactory.java
@@ -23,6 +23,10 @@
  * 
  */
 public class ConnectionCommandFactory {
+	/**
+	 * @param request
+	 * @return the connection command for  the request
+	 */
 	public static ConnectionCommand createCommand(Request request) {
 		ConnectionCommand command = null;
 		if (request.getType() == RequestConstants.REQ_CONNECTION_START
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/CreateBendpointCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/CreateBendpointCommand.java
index 0de57b9..60df11d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/CreateBendpointCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/CreateBendpointCommand.java
@@ -25,6 +25,9 @@
  * 
  */
 public class CreateBendpointCommand extends BendpointCommand {
+	/**
+	 * Default constructor
+	 */
 	public CreateBendpointCommand() {
 		// Pageflow.Commands.CreateBendpointCommand.Label = Create Bendpoint
 		super(PageflowMessages.Pageflow_Commands_CreateBendpointCommand_Label);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/CreateNodeCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/CreateNodeCommand.java
index 723e1fc..c76ac56 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/CreateNodeCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/CreateNodeCommand.java
@@ -179,7 +179,7 @@
 
 	/**
 	 * call the JSF wizard to create a new jsf page.
-	 * 
+	 * @return the parent
 	 * 
 	 */
 	public Pageflow getParent() {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/DeleteBendpointCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/DeleteBendpointCommand.java
index 556389e..25e0049 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/DeleteBendpointCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/DeleteBendpointCommand.java
@@ -23,6 +23,9 @@
 	/** the deleting bendpoint */
 	private PageflowLinkBendpoint bendpoint;
 
+	/**
+	 * Default constructor
+	 */
 	public DeleteBendpointCommand() {
 
 		// Pageflow.Commands.DeleteBendpointCommand.Label = Delete Bendpoint
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/DeleteNodeCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/DeleteNodeCommand.java
index c632e25..4660942 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/DeleteNodeCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/DeleteNodeCommand.java
@@ -48,6 +48,9 @@
 
 	private List targetConnectionTargets = new ArrayList();
 
+	/**
+	 * @param pageflow
+	 */
 	public DeleteNodeCommand(Pageflow pageflow) {
 		// Pageflow.Commands.DeleteNodeCommand.Label = Delete
 		super(pageflow, PageflowMessages.Pageflow_Commands_DeleteNodeCommand_Label);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/EMFCommandGEFAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/EMFCommandGEFAdapter.java
index 7e23cf2..456c1b8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/EMFCommandGEFAdapter.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/EMFCommandGEFAdapter.java
@@ -19,11 +19,11 @@
  * @author xgzhang
  * @version
  */
-public class EMFCommandGEFAdapter extends Command {
+/*package*/ class EMFCommandGEFAdapter extends Command {
 	private org.eclipse.emf.common.command.Command emfCommand;
 
 	/**
-	 * 
+	 * @param emfCommand 
 	 */
 	public EMFCommandGEFAdapter(
 			org.eclipse.emf.common.command.Command emfCommand) {
@@ -118,7 +118,7 @@
 	/**
 	 * 
 	 */
-	public org.eclipse.emf.common.command.Command getEMFCommand() {
+	org.eclipse.emf.common.command.Command getEMFCommand() {
 		return emfCommand;
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/EMFCommandStackGEFAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/EMFCommandStackGEFAdapter.java
index a22e62a..9749e22 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/EMFCommandStackGEFAdapter.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/EMFCommandStackGEFAdapter.java
@@ -29,7 +29,7 @@
 	private org.eclipse.emf.common.command.BasicCommandStack emfCommandStack;
 
 	/**
-	 * 
+	 * @param emfCommandStack 
 	 */
 	public EMFCommandStackGEFAdapter(
 			org.eclipse.emf.common.command.BasicCommandStack emfCommandStack) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/IPreExecuteCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/IPreExecuteCommand.java
index f20f2ae..4bed8f6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/IPreExecuteCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/IPreExecuteCommand.java
@@ -18,7 +18,7 @@
  * 
  * 
  */
-public interface IPreExecuteCommand {
+/*package*/ interface IPreExecuteCommand {
 	/**
 	 * Do something pre-execution of the actual command execution.
 	 * 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/MoveBendpointCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/MoveBendpointCommand.java
index a2468c9..dc1e0fa 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/MoveBendpointCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/MoveBendpointCommand.java
@@ -29,6 +29,9 @@
 	 */
 	private PageflowLinkBendpoint oldBendpoint;
 
+	/**
+	 * Default constructor
+	 */
 	public MoveBendpointCommand() {
 		// Pageflow.Commands.MoveBendpointCommand.Label = Move Bendpoint
 		super(PageflowMessages.Pageflow_Commands_MoveBendpointCommand_Label);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/OpenEditorCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/OpenEditorCommand.java
index e094062..eccb807 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/OpenEditorCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/OpenEditorCommand.java
@@ -24,7 +24,6 @@
 import org.eclipse.jst.jsf.facesconfig.ui.FacesConfigEditor;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.PageflowMessages;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowPage;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.impl.PageflowNodeImpl;
 import org.eclipse.jst.jsf.facesconfig.ui.util.WebrootUtil;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IEditorDescriptor;
@@ -41,8 +40,6 @@
  * @author Xiao-guang Zhang
  */
 public class OpenEditorCommand extends Command {
-	/** The selected object */
-	private PageflowNodeImpl child = null;
 
 	/** The edit part */
 	private EditPart part;
@@ -73,20 +70,6 @@
 	}
 
 	/**
-	 * Sets the selected object
-	 * 
-	 * @param child -
-	 *            the PFPageImpl
-	 */
-	public void setChild(PageflowNodeImpl child) {
-		this.child = child;
-	}
-
-	public PageflowNodeImpl getChild() {
-		return child;
-	}
-
-	/**
 	 * open existed JSF file or call the wizard to create a new one.
 	 * 
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/OrphanChildCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/OrphanChildCommand.java
index 921552d..a695c32 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/OrphanChildCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/OrphanChildCommand.java
@@ -38,6 +38,9 @@
 	/** the index of pageflow nodes */
 	private int index;
 
+	/**
+	 * Default constructor
+	 */
 	public OrphanChildCommand() {
 		// Pageflow.Commands.OrphanChildCommand.Label = Orphan Child
 		super(PageflowMessages.Pageflow_Commands_OrphanChildCommand_Label);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ReconnectConnectionCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ReconnectConnectionCommand.java
index 510357c..63519ca 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ReconnectConnectionCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/command/ReconnectConnectionCommand.java
@@ -23,8 +23,11 @@
  */
 public class ReconnectConnectionCommand extends ConnectionCommand {
 
+	/**
+	 * Default constructor
+	 */
 	public ReconnectConnectionCommand() {
-		// TODO Auto-generated constructor stub
+		super();
 	}
 
 	public boolean canExecute() {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/DirectEditCellEditorLocator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/DirectEditCellEditorLocator.java
index 05f234a..4c71c04 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/DirectEditCellEditorLocator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/DirectEditCellEditorLocator.java
@@ -24,7 +24,7 @@
  * 
  * @author - Xiaoguang Zhang
  */
-public class DirectEditCellEditorLocator implements CellEditorLocator {
+/*package*/ class DirectEditCellEditorLocator implements CellEditorLocator {
 	/** the source label */
 	private Label label;
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/IAnnotationEditPart.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/IAnnotationEditPart.java
index 2c489f8..2c29393 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/IAnnotationEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/IAnnotationEditPart.java
@@ -24,7 +24,7 @@
 public interface IAnnotationEditPart {
 	/**
 	 * decorate current Edit Part.
-	 * 
+	 * @param annotation 
 	 */
 	void addAnnotation(Annotation annotation);
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/ILayerPanePreference.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/ILayerPanePreference.java
index 7bc5d52..91d2af6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/ILayerPanePreference.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/ILayerPanePreference.java
@@ -22,8 +22,14 @@
  * 
  */
 public interface ILayerPanePreference extends IFigurePreference {
+	/**
+	 * Use manual line router 
+	 */
 	public static int LINE_ROUTING_MANUAL = 0;
 
+	/**
+	 * Use manhattan line router
+	 */
 	public static int LINE_ROUTING_MANHATTAN = 1;
 
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PFValidator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PFValidator.java
index fa94226..413a5a1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PFValidator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PFValidator.java
@@ -16,5 +16,8 @@
  */
 
 public interface PFValidator {
+	/**
+	 * Validate the current page flow
+	 */
 	void validate();
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowContainerEditPart.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowContainerEditPart.java
index 18337a4..6d0cff7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowContainerEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowContainerEditPart.java
@@ -24,7 +24,7 @@
 /**
  * abstract class for pageflow container.
  */
-abstract public class PageflowContainerEditPart extends PageflowElementEditPart {
+abstract class PageflowContainerEditPart extends PageflowElementEditPart {
 
 	/**
 	 * @param element -
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowDirectEditManager.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowDirectEditManager.java
index 7698666..5fa56d1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowDirectEditManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowDirectEditManager.java
@@ -32,15 +32,15 @@
  * 
  * @author - Xiaoguang Zhang
  */
-public class PageflowDirectEditManager extends DirectEditManager {
+/*package*/ final class PageflowDirectEditManager extends DirectEditManager {
 	/** text font */
-	protected Font scaledFont;
+	private Font scaledFont;
 
 	/** verify listener for the text control */
-	protected VerifyListener verifyListener;
+	private VerifyListener verifyListener;
 
 	/** the direct editor's parent label. */
-	protected Label label;
+	private final Label label;
 
 	/**
 	 * Creates a new PageflowDirectEditManager with the given attributes.
@@ -51,6 +51,7 @@
 	 *            type of editor
 	 * @param locator
 	 *            the CellEditorLocator
+	 * @param label
 	 */
 	public PageflowDirectEditManager(GraphicalEditPart source,
 			Class editorType, CellEditorLocator locator, Label label) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowElementEditPart.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowElementEditPart.java
index a3e32ff..1f32692 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowElementEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowElementEditPart.java
@@ -53,8 +53,11 @@
 	public static final ImageDescriptor IMG_ACTION = EditorPlugin.getDefault()
 			.getImageDescriptor("facesconfig/Pageflow_Action16.gif"); //$NON-NLS-1$
 
-	protected Adapter adapter;
+	private Adapter adapter;
 
+	/**
+	 * @return the emf adapter
+	 */
 	public Adapter createEMFAdapter() {
 		return new PFBatchAdapter() {
 			/*
@@ -80,10 +83,10 @@
 		};
 	}
 
-	public static final ImageDescriptor IMG_PAGE = EditorPlugin.getDefault()
+	private static final ImageDescriptor IMG_PAGE = EditorPlugin.getDefault()
 			.getImageDescriptor("facesconfig/Pageflow_Page.gif"); //$NON-NLS-1$
 
-	public static final ImageDescriptor IMG_NODE = EditorPlugin.getDefault()
+	private static final ImageDescriptor IMG_NODE = EditorPlugin.getDefault()
 			.getImageDescriptor("facesconfig/FacesConfig_Pageflow16.gif"); //$NON-NLS-1$
 
 	/** property source of the pageflow element */
@@ -91,6 +94,9 @@
 
 	private Image image = null;
 
+	/**
+	 * @param element
+	 */
 	protected PageflowElementEditPart(PageflowElement element) {
 		setModel(element);
 	}
@@ -229,7 +235,7 @@
 	 * 
 	 * @see PageflowElementEditPart#getPropertySource()
 	 */
-	protected IPropertySource getPropertySource() {
+	private IPropertySource getPropertySource() {
 		if (propertySource == null) {
 			propertySource = new PageflowElementPropertySource(
 					getPageflowElement());
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowElementTreeEditPart.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowElementTreeEditPart.java
index ca0c328..b6f50c7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowElementTreeEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowElementTreeEditPart.java
@@ -30,10 +30,10 @@
 public class PageflowElementTreeEditPart extends AbstractTreeEditPart implements
 		Adapter {
 	/** Image descriptor of tree item for the different edit parts */
-	public static final ImageDescriptor IMG_PAGE = EditorPlugin.getDefault()
+	private static final ImageDescriptor IMG_PAGE = EditorPlugin.getDefault()
 			.getImageDescriptor("facesconfig/Pageflow_Page16.gif"); //$NON-NLS-1$
 
-	public static final ImageDescriptor IMG_NODE = EditorPlugin.getDefault()
+	private static final ImageDescriptor IMG_NODE = EditorPlugin.getDefault()
 			.getImageDescriptor("facesconfig/FacesConfig_Pageflow16.gif"); //$NON-NLS-1$
 
 	/** Property resource for shared property view */
@@ -115,7 +115,7 @@
 	 * 
 	 * @see PageflowElementEditPart#getPropertySource()
 	 */
-	protected IPropertySource getPropertySource() {
+	private IPropertySource getPropertySource() {
 		if (propertySource == null) {
 			propertySource = new PageflowElementPropertySource(
 					getPageflowElement());
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowLinkEditPart.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowLinkEditPart.java
index 15eb0fb..3e77961 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowLinkEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowLinkEditPart.java
@@ -116,7 +116,7 @@
 		return bendpointEditPolicy;
 	}
 
-	public PageflowLink getPFLink() {
+	private PageflowLink getPFLink() {
 		return (PageflowLink) getModel();
 	}
 
@@ -228,12 +228,7 @@
 		return super.getAdapter(key);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see PageflowElementEditPart#getPropertySource()
-	 */
-	protected IPropertySource getPropertySource() {
+	private IPropertySource getPropertySource() {
 		if (propertySource == null) {
 			propertySource = new PageflowLinkPropertySource(getPFLink());
 		}
@@ -379,7 +374,7 @@
 		});
 	}
 
-	public void resetLabel() {
+	private void resetLabel() {
 		StringBuffer tip = new StringBuffer();
 		if (needDrawingAction()) {
 			((PFLinkFigure) getFigure()).setActionImage();
@@ -419,7 +414,7 @@
 		return resource;
 	}
 
-	public static Image getImage(ImageDescriptor imageDescriptor) {
+	private static Image getImage(ImageDescriptor imageDescriptor) {
 		Image image = EditorPlugin.getDefault().getImageRegistry().get(
 				imageDescriptor.toString());
 		if (null == image) {
@@ -454,7 +449,7 @@
 	 * get the foreground color from preference
 	 * 
 	 */
-	public int getConnectionRouterStyle() {
+	private int getConnectionRouterStyle() {
 		if (this.connectionStyle == -1) {
 			IPreferenceStore store = EditorPlugin.getDefault()
 					.getPreferenceStore();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowNodeEditPart.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowNodeEditPart.java
index 8208cd2..e28f040 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowNodeEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowNodeEditPart.java
@@ -428,6 +428,9 @@
 	 */
 	public void addAnnotation(final Annotation annotation) {
 		getViewer().getControl().getDisplay().asyncExec(new Runnable() {
+			/* (non-Javadoc)
+			 * @see java.lang.Runnable#run()
+			 */
 			public void run() {
 				getPageflowNodeFigure().setImage(
 						getDecoratedImage((PageflowElement) getModel()));
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowTreeEditPart.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowTreeEditPart.java
index 8b94515..34976d3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowTreeEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowTreeEditPart.java
@@ -22,7 +22,7 @@
  * 
  * 
  */
-public class PageflowTreeEditPart extends PageflowElementTreeEditPart {
+/*package*/ class PageflowTreeEditPart extends PageflowElementTreeEditPart {
 
 	/**
 	 * Creates a new PageflowTreeEditPart instance.
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowTreePartFactory.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowTreePartFactory.java
index 96deb05..940113a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowTreePartFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpart/PageflowTreePartFactory.java
@@ -17,6 +17,10 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.Pageflow;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowElement;
 
+/**
+ * Edit Part Factory for creation pageflow tree parts
+ *
+ */
 public class PageflowTreePartFactory implements EditPartFactory {
 	/*
 	 * (non-Javadoc)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkBendpointEditPolicy.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkBendpointEditPolicy.java
index 718b7ac..4dabafb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkBendpointEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkBendpointEditPolicy.java
@@ -22,6 +22,10 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.command.MoveBendpointCommand;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowLink;
 
+/**
+ * Customize the bendpoint edit policy fro pageflow link connections
+ *
+ */
 public class PFLinkBendpointEditPolicy extends BendpointEditPolicy {
 
 	/*
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkEditPolicy.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkEditPolicy.java
index 5f098ea..d25b227 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkEditPolicy.java
@@ -19,8 +19,15 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.command.DeleteConnectionCommand;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowLink;
 
+/**
+ * Customize the connection edit policy for pageflow links
+ *
+ */
 public class PFLinkEditPolicy extends ConnectionEditPolicy {
 
+	/**
+	 * Default constructor
+	 */
 	public PFLinkEditPolicy() {
 		super();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkEndpointEditPolicy.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkEndpointEditPolicy.java
index 06a9e39..59875db 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkEndpointEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PFLinkEndpointEditPolicy.java
@@ -19,6 +19,10 @@
 import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin;
 import org.eclipse.jst.jsf.facesconfig.ui.preference.GEMPreferences;
 
+/**
+ * Customize the endpoint edit policy for pageflow links
+ *
+ */
 public class PFLinkEndpointEditPolicy extends ConnectionEndpointEditPolicy {
 	/**
 	 * 
@@ -39,12 +43,7 @@
 		getConnectionFigure().setLineWidth(connectionWidth + 1);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see ConnectionEndpointEditPolicy#getConnectionFigure
-	 */
-	protected PolylineConnection getConnectionFigure() {
+	private PolylineConnection getConnectionFigure() {
 		return (PolylineConnection) ((GraphicalEditPart) getHost()).getFigure();
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowContainerEditPolicy.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowContainerEditPolicy.java
index f6d9c7c..b25bdb9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowContainerEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowContainerEditPolicy.java
@@ -24,6 +24,10 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.Pageflow;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowNode;
 
+/**
+ * Customize the container policy for page flow containers
+ *
+ */
 public class PageflowContainerEditPolicy extends ContainerEditPolicy {
 	/*
 	 * (non-Javadoc)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowElementEditPolicy.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowElementEditPolicy.java
index 8175c7c..04e86db 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowElementEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowElementEditPolicy.java
@@ -18,6 +18,10 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.Pageflow;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowNode;
 
+/**
+ * Customize component edit policies for page flows
+ *
+ */
 public class PageflowElementEditPolicy extends
 		org.eclipse.gef.editpolicies.ComponentEditPolicy {
 	/*
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowNodeEditPolicy.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowNodeEditPolicy.java
index d7024f3..192d818 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowNodeEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowNodeEditPolicy.java
@@ -31,9 +31,12 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.figure.PageflowNodeFigure;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowLink;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowNode;
-import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.impl.PageflowNodeImpl;
 import org.eclipse.jst.jsf.facesconfig.ui.preference.GEMPreferences;
 
+/**
+ * Customizes conntection policies
+ *
+ */
 public class PageflowNodeEditPolicy extends GraphicalNodeEditPolicy {
 	/*
 	 * (non-Javadoc)
@@ -142,11 +145,7 @@
 	 */
 	public Command getCommand(Request request) {
 		if (OpenEditorAction.OPEN_EDITOR_REQUEST.equals(request.getType())) {
-			OpenEditorCommand command = new OpenEditorCommand(getHost());
-
-			command.setChild((PageflowNodeImpl) getHost().getModel());
-
-			return command;
+			return new OpenEditorCommand(getHost());
 		}
 
 		return super.getCommand(request);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowXYLayoutEditPolicy.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowXYLayoutEditPolicy.java
index 53d0d8c..0a7fbae 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowXYLayoutEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/editpolicy/PageflowXYLayoutEditPolicy.java
@@ -27,6 +27,10 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.Pageflow;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowNode;
 
+/**
+ * Customize the layout policy for page flows
+ *
+ */
 public class PageflowXYLayoutEditPolicy extends XYLayoutEditPolicy {
 	/*
 	 * (non-Javadoc)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/figure/PFLinkFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/figure/PFLinkFigure.java
index 041fce3..56d6768 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/figure/PFLinkFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/figure/PFLinkFigure.java
@@ -91,10 +91,16 @@
 		}
 	}
 
+	/**
+	 * Set the icon image to null
+	 */
 	public void clearIcon() {
 		setImage(null);
 	}
 
+	/**
+	 * Set the label to empty string
+	 */
 	public void clearOutcome() {
 		setLabel("");
 	}
@@ -118,6 +124,9 @@
 		textLabel.setIcon(image);
 	}
 
+	/**
+	 * Set the action image
+	 */
 	public void setActionImage() {
 		ImageDescriptor imageDescriptor = PageflowElementEditPart.IMG_ACTION;
 		Image image = EditorPlugin.getDefault().getImageRegistry().get(
@@ -131,6 +140,9 @@
 		setImage(image);
 	}
 
+	/**
+	 * @return the icon image
+	 */
 	public Image getImage() {
 		if (textLabel != null)
         {
@@ -139,10 +151,9 @@
         return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#setToolTipText()
+
+	/**
+	 * @param text
 	 */
 	public void setToolTipText(String text) {
 		Label toolTipLabel = null;
@@ -155,14 +166,14 @@
 		super.setToolTip(toolTipLabel);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getToolTipText()
+	/**
+	 * @return the tool tip text or null if none
 	 */
 	public String getToolTipText() {
 		if (getToolTip() != null)
+		{
 			return ((Label) getToolTip()).getText();
+		}
 		return null;
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/figure/PageflowNodeFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/figure/PageflowNodeFigure.java
index be73575..9a08273 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/figure/PageflowNodeFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/figure/PageflowNodeFigure.java
@@ -55,6 +55,9 @@
 	/** the text placement for the label */
 	private int textPlacement = PositionConstants.SOUTH;
 
+	/**
+	 * Default constructor
+	 */
 	public PageflowNodeFigure() {
 		setLayoutManager(new FlowLayout());
 
@@ -348,10 +351,9 @@
 			label.setTextPlacement(where);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#setToolTipText()
+
+	/**
+	 * @param text
 	 */
 	public void setToolTipText(String text) {
 		Label toolTipLabel = null;
@@ -363,11 +365,8 @@
 
 		super.setToolTip(toolTipLabel);
 	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getToolTipText()
+	/**
+	 * @return the figure's tool tip text or null if none
 	 */
 	public String getToolTipText() {
 		if (getToolTip() != null)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/Pageflow.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/Pageflow.java
index 9f56b7c..b76fdaf 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/Pageflow.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/Pageflow.java
@@ -103,12 +103,17 @@
 
 	/**
 	 * 
+	 * @param source 
+	 * @param target 
+	 * @param link 
 	 * @generated NOT
 	 */
 	public void connect(PageflowNode source, PageflowNode target, PageflowLink link);
 
 	/**
 	 * 
+	 * @param nodeType 
+	 * @return the default node name
 	 * @generated NOT
 	 */
 	public String getDefaultNodeName(Class nodeType);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowElement.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowElement.java
index d0fe7c6..ba2ee9b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowElement.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowElement.java
@@ -40,6 +40,7 @@
 	/**
 	 * The pageflow model is based on faces-config model, its elements will
 	 * reference faces-config elements with ReferenceElement.
+	 * @return the ref element
 	 * 
 	 * @generated NOT
 	 */
@@ -270,6 +271,7 @@
 	void setReferenceLink(String value);
 
 	/**
+	 * @param nofitification 
 	 * @generated NOT
 	 */
 	void notifyModelChanged(Notification nofitification);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowLink.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowLink.java
index 5d5f57a..ac22bcd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowLink.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowLink.java
@@ -85,8 +85,14 @@
 	 */
 	PageflowNode getTarget();
 
+	/**
+	 * @param path
+	 */
 	void setTargetPath(String path);
 
+	/**
+	 * @param path
+	 */
 	void setSourcePath(String path);
 
 	/**
@@ -274,30 +280,42 @@
 	EList getBendPoints();
 
 	/**
-	 * <!-- begin-user-doc --> insert a new bendpoint to the link <!--
-	 * end-user-doc -->
+	 * <!-- begin-user-doc --> 
+	 * insert a new bendpoint to the link 
+	 * @param index 
+	 * @param point 
+	 * <!--end-user-doc -->
 	 * 
 	 * @generated NOT
 	 */
 	public void insertBendpoint(int index, PageflowLinkBendpoint point);
 
 	/**
-	 * <!-- begin-user-doc --> remove the current bendpoint <!-- end-user-doc
-	 * -->
+	 * <!-- begin-user-doc --> 
+	 * remove the current bendpoint 
+	 * @param index 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated NOT
 	 */
 	public void removeBendpoint(int index);
 
 	/**
-	 * <!-- begin-user-doc --> Set the current bendpoint <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> 
+	 * Set the current bendpoint 
+	 * 
+	 * @param index 
+	 * @param point 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated NOT
 	 */
 	public void setBendpoint(int index, PageflowLinkBendpoint point);
 
 	/**
-	 * <!-- begin-user-doc --> Set a group of bendpoints to reconstruct the link
+	 * <!-- begin-user-doc --> 
+	 * Set a group of bendpoints to reconstruct the link
+	 * @param points 
 	 * <!-- end-user-doc -->
 	 * 
 	 * @generated NOT
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowLinkBendpoint.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowLinkBendpoint.java
index a0bb298..4e40709 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowLinkBendpoint.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowLinkBendpoint.java
@@ -206,21 +206,28 @@
 	void setLink(PageflowLink value);
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> 
+	 * @return the first relative dim 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated NOT
 	 */
 	public Dimension getFirstRelativeDimension();
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> 
+	 * @return the second relative dim 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated NOT
 	 */
 	public Dimension getSecondRelativeDimension();
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> 
+	 * @param dim1 
+	 * @param dim2 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated NOT
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowNode.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowNode.java
index fe50af4..0559bad 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowNode.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/PageflowNode.java
@@ -105,6 +105,8 @@
 	EList getInlinks();
 
 	/**
+	 * @param target 
+	 * @return the page flow node
 	 * @generated NOT
 	 */
 	PageflowLink findLinkTo(PageflowNode target);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/LinkReferenceElement.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/LinkReferenceElement.java
index efff345..0ed483c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/LinkReferenceElement.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/LinkReferenceElement.java
@@ -44,15 +44,20 @@
 		super.add(object);
 	}
 
+	/**
+	 * @param pageflowElement
+	 */
 	public LinkReferenceElement(PageflowElement pageflowElement) {
 		super(pageflowElement);
-		// TODO Auto-generated constructor stub
 	}
 
+	/**
+	 * @param pageflowElement
+	 * @param facesConfigObject
+	 */
 	public LinkReferenceElement(PageflowElement pageflowElement,
 			EObject facesConfigObject) {
 		super(pageflowElement, facesConfigObject);
-		// TODO Auto-generated constructor stub
 	}
 
 	public void update() {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageReferenceElement.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageReferenceElement.java
index e78cf09..2ce5b30 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageReferenceElement.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageReferenceElement.java
@@ -43,15 +43,20 @@
 
 public class PageReferenceElement extends ReferenceElement {
 
+	/**
+	 * @param pageflowElement
+	 */
 	public PageReferenceElement(PageflowElement pageflowElement) {
 		super(pageflowElement);
-		// TODO Auto-generated constructor stub
 	}
 
+	/**
+	 * @param pageflowElement
+	 * @param facesConfigObject
+	 */
 	public PageReferenceElement(PageflowElement pageflowElement,
 			EObject facesConfigObject) {
 		super(pageflowElement, facesConfigObject);
-		// TODO Auto-generated constructor stub
 	}
 
 	public void add(EObject object) {
@@ -200,14 +205,14 @@
 		return result;
 	}
 
-	public NavigationRuleType resolveRuleFromFCElement(Object object) {
+	private NavigationRuleType resolveRuleFromFCElement(Object object) {
 		if (object instanceof FromViewIdType) {
 			return (NavigationRuleType) ((FromViewIdType) object).eContainer();
 		}
 		return null;
 	}
 
-	public NavigationRuleType resolveRuleFromPFElement(Object object) {
+	private NavigationRuleType resolveRuleFromPFElement(Object object) {
 		if (object instanceof PageflowLink) {
 			NavigationCaseType caseType = (NavigationCaseType) ((PageflowLink) object)
 					.getFCElements().getData().get(0);
@@ -381,6 +386,9 @@
 		}
 	}
 
+	/**
+	 * @return true if none of the data are from view id's
+	 */
 	public boolean isEndOnly() {
 		for (int i = 0, n = getData().size(); i < n; i++) {
 			if (getData().get(i) instanceof FromViewIdType) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowElementImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowElementImpl.java
index eb7c4b8..43ea15f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowElementImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowElementImpl.java
@@ -40,12 +40,21 @@
  */
 public abstract class PageflowElementImpl extends EObjectImpl implements
 		PageflowElement {
-	protected static final String idPrefix = "pf";
+	private static final String idPrefix = "pf";
 
-	protected String id;
+	/**
+	 * @generated NOT
+	 */
+	private String id;
 
-	protected static int counter = 0;
+	/**
+	 * @generated NOT
+	 */
+	private static int counter = 0;
 
+	/**
+	 * the reference element
+	 */
 	protected ReferenceElement refElement;
 
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowFactoryImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowFactoryImpl.java
index 5dcc2ee..6da1936 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowFactoryImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowFactoryImpl.java
@@ -108,16 +108,5 @@
 	public PageflowPackage getPageflowPackage() {
 		return (PageflowPackage) getEPackage();
 	}
-
-	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
-	 * @deprecated
-	 * @generated
-	 */
-	public static PageflowPackage getPackage() {
-		return PageflowPackage.eINSTANCE;
-	}
-
 }
 // PageflowFactoryImpl
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowLinkImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowLinkImpl.java
index d75cced..48228bf 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowLinkImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowLinkImpl.java
@@ -227,7 +227,10 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> 
+	 * @return the target
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -236,7 +239,11 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> 
+ 	 * @param newTarget 
+	 * @param msgs 
+	 * @return the notification chain 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -299,7 +306,9 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> 
+	 * @return the pageflow node 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -308,7 +317,11 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> 
+	 * @param newSource 
+	 * @param msgs 
+	 * @return the notification chain 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowPackageImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowPackageImpl.java
index 90b0866..f08d5c3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowPackageImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/PageflowPackageImpl.java
@@ -115,7 +115,11 @@
 	 * package's meta-model objects may refer to those of another.
 	 * <p>
 	 * Invocation of this method will not affect any packages that have already
-	 * been initialized. <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * been initialized. 
+	 * 
+	 * <!-- begin-user-doc --> 
+ 	 * @return the package 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @see #eNS_URI
 	 * @see #createPackageContents()
@@ -280,7 +284,9 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> 
+	 * @return the small icon eattribute 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -289,8 +295,9 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 * <!-- begin-user-doc --> 
+	 * @return the large icon attribute 
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	public EAttribute getPFLink_Largeicon() {
@@ -307,7 +314,9 @@
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc --> 
+	 * @return the reference link eattribute 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/ReferenceElement.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/ReferenceElement.java
index 72e08e6..80c118d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/ReferenceElement.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/model/impl/ReferenceElement.java
@@ -31,12 +31,22 @@
 
 	private List data = new ArrayList();
 
+	/**
+	 * the pageflow element
+	 */
 	protected PageflowElement pageflowElement;
 
+	/**
+	 * @param pageflowElement
+	 */
 	public ReferenceElement(PageflowElement pageflowElement) {
 		this.pageflowElement = pageflowElement;
 	}
 
+	/**
+	 * @param pageflowElement
+	 * @param facesConfigObject
+	 */
 	public ReferenceElement(PageflowElement pageflowElement,
 			EObject facesConfigObject) {
 		this(pageflowElement);
@@ -54,9 +64,6 @@
 		}
 	}
 
-	public boolean contains(EObject object) {
-		return data.contains(object);
-	}
 
 	/**
 	 * The fragment path of a node.
@@ -74,11 +81,6 @@
         return "";
 	}
 
-	public boolean remove(EObject object) {
-		boolean result = data.remove(object);
-		return result;
-	}
-
 	/**
 	 * Resolve each referenced data's path and combine the result into one
 	 * string, the path will be seperated with '|'.
@@ -118,16 +120,25 @@
 		return data;
 	}
 
+	/**
+	 * Clear the data
+	 */
 	public void clear() {
 		if (!data.isEmpty()) {
 			data.clear();
 		}
 	}
 
+	/**
+	 * @return true if the data is empty
+	 */
 	public boolean isEmpty() {
 		return data.isEmpty();
 	}
 
+	/**
+	 * Dispose the element
+	 */
 	public void dispose() {
 		clear();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionDialogCellEditor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionDialogCellEditor.java
index 4b8ec9b..a68e86c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionDialogCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionDialogCellEditor.java
@@ -23,28 +23,25 @@
  */
 public class ActionDialogCellEditor extends EditableDialogCellEditor {
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor()
+
+	/**
+	 * Default constructor
 	 */
 	public ActionDialogCellEditor() {
 		super();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor(Composite parent)
+
+	/**
+	 * @param parent
 	 */
 	public ActionDialogCellEditor(Composite parent) {
 		super(parent);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor(Composite parent, int style)
+	/**
+	 * @param parent
+	 * @param style
 	 */
 	public ActionDialogCellEditor(Composite parent, int style) {
 		super(parent, style);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionOutcomeDialogCellEditor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionOutcomeDialogCellEditor.java
index e24b2ad..3c68341 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionOutcomeDialogCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionOutcomeDialogCellEditor.java
@@ -31,20 +31,17 @@
 	/** the source PFLink element */
 	PageflowElement element;
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor()
+	/**
+	 * @param element
 	 */
 	public ActionOutcomeDialogCellEditor(PageflowElement element) {
 		super();
 		this.element = element;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor(Composite parent)
+	/**
+	 * @param parent
+	 * @param element
 	 */
 	public ActionOutcomeDialogCellEditor(Composite parent,
 			PageflowElement element) {
@@ -52,10 +49,11 @@
 		this.element = element;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor(Composite parent, int style)
+
+	/**
+	 * @param parent
+	 * @param style
+	 * @param element
 	 */
 	public ActionOutcomeDialogCellEditor(Composite parent, int style,
 			PageflowElement element) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionOutcomeSelectionDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionOutcomeSelectionDialog.java
index 3a63097..46d3fc4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionOutcomeSelectionDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ActionOutcomeSelectionDialog.java
@@ -70,13 +70,18 @@
 
 	private static final int DIALOG_DEFAULT_HEIGHT = 300;
 
-	public static String JSF_EL_LEFT_BRACE = "#{";
+	private static String JSF_EL_LEFT_BRACE = "#{";
 
-	public static String JSF_EL_RIGHT_BRACE = "}";
+	private static String JSF_EL_RIGHT_BRACE = "}";
 
 	/** the listener for the text modification */
 	private ModifyListener modifyListener;
 
+	/**
+	 * @param parentShell
+	 * @param outcome
+	 * @param jspName
+	 */
 	public ActionOutcomeSelectionDialog(Shell parentShell, String outcome,
 			String jspName) {
 		super(parentShell);
@@ -338,6 +343,10 @@
 		}
 	}
 
+	/**
+	 * @param expressionString
+	 * @return true if expressionString is valid EL
+	 */
 	public static boolean isValidEL(String expressionString) {
 		if (expressionString == null || expressionString.length() == 0)
 			return true;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/EditableDialogCellEditor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/EditableDialogCellEditor.java
index 18f6c77..ee2cd23 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/EditableDialogCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/EditableDialogCellEditor.java
@@ -138,6 +138,9 @@
 		super.keyReleaseOccured(keyEvent);
 	}
 
+	/**
+	 * @return the default text
+	 */
 	public Text getDefaultText() {
 		return text;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/EditorSectionDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/EditorSectionDescriptor.java
index f0d6442..6628690 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/EditorSectionDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/EditorSectionDescriptor.java
@@ -13,14 +13,14 @@
 
 import java.util.List;
 
+import org.eclipse.jface.viewers.IFilter;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.PageflowEditPart;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.section.EditorSection;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISection;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ITypeMapper;
+import org.eclipse.ui.views.properties.tabbed.ISection;
+import org.eclipse.ui.views.properties.tabbed.ISectionDescriptor;
 
 
 
@@ -47,15 +47,6 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor#getFilter()
-	 */
-	public ITypeMapper getFilter() {
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
 	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor#getInputTypes()
 	 */
 	public List getInputTypes() {
@@ -110,7 +101,10 @@
 	}
 
 	public int getEnablesFor() {
-		// TODO Auto-generated method stub
 		return ENABLES_FOR_ANY;
 	}
+
+	public IFilter getFilter() {
+		return null;
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ExistingPagePathDialogCellEditor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ExistingPagePathDialogCellEditor.java
index 2a5e27d..f6ba9c3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ExistingPagePathDialogCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ExistingPagePathDialogCellEditor.java
@@ -35,16 +35,25 @@
 public class ExistingPagePathDialogCellEditor extends EditableDialogCellEditor {
 	Pageflow pageflow;
 
+	/**
+	 * 
+	 */
 	public ExistingPagePathDialogCellEditor() {
 		super();
-		// TODO Auto-generated constructor stub
 	}
 
+	/**
+	 * @param parent
+	 * @param style
+	 */
 	public ExistingPagePathDialogCellEditor(Composite parent, int style) {
 		super(parent, style);
-		// TODO Auto-generated constructor stub
 	}
 
+	/**
+	 * @param parent
+	 * @param pageflow
+	 */
 	public ExistingPagePathDialogCellEditor(Composite parent, Pageflow pageflow) {
 		super(parent);
 		this.pageflow = pageflow;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/GeneralViewSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/GeneralViewSection.java
index 7ebd1e1..85884e3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/GeneralViewSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/GeneralViewSection.java
@@ -29,9 +29,9 @@
 import org.eclipse.ui.part.PageBook;
 import org.eclipse.ui.views.properties.IPropertySheetPage;
 import org.eclipse.ui.views.properties.PropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISection;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ITabbedPropertyConstants;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.ISection;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
 import org.eclipse.wst.sse.ui.StructuredTextEditor;
 
 /**
@@ -178,6 +178,10 @@
 	/*
 	 * (non-Javadoc) Method declared on PageBookView.
 	 */
+	/**
+	 * @param part
+	 * @return PageRec for part
+	 */
 	protected PageRec doCreatePage(IWorkbenchPart part) {
 		// FIXME: Because the PropertySheetPage of StructuredTextEditor has a
 		// bug:
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/GeneralViewSectionDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/GeneralViewSectionDescriptor.java
index 51e4253..dd4786f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/GeneralViewSectionDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/GeneralViewSectionDescriptor.java
@@ -15,6 +15,7 @@
 import java.util.List;
 
 import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.IFilter;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.PageflowElementEditPart;
@@ -23,9 +24,8 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowLink;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.util.PageflowValidation;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISection;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ITypeMapper;
+import org.eclipse.ui.views.properties.tabbed.ISection;
+import org.eclipse.ui.views.properties.tabbed.ISectionDescriptor;
 
 /**
  * This class defines the section descriptor for pageflow attributes. Following
@@ -49,14 +49,6 @@
 		return ITabbedPropertiesConstants.GENERAL_TAB_ID;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see ISectionDescriptor#getFilter()
-	 */
-	public ITypeMapper getFilter() {
-		return null;
-	}
 
 	/*
 	 * (non-Javadoc)
@@ -131,4 +123,10 @@
 	public int getEnablesFor() {
 		return ENABLES_FOR_ANY;
 	}
+
+
+	public IFilter getFilter() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ITabbedPropertiesConstants.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ITabbedPropertiesConstants.java
index a365f86..e7ce738 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ITabbedPropertiesConstants.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ITabbedPropertiesConstants.java
@@ -16,26 +16,44 @@
  * @version
  */
 public interface ITabbedPropertiesConstants {
+	/**
+	 * used to set grid data height hints on dialog fields
+	 */
 	public static int BROWSE_HEIGHT = 18;
 
+	/**
+	 * used to set grid data width hints on dialog fields
+	 */
 	public static int BROWSE_WIDTH = 20;
 
+	/**
+	 * the general tag id
+	 */
 	public static final String GENERAL_TAB_ID = "org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.general";
 
+	/**
+	 * the attribute tag id
+	 */
 	public static final String ATTRIBUTE_TAB_ID = "org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.attribute";
 
-	public static final String OPTIONAL_SECTION = "attribute.optional"; // 5
-
-	public static final String COMMON_SECTION = "attribute.optional"; // 5
-
+	/**
+	 * the link section id
+	 */
 	public static final String LINK_SECTION = "attribute.link"; // 4
 
+	/**
+	 * the page section id
+	 */
 	public static final String PAGE_SECTION = "attribute.page"; // 3
 
-	public static final String ACTION_SECTION = "attribute.action"; // 1
-
+	/**
+	 * the editor section id
+	 */
 	public static final String EDITOR_SECTION = "attribute.editor"; // 1
 
+	/**
+	 * the top section id
+	 */
 	public static final String TOP_SECTION = "top"; // 0
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/LinkSectionDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/LinkSectionDescriptor.java
index 14aa8b0..d0cc430 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/LinkSectionDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/LinkSectionDescriptor.java
@@ -13,6 +13,7 @@
 
 import java.util.List;
 
+import org.eclipse.jface.viewers.IFilter;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.PageflowLinkEditPart;
@@ -20,9 +21,8 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.section.LinkSection;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.util.PageflowValidation;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISection;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ITypeMapper;
+import org.eclipse.ui.views.properties.tabbed.ISection;
+import org.eclipse.ui.views.properties.tabbed.ISectionDescriptor;
 
 /**
  * @author jchoi
@@ -42,15 +42,6 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor#getFilter()
-	 */
-	public ITypeMapper getFilter() {
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
 	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor#getInputTypes()
 	 */
 	public List getInputTypes() {
@@ -109,8 +100,12 @@
 	}
 
 	public int getEnablesFor() {
-		// TODO Auto-generated method stub
 		return ENABLES_FOR_ANY;
 	}
 
+	public IFilter getFilter() {
+		return null;
+	}
+
+
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PagePathDialogCellEditor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PagePathDialogCellEditor.java
index d3a0b13..606511a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PagePathDialogCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PagePathDialogCellEditor.java
@@ -27,29 +27,26 @@
 public class PagePathDialogCellEditor extends EditableDialogCellEditor {
 	PageflowPage element;
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor()
+	/**
+	 * Default constructor
 	 */
 	public PagePathDialogCellEditor() {
 		super();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor(Composite parent)
+	/**
+	 * @param parent
+	 * @param element
 	 */
 	public PagePathDialogCellEditor(Composite parent, PageflowPage element) {
 		super(parent);
 		this.element = element;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor(Composite parent, int style)
+
+	/**
+	 * @param parent
+	 * @param style
 	 */
 	public PagePathDialogCellEditor(Composite parent, int style) {
 		super(parent, style);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageSectionDescriptor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageSectionDescriptor.java
index 3c5bdca..4e7fc80 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageSectionDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageSectionDescriptor.java
@@ -13,15 +13,15 @@
 
 import java.util.List;
 
+import org.eclipse.jface.viewers.IFilter;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.PageflowNodeEditPart;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.impl.PageflowPageImpl;
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.section.PageSection;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISection;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ITypeMapper;
+import org.eclipse.ui.views.properties.tabbed.ISection;
+import org.eclipse.ui.views.properties.tabbed.ISectionDescriptor;
 
 /**
  * @author jchoi
@@ -41,15 +41,6 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor#getFilter()
-	 */
-	public ITypeMapper getFilter() {
-		return null;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
 	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor#getInputTypes()
 	 */
 	public List getInputTypes() {
@@ -106,8 +97,12 @@
 	}
 
 	public int getEnablesFor() {
-		// TODO Auto-generated method stub
 		return ENABLES_FOR_ANY;
 	}
 
+
+	public IFilter getFilter() {
+		return null;
+	}
+
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowElementPropertySource.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowElementPropertySource.java
index 25ee177..a62b1da 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowElementPropertySource.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowElementPropertySource.java
@@ -359,8 +359,10 @@
 
 	/**
 	 * Get a translated string from the resource locator.
+	 * @param key 
+	 * @return the string for the key
 	 */
-	protected String getString(String key) {
+	protected final String getString(String key) {
 		if ("comment".equals(key)) {
 			return PageflowMessages.Pageflow_Model_Attributes_comment;
 		}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowLinkPropertySource.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowLinkPropertySource.java
index 8fdeef7..8eaf819 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowLinkPropertySource.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowLinkPropertySource.java
@@ -41,9 +41,11 @@
 
 public class PageflowLinkPropertySource extends PageflowElementPropertySource {
 
+	/**
+	 * @param element
+	 */
 	public PageflowLinkPropertySource(PageflowElement element) {
 		super(element);
-		// TODO Auto-generated constructor stub
 	}
 
 	public Object getPropertyValue(Object id) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowSectionDescriptorProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowSectionDescriptorProvider.java
index f795fee..e36d282 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowSectionDescriptorProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowSectionDescriptorProvider.java
@@ -12,8 +12,8 @@
 
 package org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties;
 
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptorProvider;
+import org.eclipse.ui.views.properties.tabbed.ISectionDescriptor;
+import org.eclipse.ui.views.properties.tabbed.ISectionDescriptorProvider;
 
 /**
  * this class defines all section descriptors for pageflow. Similar with
@@ -23,6 +23,9 @@
  */
 public class PageflowSectionDescriptorProvider implements
 		ISectionDescriptorProvider {
+	/**
+	 * Default constructor
+	 */
 	public PageflowSectionDescriptorProvider() {
 		super();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowSectionLabelProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowSectionLabelProvider.java
index 28f5eb1..c6adc01 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowSectionLabelProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PageflowSectionLabelProvider.java
@@ -32,6 +32,9 @@
  */
 public class PageflowSectionLabelProvider extends LabelProvider {
 
+	/**
+	 * Default constructor
+	 */
 	public PageflowSectionLabelProvider() {
 		super();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ProjectWebPageSelectionDialog.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ProjectWebPageSelectionDialog.java
index 45a7b75..eb218e8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ProjectWebPageSelectionDialog.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/ProjectWebPageSelectionDialog.java
@@ -12,7 +12,6 @@
 package org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.jst.jsf.common.ui.internal.dialogs.CommonResourceDialog;
@@ -24,28 +23,34 @@
 
 public class ProjectWebPageSelectionDialog extends CommonResourceDialog {
 
+	/**
+	 * @param parentShell
+	 * @param project
+	 * @param style
+	 */
 	public ProjectWebPageSelectionDialog(Shell parentShell, IProject project,
 			int style) {
 		super(parentShell, project, style);
 		init();
 	}
 
+	/**
+	 * @param parentShell
+	 * @param project
+	 */
 	public ProjectWebPageSelectionDialog(Shell parentShell, IProject project) {
 		super(parentShell, project);
 		init();
 	}
 
-	public ProjectWebPageSelectionDialog(Shell parentShell, IFolder folder,
-			int style) {
-		super(parentShell, folder, style);
-		init();
-	}
-
 	private void init() {
 		setResourceDescription("Web page");
 		setSuffixs(new String[] { "jsp", "jspx", "jsf", "html", "htm" });
 	}
 
+	/**
+	 * @return the rseult file path
+	 */
 	public String getResultFilePath() {
 		String result = "";
 		IFile selectedFile = (IFile) getResult()[0];
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PropertyMessages.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PropertyMessages.java
index e803844..a9747a9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PropertyMessages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/PropertyMessages.java
@@ -14,6 +14,10 @@
 
 import org.eclipse.osgi.util.NLS;
 
+/**
+ * NLS Message bundle for properties
+ *
+ */
 public final class PropertyMessages extends NLS {
 
 	private static final String BUNDLE_NAME = "org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.PropertyMessages";
@@ -26,26 +30,56 @@
 		NLS.initializeMessages(BUNDLE_NAME, PropertyMessages.class);
 	}
 
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_displayName;
-
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_description;
-
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_configFile;
-
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_largeIcon;
 
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_smallIcon;
 
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_fromAction;
 
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_fromView;
 
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_fromOutcome;
 
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_redirect;
 
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_browseButton;
 
+	/**
+	 * see PropertyMessages.properties
+	 */
 	public static String property_Command_SetValue;
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/AbstractEditPartGroup.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/AbstractEditPartGroup.java
index a46eb1c..6ccbc2c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/AbstractEditPartGroup.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/AbstractEditPartGroup.java
@@ -23,7 +23,7 @@
  * @author jchoi
  * @version
  */
-public abstract class AbstractEditPartGroup extends DialogFieldGroup {
+/*package*/ abstract class AbstractEditPartGroup extends DialogFieldGroup {
 
 	private StringDialogField descField;
 
@@ -46,29 +46,38 @@
 
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.jsf.facesconfig.ui.common.dialogfield.DialogFieldGroup#layoutDialogFields(org.eclipse.ui.forms.widgets.FormToolkit,
-	 *      org.eclipse.swt.widgets.Composite)
+
+	/**
+	 * @param toolkit
+	 * @param parent
+	 * @param col
 	 */
-	public void layoutDialogFields(FormToolkit toolkit, Composite parent,
+	protected void layoutDialogFields(FormToolkit toolkit, Composite parent,
 			int col) {
 		displayNameField.doFillIntoGrid(toolkit, parent, col);
 		descField.doFillIntoGrid(toolkit, parent, col);
 
 	}
 
+	/**
+	 * @param elem
+	 */
 	protected void refreshData(PageflowElement elem) {
 		descField.setTextWithoutUpdate(elem.getComment());
 		displayNameField.setTextWithoutUpdate(elem.getName());
 	}
 
-	public StringDialogField getDescField() {
+	/**
+	 * @return the description field
+	 */
+	protected StringDialogField getDescField() {
 		return descField;
 	}
 
-	public StringDialogField getDisplayNameField() {
+	/**
+	 * @return the display name field
+	 */
+	protected StringDialogField getDisplayNameField() {
 		return displayNameField;
 	}
 
@@ -87,8 +96,4 @@
 
 		return null;
 	}
-
-	protected String assertString(String value) {
-		return value == null ? "" : value;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/AbstractEditPartSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/AbstractEditPartSection.java
index 37d902d..00dcfca 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/AbstractEditPartSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/AbstractEditPartSection.java
@@ -29,7 +29,7 @@
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldChangeListener;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.views.properties.IPropertySource;
-import org.eclipse.wst.common.ui.properties.internal.provisional.AbstractPropertySection;
+import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
 
 /**
  * This is base section, which support GEF command stack to redo/undo setting
@@ -37,7 +37,7 @@
  * 
  * @author jchoi, Xiao-guang Zhang
  */
-public abstract class AbstractEditPartSection extends AbstractPropertySection {
+/*package*/ abstract class AbstractEditPartSection extends AbstractPropertySection {
 
 	IDialogFieldChangeListener changeListener = new IDialogFieldChangeListener() {
 		public void dialogFieldChanged(DialogField field) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/EditorGroup.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/EditorGroup.java
index 87d191e..dd6bea9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/EditorGroup.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/EditorGroup.java
@@ -24,7 +24,7 @@
  * @author jchoi
  * @version
  */
-public class EditorGroup extends AbstractEditPartGroup {
+/*package*/ class EditorGroup extends AbstractEditPartGroup {
 	private Pageflow pageflow = null;
 
 	/*
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/EditorSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/EditorSection.java
index 5f1d9c4..1b9d62c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/EditorSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/EditorSection.java
@@ -19,8 +19,8 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.impl.PageflowPackageImpl;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 
 /**
  * Edit section for Pagflow (EditPart)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/LinkGroup.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/LinkGroup.java
index 55218d1..1c2db0c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/LinkGroup.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/LinkGroup.java
@@ -41,7 +41,7 @@
  * @author jchoi
  * @version
  */
-public class LinkGroup extends AbstractEditPartGroup {
+/*package*/ class LinkGroup extends AbstractEditPartGroup {
 	private StringButtonDialogField fromOutcomeField;
 
 	private StringDialogField fromActionField;
@@ -175,23 +175,38 @@
 
 	}
 
+	/**
+	 * @param elem
+	 */
 	public void setPropertyProvider(PageflowLink elem) {
 		pfLink = elem;
 		this.refreshData();
 	}
 
+	/**
+	 * @return the outcome field
+	 */
 	public StringButtonDialogField getFromOutcomeField() {
 		return fromOutcomeField;
 	}
 
+	/**
+	 * @return the fromAction field
+	 */
 	public StringDialogField getFromActionField() {
 		return fromActionField;
 	}
 
+	/**
+	 * @return the redirect field
+	 */
 	public ComboDialogField getRedirectField() {
 		return redirectField;
 	}
 
+	/**
+	 * @return the redirect value
+	 */
 	public Integer getRedirectValue() {
 		if (redirectField.getText().equalsIgnoreCase(Boolean.TRUE.toString())) {
 			return LinkGroup.P_VALUE_TRUE;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/LinkSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/LinkSection.java
index e223a74..c6b0dce 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/LinkSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/LinkSection.java
@@ -20,8 +20,8 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.util.PageflowValidation;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 
 /**
  * Edit section for Pagflow Link element (EditPart)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/PageGroup.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/PageGroup.java
index bcaba51..e7e5f33 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/PageGroup.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/PageGroup.java
@@ -34,7 +34,7 @@
  * @author jchoi
  * @version
  */
-public class PageGroup extends AbstractEditPartGroup {
+/*package*/ class PageGroup extends AbstractEditPartGroup {
 
 	private StringButtonDialogField fromViewField;
 
@@ -100,7 +100,13 @@
 		}
 
 	}
-
+	/**
+	 * @param value
+	 * @return the assertion string
+	 */
+	private static String assertString(String value) {
+		return value == null ? "" : value;
+	}
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -135,19 +141,31 @@
 		fromViewField.getChangeControl(toolkit, top).setLayoutData(data);
 	}
 
+	/**
+	 * @param elem
+	 */
 	public void setPropertyProvider(PageflowPage elem) {
 		pfPage = elem;
 		this.refreshData();
 	}
 
+	/**
+	 * @return the fromView field
+	 */
 	public StringButtonDialogField getFromViewField() {
 		return fromViewField;
 	}
 
+	/**
+	 * @return the large icon field
+	 */
 	public StringDialogField getLargeIconField() {
 		return largeIconField;
 	}
 
+	/**
+	 * @return the small icon field
+	 */
 	public StringDialogField getSmallIconField() {
 		return smallIconField;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/PageSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/PageSection.java
index 6593174..00b214a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/PageSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/PageSection.java
@@ -21,8 +21,8 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.util.PageflowValidation;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 
 /**
  * Edit section for Pagflow Page Element (EditPart)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/SetPropertyValueCommand.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/SetPropertyValueCommand.java
index 67df3ca..96d2276 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/SetPropertyValueCommand.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/properties/section/SetPropertyValueCommand.java
@@ -17,22 +17,21 @@
 import org.eclipse.jst.jsf.facesconfig.ui.pageflow.properties.PropertyMessages;
 import org.eclipse.ui.views.properties.IPropertySource;
 
-public class SetPropertyValueCommand extends Command {
+/*package*/ class SetPropertyValueCommand extends Command {
 
-	protected Object propertyValue;
+	private Object propertyValue;
 
-	protected Object propertyID;
+	private Object propertyID;
 
-	protected Object undoValue;
+	private Object undoValue;
 
-	protected boolean resetOnUndo;
+	private boolean resetOnUndo;
 
-	protected IPropertySource target;
+	private IPropertySource target;
 
-	public SetPropertyValueCommand() {
-		super(""); //$NON-NLS-1$
-	}
-
+	/**
+	 * @param propLabel
+	 */
 	public SetPropertyValueCommand(String propLabel) {
 		super(MessageFormat.format(
 				PropertyMessages.property_Command_SetValue,
@@ -60,11 +59,14 @@
 		}
 	}
 
-	public IPropertySource getTarget() {
+	/**
+	 * @return the target
+	 */
+	private IPropertySource getTarget() {
 		return target;
 	}
 
-	public void setTarget(IPropertySource aTarget) {
+	void setTarget(IPropertySource aTarget) {
 		target = aTarget;
 	}
 
@@ -72,11 +74,11 @@
 		execute();
 	}
 
-	public void setPropertyId(Object pName) {
+	void setPropertyId(Object pName) {
 		propertyID = pName;
 	}
 
-	public void setPropertyValue(Object val) {
+	void setPropertyValue(Object val) {
 		propertyValue = val;
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFSynchronizer.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFSynchronizer.java
index 334b5b4..48be8a8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFSynchronizer.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFSynchronizer.java
@@ -43,6 +43,9 @@
 	private static final Logger logger = EditorPlugin
 			.getLogger(FC2PFSynchronizer.class);
 
+	/**
+	 * @param transformer
+	 */
 	public FC2PFSynchronizer(FC2PFTransformer transformer) {
 		this.transformer = transformer;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFTransformer.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFTransformer.java
index 6814b90..7848733 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFTransformer.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/FC2PFTransformer.java
@@ -60,8 +60,14 @@
 	// For code debug.
 	private static final boolean DEBUG = false;
 
+	/**
+	 * the first notification event type after the defaults
+	 */
 	public static final int MY_NOTIFICATION_TYPE = Notification.EVENT_TYPE_COUNT + 1;
 
+	/**
+	 * the first notification event type after MY_NOTIFICATION_TYPE
+	 */
 	public static final int MY_NOTIFICATION_TYPE1 = MY_NOTIFICATION_TYPE + 1;
 
 	/**
@@ -98,11 +104,17 @@
 	 */
 	FacesConfigType facesConfig;
 
+	/**
+	 * Default constructor
+	 */
 	public FC2PFTransformer() {
 		super();
 		// TODO Auto-generated constructor stub
 	}
 
+	/**
+	 * @param listenToNotify
+	 */
 	public void setListenToNotify(boolean listenToNotify) {
 		this.listenToNotify = listenToNotify;
 	}
@@ -457,11 +469,17 @@
 		adapt(facesConfig);
 	}
 
+	/**
+	 * @param facesConfig
+	 */
 	public void setFacesConfig(FacesConfigType facesConfig) {
 		this.facesConfig = facesConfig;
 		refreshFCAdapter(facesConfig);
 	}
 
+	/**
+	 * @param pageflow
+	 */
 	public void setPageflow(Pageflow pageflow) {
 		this.pageflow = pageflow;
 		pageflow.eAdapters().add(this);
@@ -499,6 +517,10 @@
 		}
 	}
 
+	/**
+	 * @param object
+	 * @return true if this transformer adapts object
+	 */
 	public boolean isAdapted(EObject object) {
 		if (object != null) {
 			Iterator adapters = object.eAdapters().iterator();
@@ -513,6 +535,9 @@
 		return false;
 	}
 
+	/**
+	 * clear the internal maps
+	 */
 	public void clearCaches() {
 		mapPaths2PF.clear();
 		mapCases2Links.clear();
@@ -543,6 +568,10 @@
 	    // do nothing
 	}
 
+	/**
+	 * @param caseType
+	 * @return the from view id in caseType
+	 */
 	public static FromViewIdType getSource(NavigationCaseType caseType) {
 		if (caseType.eContainer() instanceof NavigationRuleType) {
 			NavigationRuleType rule = (NavigationRuleType) caseType
@@ -660,6 +689,9 @@
 
 	/**
 	 * Update pageflow model elements against faces-config navigation case.
+	 * @param pageflow_ 
+	 * @param caseFC 
+	 * @return true if the pageflow was changed
 	 */
 	public boolean updatePageflowElements(Pageflow pageflow_,
 			NavigationCaseType caseFC) {
@@ -797,27 +829,6 @@
 		return null;
 	}
 
-	public PageflowLink createPFLink(PageflowNode start, PageflowNode target_,
-			NavigationCaseType caseFC) {
-		PageflowLink link = null;
-		String fromOutcome = caseFC.getFromOutcome() != null ? caseFC
-				.getFromOutcome().getTextContent() : null;
-		String action = caseFC.getFromAction() != null ? caseFC.getFromAction()
-				.getTextContent() : null;
-		NavigationRuleType rule = (NavigationRuleType) caseFC.eContainer();
-		link = createPFLink(fromOutcome);
-		link.setFromaction(action);
-		link.setSource(start);
-		link.setTarget(target_);
-		start.getOutlinks().add(link);
-		target_.getInlinks().add(link);
-		// The reference.
-		link.getFCElements().add(caseFC);
-		start.getFCElements().add(rule.getFromViewId());
-		target_.getFCElements().add(caseFC.getToViewId());
-		return link;
-	}
-
 	/**
 	 * create a new PFLink object according to fromOutcome attribute
 	 * 
@@ -837,6 +848,9 @@
 
 	/**
 	 * create a new PFLink object according to fromOutcome attribute
+	 * @param start 
+	 * @param target_ 
+	 * @param action 
 	 * 
 	 * @param fromOutcome -
 	 *            PFLink's fromOutcome attribute
@@ -910,26 +924,46 @@
 		}
 	}
 
+	/**
+	 * @return true if is listening to notifications and not
+	 * currently in an event
+	 */
 	public boolean isListenToNotify() {
 		return listenToNotify && !isInEvent;
 	}
 
-	public boolean isInEvent() {
-		return isInEvent;
-	}
+	/**
+	 * @return true if in event
+	 */
+//	public boolean isInEvent() {
+//		return isInEvent;
+//	}
 
+	/**
+	 * @param isInEvent
+	 */
 	public void setInEvent(boolean isInEvent) {
 		this.isInEvent = isInEvent;
 	}
 
+	/**
+	 * @return the faces config model
+	 */
 	public FacesConfigType getFacesConfig() {
 		return facesConfig;
 	}
 
+	/**
+	 * @return the root page flow
+	 */
 	public Pageflow getPageflow() {
 		return pageflow;
 	}
 
+	/**
+	 * @param value
+	 * @return a new fromViewId with the text content set to value
+	 */
 	public static FromViewIdType createRLFromViewID(String value) {
 		FromViewIdType fromView = FacesConfigFactory.eINSTANCE
 				.createFromViewIdType();
@@ -937,6 +971,10 @@
 		return fromView;
 	}
 
+	/**
+	 * @param value
+	 * @return a new to view with the text content set to value
+	 */
 	public static ToViewIdType createFCToViewID(String value) {
 		ToViewIdType toView = FacesConfigFactory.eINSTANCE.createToViewIdType();
 		toView.setTextContent(value);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/PF2FCSynchronizer.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/PF2FCSynchronizer.java
index c446c0a..ba3583a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/PF2FCSynchronizer.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/PF2FCSynchronizer.java
@@ -41,6 +41,9 @@
 	private static final Logger logger = EditorPlugin
 			.getLogger(PF2FCSynchronizer.class);
 
+	/**
+	 * @param tranformer
+	 */
 	public PF2FCSynchronizer(FC2PFTransformer tranformer) {
 		this.tranformer = tranformer;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/PFBatchAdapter.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/PFBatchAdapter.java
index 5b1c148..36c2acb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/PFBatchAdapter.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/PFBatchAdapter.java
@@ -24,30 +24,32 @@
 
 	AbstractGraphicalEditPart editPart;
 
+	/**
+	 * @param msg
+	 * @return true postponement needed
+	 */
 	public boolean isNeedPostpone(Notification msg) {
 		return needPostpone
 				&& !(msg.getEventType() == FC2PFTransformer.MY_NOTIFICATION_TYPE || msg
 						.getEventType() == FC2PFTransformer.MY_NOTIFICATION_TYPE1);
 	}
 
+	/**
+	 * @param needPostpone
+	 */
 	public void setNeedPostpone(boolean needPostpone) {
 		this.needPostpone = needPostpone;
 	}
 
-	public AbstractGraphicalEditPart getEditPart() {
-		return editPart;
-	}
-
-	public void setEditPart(AbstractGraphicalEditPart editPart) {
-		this.editPart = editPart;
-	}
-
 	final public void notifyChanged(Notification msg) {
 		if (!isNeedPostpone(msg)) {
 			doNotifyChanged(msg);
 		}
 	}
 
+	/**
+	 * @param notification
+	 */
 	abstract public void doNotifyChanged(Notification notification);
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/TransformUtil.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/TransformUtil.java
index 39b447b..6a5e35c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/TransformUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/synchronization/TransformUtil.java
@@ -34,6 +34,8 @@
 
 	/**
 	 * To see if the faces-config element is on a valid hirachy.
+	 * @param object 
+	 * @return true if object's root ancestor is a facesConfig model
 	 */
 	public static boolean isValidFacesConfigElement(EObject object) {
 		EObject parent = EcoreUtil.getRootContainer(object);
@@ -43,6 +45,8 @@
 
 	/**
 	 * To see if the pageflow element is on a valid hirachy.
+	 * @param element 
+	 * @return true if element's root ancestor is a page flow element
 	 */
 	public static boolean isValidPageflowElement(EObject element) {
 		EObject root = EcoreUtil.getRootContainer(element);
@@ -50,11 +54,19 @@
 		return result;
 	}
 
+	/**
+	 * @param link
+	 * @return true the link is valid
+	 */
 	public static boolean isValidLink(PageflowLink link) {
 		return isValidPageflowElement(link) && link.getSource() != null
 				&& link.getTarget() != null;
 	}
 
+	/**
+	 * @param rule
+	 * @return gets the from-view-id from rule
+	 */
 	public static String getFromViewID(NavigationRuleType rule) {
 		String result = "*";
 		if (rule.getFromViewId() != null) {
@@ -63,6 +75,10 @@
 		return result;
 	}
 
+	/**
+	 * @param navCase
+	 * @return gets the to-view-id from navCase
+	 */
 	public static String getToViewID(NavigationCaseType navCase) {
 		String result = "*";
 		if (navCase.getToViewId() != null) {
@@ -71,6 +87,11 @@
 		return result;
 	}
 
+	/**
+	 * @param path
+	 * @param pageflow
+	 * @return get pageflowpage in pageflow corresponding to path
+	 */
 	public static PageflowPage findPage(String path, Pageflow pageflow) {
 		List nodes = pageflow.getNodes();
 		for (int i = 0; i < nodes.size(); i++) {
@@ -85,6 +106,12 @@
 		return null;
 	}
 
+	/**
+	 * @param action
+	 * @param outcome
+	 * @param pageflow
+	 * @return find the end case
+	 */
 	public static PageflowNode findCaseEnd(PageflowPage action,
 			FromOutcomeType outcome, Pageflow pageflow) {
 		// TODO: find a case end in pageflow model
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/ModelCreationFactory.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/ModelCreationFactory.java
index 655b4c6..b869353 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/ModelCreationFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/ModelCreationFactory.java
@@ -26,6 +26,9 @@
 public class ModelCreationFactory implements CreationFactory {
 	private Class targetClass;
 
+	/**
+	 * @param targetClass
+	 */
 	public ModelCreationFactory(Class targetClass) {
 		this.targetClass = targetClass;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowAnnotationUtil.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowAnnotationUtil.java
index 89e6190..b6a2362 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowAnnotationUtil.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowAnnotationUtil.java
@@ -34,135 +34,135 @@
  */
 public class PageflowAnnotationUtil {
 
-	/**
-	 * 
-	 * validate the pageflow and its edit part
-	 * 
-	 * @param containerPart -
-	 *            it can be null, then the edit part will not be updated
-	 */
-	public static void validatePageflow(GraphicalEditPart containerPart) {
-		if (containerPart == null) {
-			return;
-		}
+    /**
+     * 
+     * validate the pageflow and its edit part
+     * 
+     * @param containerPart -
+     *            it can be null, then the edit part will not be updated
+     */
+    public static void validatePageflow(final GraphicalEditPart containerPart) {
+        if (containerPart == null) {
+            return;
+        }
 
-		// removeAllAnnotations(containerPart);
+        // removeAllAnnotations(containerPart);
 
-		// validate the nodes including page and actions.
-		Iterator iterChild = containerPart.getChildren().iterator();
-		while (iterChild.hasNext()) {
+        // validate the nodes including page and actions.
+        final Iterator iterChild = containerPart.getChildren().iterator();
+        while (iterChild.hasNext()) {
 
-			PageflowElementEditPart element = (PageflowElementEditPart) iterChild
-					.next();
-			// String errorMessage = null;
-			if (element instanceof PFValidator) {
-				((PFValidator) element).validate();
-			}
-			// if (element.getModel() instanceof PageflowPage) {
-			// errorMessage = PageflowValidation.getInstance().getNotifyMessage(
-			// (PageflowPage) element.getModel());
-			// }
+            final PageflowElementEditPart element = (PageflowElementEditPart) iterChild
+            .next();
+            // String errorMessage = null;
+            if (element instanceof PFValidator) {
+                ((PFValidator) element).validate();
+            }
+            // if (element.getModel() instanceof PageflowPage) {
+            // errorMessage = PageflowValidation.getInstance().getNotifyMessage(
+            // (PageflowPage) element.getModel());
+            // }
 
-			// if (errorMessage != null) {
-			// addAnnotation(element, errorMessage);
-			// } else {
-			// removeAnnotation(element);
-			// }
+            // if (errorMessage != null) {
+            // addAnnotation(element, errorMessage);
+            // } else {
+            // removeAnnotation(element);
+            // }
 
-			// validate the connections.
-			Iterator iterLinks = element.getSourceConnections().iterator();
-			while (iterLinks.hasNext()) {
-				PageflowLinkEditPart link = (PageflowLinkEditPart) iterLinks
-						.next();
-				link.validate();
-				// validateLink(link);
-			}
-		}
+            // validate the connections.
+            final Iterator iterLinks = element.getSourceConnections().iterator();
+            while (iterLinks.hasNext()) {
+                final PageflowLinkEditPart link = (PageflowLinkEditPart) iterLinks
+                .next();
+                link.validate();
+                // validateLink(link);
+            }
+        }
 
-	}
+    }
 
-	/**
-	 * validate the page based on model and its's edit part.
-	 * 
-	 * @param pagePart -
-	 *            it can be null, then the edit part will not be updated
-	 */
-	public static void validatePage(PageflowNodeEditPart pagePart) {
-		if (pagePart == null && pagePart.getParent() != null) {
-			return;
-		}
+    /**
+     * validate the page based on model and its's edit part.
+     * 
+     * @param pagePart -
+     *            it can be null, then the edit part will not be updated
+     */
+    public static void validatePage(final PageflowNodeEditPart pagePart) {
+        if (pagePart != null && pagePart.getParent() != null) {
+            return;
+        }
 
-		String errorMessage = null;
+        String errorMessage = null;
 
-		removeAnnotation(pagePart);
+        removeAnnotation(pagePart);
 
-		errorMessage = PageflowValidation.getInstance().getNotifyMessage(
-				(PageflowPage) pagePart.getModel());
+        errorMessage = PageflowValidation.getInstance().getNotifyMessage(
+                (PageflowPage) pagePart.getModel());
 
-		if (errorMessage != null) {
-			addAnnotation(pagePart, errorMessage);
-		} else {
-			removeAnnotation(pagePart);
-		}
+        if (errorMessage != null) {
+            addAnnotation(pagePart, errorMessage);
+        } else {
+            removeAnnotation(pagePart);
+        }
 
-		// validate the connections.
-		// Iterator iterLinks = pagePart.getSourceConnections().iterator();
-		// while (iterLinks.hasNext()) {
-		// PageflowLinkEditPart link = (PageflowLinkEditPart) iterLinks.next();
-		//
-		// validateLink(link);
-		// }
-	}
+        // validate the connections.
+        // Iterator iterLinks = pagePart.getSourceConnections().iterator();
+        // while (iterLinks.hasNext()) {
+        // PageflowLinkEditPart link = (PageflowLinkEditPart) iterLinks.next();
+        //
+        // validateLink(link);
+        // }
+    }
 
-	/**
-	 * validate the link based on model and its's edit part.
-	 * 
-	 * @param linkPart -
-	 *            it can be null, then the edit part will not be updated
-	 */
-	public static void validateLink(PageflowLinkEditPart linkPart) {
-		if (linkPart != null && linkPart.getParent() != null) {
-			String errorMessage = null;
+    /**
+     * validate the link based on model and its's edit part.
+     * 
+     * @param linkPart -
+     *            it can be null, then the edit part will not be updated
+     */
+    public static void validateLink(final PageflowLinkEditPart linkPart) {
+        if (linkPart != null && linkPart.getParent() != null) {
+            String errorMessage = null;
 
-			removeAnnotation(linkPart);
+            removeAnnotation(linkPart);
 
-			errorMessage = PageflowValidation.getInstance().isValidLink(
-					(PageflowLink) linkPart.getModel());
+            errorMessage = PageflowValidation.getInstance().isValidLink(
+                    (PageflowLink) linkPart.getModel());
 
-			if (errorMessage != null) {
-				addAnnotation(linkPart, errorMessage);
-			} else {
-				removeAnnotation(linkPart);
-			}
-		}
-	}
+            if (errorMessage != null) {
+                addAnnotation(linkPart, errorMessage);
+            } else {
+                removeAnnotation(linkPart);
+            }
+        }
+    }
 
-	/**
-	 * add a marker with IMarker.PROBLEM type, IMarker.SEVERITY_ERROR severity,
-	 * and message.
-	 * 
-	 * @param editPart
-	 * @param model
-	 * @param message
-	 */
-	private static void addAnnotation(GraphicalEditPart editPart, String message) {
-		if (editPart != null && editPart instanceof IAnnotationEditPart) {
-			Annotation annotation = new Annotation(IMarker.PROBLEM, false,
-					message);
-			((IAnnotationEditPart) editPart).addAnnotation(annotation);
-		}
-	}
+    /**
+     * add a marker with IMarker.PROBLEM type, IMarker.SEVERITY_ERROR severity,
+     * and message.
+     * 
+     * @param editPart
+     * @param model
+     * @param message
+     */
+    private static void addAnnotation(final GraphicalEditPart editPart, final String message) {
+        if (editPart != null && editPart instanceof IAnnotationEditPart) {
+            final Annotation annotation = new Annotation(IMarker.PROBLEM, false,
+                    message);
+            ((IAnnotationEditPart) editPart).addAnnotation(annotation);
+        }
+    }
 
-	/**
-	 * remove a marker
-	 * 
-	 * @param editPart
-	 * @param model
-	 */
-	private static void removeAnnotation(GraphicalEditPart editPart) {
-		if (editPart != null && editPart instanceof IAnnotationEditPart) {
-			((IAnnotationEditPart) editPart).removeAnnotation();
-		}
-	}
+    /**
+     * remove a marker
+     * 
+     * @param editPart
+     * @param model
+     */
+    private static void removeAnnotation(final GraphicalEditPart editPart) {
+        if (editPart != null && editPart instanceof IAnnotationEditPart) {
+            ((IAnnotationEditPart) editPart).removeAnnotation();
+        }
+    }
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowModelManager.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowModelManager.java
index e09795a..5f57ddf 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowModelManager.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowModelManager.java
@@ -85,7 +85,7 @@
 			pathPageflow = path;
 			ResourceSet resSet = getResourceSet();
 			resourcePageflow = resSet.getResource(URI.createPlatformResourceURI(path
-					.toString()), true);
+					.toString(), false), true);
 		}
 
 		return resourcePageflow;
@@ -121,7 +121,7 @@
 			pathPageflow = path;
 			ResourceSet resSet = getResourceSet();
 			resourcePageflow = resSet.createResource(URI.createPlatformResourceURI(path
-					.toString()));
+					.toString(), false));
 		}
 		return resourcePageflow;
 	}
@@ -209,11 +209,12 @@
 	 * Saves the content of the model to the file.
 	 * 
 	 * @param path
+	 * @throws IOException 
 	 */
 	public void save(final IPath path) throws IOException {
 		if (!pathPageflow.toString().equalsIgnoreCase(path.toString())) {
 			pathPageflow = path;
-			URI fileURI = URI.createPlatformResourceURI(path.toString());
+			URI fileURI = URI.createPlatformResourceURI(path.toString(), false);
 			resourcePageflow.setURI(fileURI);
 		}
 		resourcePageflow.save(defaultSaveOptions);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowResourceFactory.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowResourceFactory.java
index 305f7b5..7ed59c9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowResourceFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowResourceFactory.java
@@ -29,6 +29,9 @@
 	/** resource */
 	private IResource resource;
 
+	/**
+	 * @param resource
+	 */
 	public PageflowResourceFactory(IResource resource) {
 		this.resource = resource;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowSwitch.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowSwitch.java
index 944ee44..3487f12 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowSwitch.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowSwitch.java
@@ -56,11 +56,14 @@
 
 	/**
 	 * Calls <code>caseXXX</code> for each class of the model until one
-	 * returns a non null result; it yields that result. <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * returns a non null result; it yields that result. 
+	 * 
+	 * <!-- begin-user-doc -->
+	 * @param theEObject 
 	 * 
 	 * @return the first non-null result returned by a <code>caseXXX</code>
 	 *         call.
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	public Object doSwitch(EObject theEObject) {
@@ -69,11 +72,16 @@
 
 	/**
 	 * Calls <code>caseXXX</code> for each class of the model until one
-	 * returns a non null result; it yields that result. <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * returns a non null result; it yields that result. 
+	 * 
+	 * <!-- begin-user-doc -->
+	 * @param theEClass 
+	 * @param theEObject 
 	 * 
 	 * @return the first non-null result returned by a <code>caseXXX</code>
 	 *         call.
+	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	protected Object doSwitch(EClass theEClass, EObject theEObject) {
@@ -87,11 +95,16 @@
 
 	/**
 	 * Calls <code>caseXXX</code> for each class of the model until one
-	 * returns a non null result; it yields that result. <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+	 * returns a non null result; it yields that result. 
+	 * 
+	 * <!-- begin-user-doc -->
+	 * @param classifierID 
+	 * @param theEObject 
 	 * 
 	 * @return the first non-null result returned by a <code>caseXXX</code>
 	 *         call.
+	 * <!-- end-user-doc -->
+	 * 
 	 * @generated
 	 */
 	protected Object doSwitch(int classifierID, EObject theEObject) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowTransform.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowTransform.java
index 6a1011a..327af05 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowTransform.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowTransform.java
@@ -36,6 +36,7 @@
 
 	/**
 	 * Returns the shared singleton instance.
+	 * @return  the singleton transform instance
 	 */
 	public static PageflowTransform getInstance() {
 		if (transform == null) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowValidation.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowValidation.java
index 42e49e7..6d97611 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowValidation.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/util/PageflowValidation.java
@@ -79,6 +79,7 @@
 	 * there are five types of invalid pflinke for property source. 1. link
 	 * between page and action 2. the source of link is Begin or End node 3. the
 	 * target of link is Begin or End node.
+	 * @param link 
 	 * 
 	 * @return - valid link or not.
 	 * 
@@ -91,6 +92,7 @@
 	 * determine the pflink is valid or not for face-config rule in our model,
 	 * there are four types of invalid pflinke. 1. the source of link is Begin
 	 * or End node 2. the target of link is Begin or End node.
+	 * @param link 
 	 * 
 	 * @return - valid link or not.
 	 * 
@@ -102,6 +104,7 @@
 	/**
 	 * determine the pflink is valid or not for face-config rule in our model,
 	 * there are four types of invalid pflinke.
+	 * @param link 
 	 * 
 	 * @return - valid link or not.
 	 * 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/BaseFigureDecorator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/BaseFigureDecorator.java
index 301d6fe..ffe8a64 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/BaseFigureDecorator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/BaseFigureDecorator.java
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/BaseNodeFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/BaseNodeFigure.java
index 2dbcbd8..096bef9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/BaseNodeFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/BaseNodeFigure.java
@@ -43,25 +43,28 @@
  * @author ddean
  * 
  */
-public class BaseNodeFigure extends Figure implements IBaseFigure {
-	protected IBaseFigure baseFigure;
+/*package*/ class BaseNodeFigure extends Figure implements IBaseFigure {
+	private IBaseFigure baseFigure;
 
-	protected boolean anchorsVisible = true;
+	private boolean anchorsVisible = true;
 
-	protected Hashtable connectionAnchors = new Hashtable(7);
+	private Hashtable connectionAnchors = new Hashtable(7);
 
-	protected Vector inputConnectionAnchors = new Vector(2, 2);
+	private Vector inputConnectionAnchors = new Vector(2, 2);
 
-	protected Vector outputConnectionAnchors = new Vector(2, 2);
+	private Vector outputConnectionAnchors = new Vector(2, 2);
 
-	protected Vector topConnectionAnchors = new Vector();
+	private Vector topConnectionAnchors = new Vector();
 
-	protected Vector bottomConnectionAnchors = new Vector();
+	private Vector bottomConnectionAnchors = new Vector();
 
-	protected Vector leftConnectionAnchors = new Vector();
+	private Vector leftConnectionAnchors = new Vector();
 
-	protected Vector rightConnectionAnchors = new Vector();
+	private Vector rightConnectionAnchors = new Vector();
 
+	/**
+	 * @param figure
+	 */
 	public BaseNodeFigure(IBaseFigure figure) {
 		setBaseFigure(figure);
 		ObserveVisibleXYLayout layout = new ObserveVisibleXYLayout();
@@ -69,6 +72,9 @@
 		setLayoutManager(layout);
 	}
 
+	/**
+	 * @param figure
+	 */
 	public void setBaseFigure(IBaseFigure figure) {
 		setBaseFigure(figure, new Rectangle(0, 0, -1, -1));
 	}
@@ -80,6 +86,10 @@
 		}
 	}
 
+	/**
+	 * @param figure
+	 * @param constraint
+	 */
 	public void setBaseFigure(IBaseFigure figure, Rectangle constraint) {
 		if (!getChildren().contains(figure)) {
 			if (getChildren().contains(baseFigure))
@@ -105,6 +115,9 @@
 		}
 	}
 
+	/**
+	 * @return the base figure
+	 */
 	public IBaseFigure getBaseFigure() {
 		return baseFigure;
 	}
@@ -134,6 +147,7 @@
 	 * 
 	 * @param portName
 	 *            unique name to refer to the port
+	 * @return the connection anchor
 	 */
 	public PortConnectionAnchor addOutput(String portName) {
 		OutputPortFigure outputPort = new OutputPortFigure();
@@ -301,6 +315,9 @@
 		return null;
 	}
 
+	/**
+	 * @param visible
+	 */
 	public void setAnchorsVisible(boolean visible) {
 		if (anchorsVisible != visible) {
 			anchorsVisible = visible;
@@ -317,14 +334,14 @@
 		}
 	}
 
-	/*
+	/**
 	 * Determine which side of the figure to place each anchor based on the
 	 * relative position (north, south, east or west) of the connection line's
 	 * opposite anchor. If the anchor is not connected to anything else, the
 	 * default is to place target (input) anchors on the left and source
 	 * (output) anchors on the right.
 	 */
-	protected void determineAnchorPositions() {
+	private void determineAnchorPositions() {
 		Iterator it;
 		topConnectionAnchors.clear();
 		bottomConnectionAnchors.clear();
@@ -523,7 +540,7 @@
 		}
 	}
 
-	protected void placeAnchors() {
+	private void placeAnchors() {
 		determineAnchorPositions();
 		if (anchorsVisible) {
 			Iterator it;
@@ -634,7 +651,7 @@
 	 * unreadable Anchor size is now dependent on icon size, not constant. Asks
 	 * the connection anchor for its size.
 	 */
-	public Dimension getAnchorSize() {
+	private Dimension getAnchorSize() {
 		Dimension d = new Dimension(FigureConstants.PORT_SIDE,
 				FigureConstants.PORT_SIDE);
 		if (!connectionAnchors.isEmpty()) {
@@ -645,7 +662,10 @@
 		return d;
 	}
 
-	public Insets getAnchorInsets() {
+	/**
+	 * @return the anchor insets
+	 */
+	protected final Insets getAnchorInsets() {
 		Insets in = new Insets(0, 0, 0, 0);
 		// CR389070: Figures are abbreviating rule figures names and making them
 		// unreadable
@@ -797,12 +817,15 @@
 		return size;
 	}
 
-	public static void moveToTop(IFigure parent, IFigure child) {
+	private static void moveToTop(IFigure parent, IFigure child) {
 		parent.getChildren().remove(child);
 		parent.getChildren().add(child);
 	}
 
-	public void moveToTop() {
+	/**
+	 * move to top layer
+	 */
+	protected final void moveToTop() {
 		IFigure parent = getParent();
 		IFigure child = this;
 		while (parent != null && !(parent instanceof Layer)) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ColorFontFieldEditor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ColorFontFieldEditor.java
index 2bd8d23..33cb5d9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ColorFontFieldEditor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ColorFontFieldEditor.java
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ComboFieldEditor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ComboFieldEditor.java
index cb344b3..53ce7b2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ComboFieldEditor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ComboFieldEditor.java
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/CompoundFigureListener.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/CompoundFigureListener.java
index 69e0ad4..c264648 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/CompoundFigureListener.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/CompoundFigureListener.java
@@ -19,6 +19,10 @@
  * generated when a user presses a different tab (tabChanged event) or presses
  * one of the minimize/maximize/restore buttons (stateChanged event)
  */
-public interface CompoundFigureListener extends WindowFigureListener {
+/*package*/ interface CompoundFigureListener extends WindowFigureListener {
+	/**
+	 * @param oldState
+	 * @param newState
+	 */
 	void stateChanged(int oldState, int newState);
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/CompoundNodeFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/CompoundNodeFigure.java
index 6ddceb6..63bff4e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/CompoundNodeFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/CompoundNodeFigure.java
@@ -23,7 +23,6 @@
 import org.eclipse.draw2d.LayoutManager;
 import org.eclipse.draw2d.geometry.Dimension;
 import org.eclipse.draw2d.geometry.Insets;
-import org.eclipse.draw2d.geometry.Point;
 import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin;
 import org.eclipse.swt.graphics.Color;
@@ -33,13 +32,13 @@
 /**
  * The figure for Compound nodes
  */
-public class CompoundNodeFigure extends BaseNodeFigure implements
+/*package*/ class CompoundNodeFigure extends BaseNodeFigure implements
 		FreeformFigure, IContainerFigure {
-	public final static int MINIMIZED = 1;
+	private final static int MINIMIZED = 1;
 
-	public final static int RESTORED = 2;
+	final static int RESTORED = 2;
 
-	public final static int MAXIMIZED = 3;
+	private final static int MAXIMIZED = 3;
 
 	private int state = RESTORED;
 
@@ -73,6 +72,9 @@
 	private static Image restoreHiliteImage = EditorPlugin.getDefault()
 			.getImage("restore_hilite.gif");
 
+	/**
+	 * Default constructor
+	 */
 	public CompoundNodeFigure() {
 		// create all of the figures and adornments:
 		// the icon figure
@@ -236,6 +238,9 @@
 		iconFigure.removeDecorator(position);
 	}
 
+	/**
+	 * @param flag
+	 */
 	public void setHilight(boolean flag) {
 		windowFigure.setHighlight(flag);
 		if (flag)
@@ -290,11 +295,6 @@
 		}
 		super.validate();
 	}
-
-	public IconFigure getIconFigure() {
-		return iconFigure;
-	}
-
 	/**
 	 * @return the window figure
 	 */
@@ -317,10 +317,16 @@
 		windowFigure.setBackgroundColor(c);
 	}
 
+	/**
+	 * @return the state
+	 */
 	public int getState() {
 		return state;
 	}
 
+	/**
+	 * @param newState
+	 */
 	public void setState(int newState) {
 		int oldState = state;
 		state = newState;
@@ -354,7 +360,7 @@
 		fireStateChanged(oldState, newState);
 	}
 
-	protected void fireStateChanged(int oldState, int newState) {
+	private void fireStateChanged(int oldState, int newState) {
 		Object l[] = windowFigure.getTabbedTitleBarBorder().getListeners();
 		for (int i = 0; i < l.length; ++i) {
 			if (l[i] instanceof CompoundFigureListener)
@@ -363,52 +369,6 @@
 		}
 	}
 
-	public Point getScrollPosition() {
-		return windowFigure.getScrollPosition();
-	}
-
-	public int addTab(String s) {
-		return windowFigure.addTab(s);
-	}
-
-	public void removeTab(int index) {
-		windowFigure.removeTab(index);
-	}
-
-	public void setCurrentTab(int index) {
-		windowFigure.setCurrentTab(index);
-	}
-
-	public int getCurrentTab() {
-		return windowFigure.getCurrentTab();
-	}
-
-	public void setContents(int index, Object contents) {
-		windowFigure.setContents(index, contents);
-	}
-
-	public Object getContents(int index) {
-		return windowFigure.getContents(index);
-	}
-
-	public Object getContents() {
-		return windowFigure.getContents();
-	}
-
-	public TabbedTitleBarBorder getTabbedTitleBarBorder() {
-		return windowFigure.getTabbedTitleBarBorder();
-	}
-
-	public void addCompoundFigureListener(CompoundFigureListener listener) {
-		windowFigure.getTabbedTitleBarBorder()
-				.addTabbedWindowListener(listener);
-	}
-
-	public void removeCompoundFigureListener(CompoundFigureListener listener) {
-		windowFigure.getTabbedTitleBarBorder().removeTabbedWindowListener(
-				listener);
-	}
-
 	public Dimension getMinimumSize(int wHint, int hHint) {
 		if (getState() == CompoundNodeFigure.RESTORED) {
 			Dimension d = windowFigure.getMinimumSize(wHint, hHint);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/FigureConstants.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/FigureConstants.java
index 81cfa26..bb57abe 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/FigureConstants.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/FigureConstants.java
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/GEMPreferences.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/GEMPreferences.java
index 781254c..9bb7fa5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/GEMPreferences.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/GEMPreferences.java
@@ -46,7 +46,7 @@
  * preferences can be accessed directly via the preference store.
  */
 
-public class GEMPreferences extends FieldEditorPreferencePage implements
+public final class GEMPreferences extends FieldEditorPreferencePage implements
 		IWorkbenchPreferencePage {
 	// appearance
     /**
@@ -54,59 +54,133 @@
      */
     public final static String SHOW_INTRO_EDITOR = "ShowIntroEditor"; //$NON-NLS-1$
     
+	/**
+	 * use system colors preference
+	 */
 	public final static String USE_SYSTEM_COLORS = "UseSystemColors"; //$NON-NLS-1$
 
+	/**
+	 * canvas color preference
+	 */
 	public final static String CANVAS_COLOR = "CanvasColor"; //$NON-NLS-1$
 
+	/**
+	 * figure label font
+	 */
 	public final static String FIGURE_LABEL_FONT = "FigureLabelFont"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String FIGURE_LABEL_FONT_COLOR = "FigureLabelFontColor"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LABEL_PLACEMENT = "LabelPlacement"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String INPUT_PORT_COLOR = "InputPortColor"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String OUTPUT_PORT_COLOR = "OutputPortColor"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String SHOW_LINE_LABELS = "ShowLineLabels"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LINE_LABEL_FONT = "LineLabelFont"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LINE_LABEL_FONT_COLOR = "LineLabelFontColor"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LINE_LABEL_COLOR = "LineLabelColor"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LINE_WIDTH = "LineWidth"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LINE_COLOR = "LineColor"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LINE_ROUTING = "LineRouting"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String SNAP_TO_GRID = "SnapToGrid"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String SNAP_TO_GEOMETRY = "SnapToGeometry"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String GRID_WIDTH = "GridWidth"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String GRID_HEIGHT = "GridHeight"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String GRID_COLOR = "GridColor"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LABEL_PLACEMENT_TOP = "Top"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LABEL_PLACEMENT_BOTTOM = "Bottom"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LABEL_PLACEMENT_LEFT = "Left"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 */
 	public final static String LABEL_PLACEMENT_RIGHT = "Right"; //$NON-NLS-1$
 
-	// "Direct" routing was intended for connections lines without bendpoints;
-	// this has been removed because it is unnecessary.
-	// public final static String LINE_ROUTING_DIRECT = "Direct";
-	// "Manhattan" line routing creates orthogonal lines
+	// 
+	/**
+	 * "Direct" routing was intended for connections lines without bendpoints;
+	 * this has been removed because it is unnecessary.
+	 * public final static String LINE_ROUTING_DIRECT = "Direct";
+	 * "Manhattan" line routing creates orthogonal lines
+	 */
 	public final static String LINE_ROUTING_MANHATTAN = "Manhattan"; //$NON-NLS-1$
 
-	// "Manual" routing allows user to create bendpoints
+	/**
+	 * "Manual" routing allows user to create bendpoints
+	 */
 	public final static String LINE_ROUTING_MANUAL = "Manaul"; //$NON-NLS-1$
 
 	private final static String[][] m_lineRoutingLabels = {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IBaseFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IBaseFigure.java
index 16f6834..4119636 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IBaseFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IBaseFigure.java
@@ -20,37 +20,71 @@
 
 /**
  * @author Bob
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
  */
-public interface IBaseFigure extends IFigure {
+/*package*/ interface IBaseFigure extends IFigure 
+{
+	/**
+	 * @param text
+	 */
 	public abstract void setText(String text);
 
+	/**
+	 * @return the text
+	 */
 	public abstract String getText();
 
-	/*
+	/**
 	 * CR374981: Long activity labels do not get wrapped or truncated This
 	 * method was added to the IBaseFigure interface to support direct edit of
 	 * figure labels on the canvas.
+	 * @return the text bounds rectangle
 	 */
 	public abstract Rectangle getTextBounds();
 
+	/**
+	 * @param image
+	 */
 	public abstract void setIcon(Image image);
 
+	/**
+	 * @return the icon
+	 */
 	public abstract Image getIcon();
 
+	/**
+	 * @param text
+	 */
 	public abstract void setToolTipText(String text);
 
+	/**
+	 * @return the tool tip text
+	 */
 	public abstract String getToolTipText();
 
+	/**
+	 * @param flag
+	 */
 	public abstract void setHighlight(boolean flag);
 
+	/**
+	 * Add decorator.  May
+	 * cause the figure to become invalidated
+	 * @param decorator
+	 */
 	public abstract void addDecorator(BaseFigureDecorator decorator);
 
+	/**
+	 * Remove the decorator
+	 */
 	public abstract void removeDecorator();
 
+	/**
+	 * @param position
+	 */
 	public abstract void removeDecorator(int position);
 
+	/**
+	 * @return the list of decoractors
+	 */
 	public abstract List getDecorators();
 }
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IContainerFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IContainerFigure.java
index e627c53..4de2acb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IContainerFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IContainerFigure.java
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IconFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IconFigure.java
index 9c06a68..1336edc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IconFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/IconFigure.java
@@ -38,13 +38,13 @@
  * 
  * @author bbrodt
  */
-public class IconFigure extends Label implements IBaseFigure {
-	public static int defaultTextPlacement = PositionConstants.SOUTH;
+/*package*/ class IconFigure extends Label implements IBaseFigure {
+	private static int defaultTextPlacement = PositionConstants.SOUTH;
 
-	public static Font defaultFont = JFaceResources.getFontRegistry().get(
+	static Font defaultFont = JFaceResources.getFontRegistry().get(
 			JFaceResources.DEFAULT_FONT);
 
-	public static Color defaultForegroundColor = ColorConstants.black;
+	static Color defaultForegroundColor = ColorConstants.black;
 
 	private ArrayList decorators;
 
@@ -59,12 +59,19 @@
 
 		private IconFigure host;
 
+		/**
+		 * @param host
+		 * @param text
+		 */
 		public IconLabel(IconFigure host, String text) {
 			super(text);
 			this.host = host;
 			locator = new LabelLocator(this);
 		}
 
+		/**
+		 * @return the icon figure
+		 */
 		public IconFigure getHost() {
 			return host;
 		}
@@ -93,6 +100,9 @@
 	private class LabelLocator implements AncestorListener {
 		IconLabel label;
 
+		/**
+		 * @param label
+		 */
 		public LabelLocator(IconLabel label) {
 			this.label = label;
 			label.getHost().addAncestorListener(this);
@@ -130,6 +140,9 @@
 				label.getParent().remove(label);
 		}
 
+		/**
+		 * 
+		 */
 		public void setConstraints() {
 			Layer layer = getParentLayer();
 			if (layer != null && layer.getLayoutManager() != null
@@ -172,6 +185,9 @@
 
 	// CR389070: Figures are abbreviating rule figures names and making them
 	// unreadable
+	/**
+	 * @return the label
+	 */
 	public Label getLabel() {
 		return iconLabel;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/InputPortFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/InputPortFigure.java
index f58ecc8..66ca25b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/InputPortFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/InputPortFigure.java
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/LinkFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/LinkFigure.java
index 60a9fca..11e0a80 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/LinkFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/LinkFigure.java
@@ -32,306 +32,305 @@
 
 /**
  * @author Bob
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
  */
-public class LinkFigure extends PolylineConnection implements IBaseFigure {
-	public static Color defaultLineColor = ColorConstants.black;
+/*package*/ class LinkFigure extends PolylineConnection implements IBaseFigure {
+    private final static Color defaultLineColor = ColorConstants.black;
 
-	public static int defaultLineWidth = 1;
+    private final static int defaultLineWidth = 1;
 
-	public static boolean defaultLabelVisible = false;
+    private final static boolean defaultLabelVisible = false;
 
-	public static Color defaultLabelForeground = ColorConstants.black;
+    private final static Color defaultLabelForeground = ColorConstants.black;
 
-	public static Color defaultLabelBackground = ColorConstants.white;
+    private final static Color defaultLabelBackground = ColorConstants.white;
 
-	public static Font defaultFont = JFaceResources.getFontRegistry().get(
-			JFaceResources.DEFAULT_FONT);
+    private final static Font defaultFont = JFaceResources.getFontRegistry().get(
+            JFaceResources.DEFAULT_FONT);
 
-	private LinkLabel label;
+    private LinkLabel label;
 
-	public LinkFigure() {
-		super();
-		setLineWidth(defaultLineWidth);
-		setForegroundColor(defaultLineColor);
+    /**
+     * Default constructor
+     */
+    public LinkFigure() {
+        super();
+        setLineWidth(defaultLineWidth);
+        setForegroundColor(defaultLineColor);
 
-		// BaseFigureDecorator decorator;
-		// decorator = new
-		// BaseFigureDecorator(GEMPlugin.getDefault().getGEMImage("delete.gif"),"target",PositionConstants.WEST);
-		// addDecorator(decorator);
-		// decorator = new
-		// BaseFigureDecorator(GEMPlugin.getDefault().getGEMImage("delete.gif"),"target",PositionConstants.EAST);
-		// addDecorator(decorator);
-	}
+        // BaseFigureDecorator decorator;
+        // decorator = new
+        // BaseFigureDecorator(GEMPlugin.getDefault().getGEMImage("delete.gif"),"target",PositionConstants.WEST);
+        // addDecorator(decorator);
+        // decorator = new
+        // BaseFigureDecorator(GEMPlugin.getDefault().getGEMImage("delete.gif"),"target",PositionConstants.EAST);
+        // addDecorator(decorator);
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#setToolTipText()
-	 */
-	public void setToolTipText(String text) {
-		Label toolTip_ = null;
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#setToolTipText()
+     */
+    public void setToolTipText(final String text) {
+        Label toolTip_ = null;
 
-		if (text != null && text.length() > 0) {
-			toolTip_ = new Label(text);
-			toolTip_.setBorder(new MarginBorder(3));
-		}
+        if (text != null && text.length() > 0) {
+            toolTip_ = new Label(text);
+            toolTip_.setBorder(new MarginBorder(3));
+        }
 
-		super.setToolTip(toolTip_);
-	}
+        super.setToolTip(toolTip_);
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getToolTipText()
-	 */
-	public String getToolTipText() {
-		if (getToolTip() != null)
-			return ((Label) getToolTip()).getText();
-		return null;
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getToolTipText()
+     */
+    public String getToolTipText() {
+        if (getToolTip() != null)
+        {
+            return ((Label) getToolTip()).getText();
+        }
+        return null;
+    }
 
-	public void setHighlight(boolean flag) {
-		if (flag) {
-			setForegroundColor(ColorConstants.titleBackground);
-			// setLineWidth(defaultLineWidth * 2);
-		} else {
-			setForegroundColor(defaultLineColor);
-			// setLineWidth(defaultLineWidth);
-		}
-	}
+    public void setHighlight(final boolean flag) {
+        if (flag) {
+            setForegroundColor(ColorConstants.titleBackground);
+            // setLineWidth(defaultLineWidth * 2);
+        } else {
+            setForegroundColor(defaultLineColor);
+            // setLineWidth(defaultLineWidth);
+        }
+    }
 
-	public void setSelected(boolean flag) {
-		if (flag) {
-			// setForegroundColor(ColorConstants.titleBackground);
-			setLineWidth(defaultLineWidth * 2);
-		} else {
-			// setForegroundColor(defaultLineColor);
-			setLineWidth(defaultLineWidth);
-		}
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#setText()
+     */
+    public void setText(final String text) {
+        if (text != null && text.length() == 0) {
+            if (label != null) {
+                remove(label);
+                label = null;
+            }
+        } else {
+            getLabel().setText(text);
+        }
+    }
 
-	public void setLabelVisible(boolean flag) {
-		getLabel().setVisible(flag);
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getText()
+     */
+    public String getText() {
+        if (label == null)
+        {
+            return null;
+        }
+        return label.getText();
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#setText()
-	 */
-	public void setText(String text) {
-		if (text == null && text.length() == 0) {
-			if (label != null) {
-				remove(label);
-				label = null;
-			}
-		} else {
-			getLabel().setText(text);
-		}
-	}
+    /*
+     * CR374981: Long activity labels do not get wrapped or truncated This
+     * method was added to the IBaseFigure interface to support direct edit of
+     * figure labels on the canvas.
+     */
+    public Rectangle getTextBounds() {
+        return label.getTextBounds();
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getText()
-	 */
-	public String getText() {
-		if (label == null)
-			return null;
-		return label.getText();
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#setIcon(org.eclipse.swt.graphics.Image)
+     */
+    public void setIcon(final Image image) {
+        getLabel().setIcon(image);
+    }
 
-	/*
-	 * CR374981: Long activity labels do not get wrapped or truncated This
-	 * method was added to the IBaseFigure interface to support direct edit of
-	 * figure labels on the canvas.
-	 */
-	public Rectangle getTextBounds() {
-		return label.getTextBounds();
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getIcon()
+     */
+    public Image getIcon() {
+        return getLabel().getIcon();
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#setIcon(org.eclipse.swt.graphics.Image)
-	 */
-	public void setIcon(Image image) {
-		getLabel().setIcon(image);
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#addDecorator(com.sybase.stf.gem.diagram.editor.figures.BaseFigureDecorator)
+     */
+    public void addDecorator(final BaseFigureDecorator decorator) {
+        final int pos = decorator.getPosition();
+        if (pos == BaseFigureDecorator.DEFAULT_DECORATOR_POSITION
+                || pos == PositionConstants.WEST
+                || pos == PositionConstants.LEFT) {
+            setTargetDecoration(decorator);
+        } else if (pos == PositionConstants.EAST
+                || pos == PositionConstants.RIGHT) {
+            setSourceDecoration(decorator);
+        }
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getIcon()
-	 */
-	public Image getIcon() {
-		return getLabel().getIcon();
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#removeDecorator()
+     */
+    public void removeDecorator() {
+        removeDecorator(BaseFigureDecorator.DEFAULT_DECORATOR_POSITION);
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#addDecorator(com.sybase.stf.gem.diagram.editor.figures.BaseFigureDecorator)
-	 */
-	public void addDecorator(BaseFigureDecorator decorator) {
-		int pos = decorator.getPosition();
-		if (pos == BaseFigureDecorator.DEFAULT_DECORATOR_POSITION
-				|| pos == PositionConstants.WEST
-				|| pos == PositionConstants.LEFT) {
-			setTargetDecoration(decorator);
-		} else if (pos == PositionConstants.EAST
-				|| pos == PositionConstants.RIGHT) {
-			setSourceDecoration(decorator);
-		}
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#removeDecorator(int)
+     */
+    public void removeDecorator(final int position) {
+        if (position == BaseFigureDecorator.DEFAULT_DECORATOR_POSITION)
+        {
+            setTargetDecoration(null);
+        }
+        else
+        {
+            setSourceDecoration(null);
+        }
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#removeDecorator()
-	 */
-	public void removeDecorator() {
-		removeDecorator(BaseFigureDecorator.DEFAULT_DECORATOR_POSITION);
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getDecorators()
+     */
+    public List getDecorators() {
+        final List list = new ArrayList(2);
+        Object d;
+        d = getSourceDecoration();
+        if (d != null)
+        {
+            list.add(d);
+        }
+        d = getTargetDecoration();
+        if (d != null)
+        {
+            list.add(d);
+        }
+        return list;
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#removeDecorator(int)
-	 */
-	public void removeDecorator(int position) {
-		if (position == BaseFigureDecorator.DEFAULT_DECORATOR_POSITION)
-			setTargetDecoration(null);
-		else
-			setSourceDecoration(null);
-	}
+    private LinkLabel getLabel() {
+        if (label == null) {
+            label = new LinkLabel();
+            add(label, new MidpointLocator(this, 0));
+        }
+        return label;
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getDecorators()
-	 */
-	public List getDecorators() {
-		List list = new ArrayList(2);
-		Object d;
-		d = getSourceDecoration();
-		if (d != null)
-			list.add(d);
-		d = getTargetDecoration();
-		if (d != null)
-			list.add(d);
-		return list;
-	}
+    @Override
+    public void setFont(final Font f) {
+        getLabel().setFont(f);
+    }
 
-	public LinkLabel getLabel() {
-		if (label == null) {
-			label = new LinkLabel();
-			add(label, new MidpointLocator(this, 0));
-		}
-		return label;
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.draw2d.Shape#setLineWidth(int)
+     */
+    @Override
+    public void setLineWidth(final int w) {
+        getLabel().setBorderWidth(w);
+        super.setLineWidth(w);
+    }
 
-	public void setLabelForeground(Color c) {
-		getLabel().setForegroundColor(c);
-	}
+    @Override
+    public void setForegroundColor(final Color c) {
+        getLabel().setBorderColor(c);
+        super.setForegroundColor(c);
+    }
 
-	public void setLabelBackground(Color c) {
-		getLabel().setBackgroundColor(c);
-	}
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.draw2d.Polyline#setPoints(org.eclipse.draw2d.geometry.PointList)
+     */
+    @Override
+    public void setPoints(final PointList points) {
+        super.setPoints(points);
+        if (label != null) {
+            int i = getPoints().size() / 2 - 1;
+            if (i < 0)
+            {
+                i = 0;
+            }
+            if (getLayoutManager() != null)
+            {
+                getLayoutManager().setConstraint(label,
+                        new MidpointLocator(this, i));
+            }
+        }
+    }
 
-	public void setFont(Font f) {
-		getLabel().setFont(f);
-	}
+    @Override
+    public Rectangle getBounds() {
+        if (bounds == null) {
+            if (bounds == null) {
+                bounds = getPoints().getBounds().getExpanded(lineWidth / 2,
+                        lineWidth / 2);
+            }
+            // CR382243: Clicking on the node icon selects the connection line
+            // rather than the node
+            // NOTE: expanding the bounds to include children (in this case,
+            // the Link labels) causes problems when the connection line becomes
+            // short (i.e., when the 2 anchor figures at each end of the
+            // connection are
+            // close together) because the bounds of this link figure will be
+            // greater
+            // than the actual length of the line. This causes the link figure
+            // to
+            // be hit-tested beyond its visual size.
+            if (getLabel().isVisible()) {
+                for (int i = 0; i < getChildren().size(); i++) {
+                    final IFigure child = (IFigure) getChildren().get(i);
+                    bounds.union(child.getBounds());
+                }
+            }
+        }
+        return bounds;
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.draw2d.Shape#setLineWidth(int)
-	 */
-	public void setLineWidth(int w) {
-		getLabel().setBorderWidth(w);
-		super.setLineWidth(w);
-	}
+    /*
+     * Helper class for line labels.
+     */
+    private static class LinkLabel extends Label {
+        LinkLabel() {
+            setBorder(new LineBorder());
+            setOpaque(true);
+            setForegroundColor(defaultLabelForeground);
+            setBackgroundColor(defaultLabelBackground);
+            setFont(defaultFont);
+            final LineBorder border_ = new LineBorder(defaultLineWidth);
+            setBorder(border_);
+            border_.setColor(defaultLineColor);
+            setVisible(defaultLabelVisible);
+        }
 
-	public void setForegroundColor(Color c) {
-		getLabel().setBorderColor(c);
-		super.setForegroundColor(c);
-	}
+        void setBorderWidth(final int w) {
+            ((LineBorder) getBorder()).setWidth(w);
+        }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.draw2d.Polyline#setPoints(org.eclipse.draw2d.geometry.PointList)
-	 */
-	public void setPoints(PointList points) {
-		// TODO Auto-generated method stub
-		super.setPoints(points);
-		if (label != null) {
-			int i = getPoints().size() / 2 - 1;
-			if (i < 0)
-				i = 0;
-			if (getLayoutManager() != null)
-				getLayoutManager().setConstraint(label,
-						new MidpointLocator(this, i));
-		}
-	}
+        void setBorderColor(final Color c) {
+            ((LineBorder) getBorder()).setColor(c);
+        }
 
-	public Rectangle getBounds() {
-		if (bounds == null) {
-			if (bounds == null) {
-				bounds = getPoints().getBounds().getExpanded(lineWidth / 2,
-						lineWidth / 2);
-			}
-			// CR382243: Clicking on the node icon selects the connection line
-			// rather than the node
-			// NOTE: expanding the bounds to include children (in this case,
-			// the Link labels) causes problems when the connection line becomes
-			// short (i.e., when the 2 anchor figures at each end of the
-			// connection are
-			// close together) because the bounds of this link figure will be
-			// greater
-			// than the actual length of the line. This causes the link figure
-			// to
-			// be hit-tested beyond its visual size.
-			if (getLabel().isVisible()) {
-				for (int i = 0; i < getChildren().size(); i++) {
-					IFigure child = (IFigure) getChildren().get(i);
-					bounds.union(child.getBounds());
-				}
-			}
-		}
-		return bounds;
-	}
-
-	/*
-	 * Helper class for line labels.
-	 */
-	public class LinkLabel extends Label {
-		public LinkLabel() {
-			setBorder(new LineBorder());
-			setOpaque(true);
-			setForegroundColor(defaultLabelForeground);
-			setBackgroundColor(defaultLabelBackground);
-			setFont(defaultFont);
-			LineBorder border_ = new LineBorder(defaultLineWidth);
-			setBorder(border_);
-			border_.setColor(defaultLineColor);
-			setVisible(defaultLabelVisible);
-		}
-
-		public void setBorderWidth(int w) {
-			((LineBorder) getBorder()).setWidth(w);
-		}
-
-		public void setBorderColor(Color c) {
-			((LineBorder) getBorder()).setColor(c);
-		}
-
-		protected boolean useLocalCoordinates() {
-			return false;
-		}
-	}
+        @Override
+        protected boolean useLocalCoordinates() {
+            return false;
+        }
+    }
 }
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ObserveVisibleXYLayout.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ObserveVisibleXYLayout.java
index 70b72e2..bee006f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ObserveVisibleXYLayout.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/ObserveVisibleXYLayout.java
@@ -33,7 +33,7 @@
  * 
  * @see org.eclipse.draw2d.AbstractLayout#isObservingVisibility()
  */
-public class ObserveVisibleXYLayout extends FreeformLayout {
+/*package*/ class ObserveVisibleXYLayout extends FreeformLayout {
 	protected Dimension calculatePreferredSize(IFigure f, int wHint, int hHint) {
 		Rectangle rect = new Rectangle();
 		ListIterator children = f.getChildren().listIterator();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/OutputPortFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/OutputPortFigure.java
index e6ef854..49d9201 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/OutputPortFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/OutputPortFigure.java
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PortConnectionAnchor.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PortConnectionAnchor.java
index 02ef0f4..f81c507 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PortConnectionAnchor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PortConnectionAnchor.java
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PortFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PortFigure.java
index 3444ffb..f992902 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PortFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PortFigure.java
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PreferenceMessages.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PreferenceMessages.java
index 2d7f252..4626c4a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PreferenceMessages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PreferenceMessages.java
@@ -19,7 +19,7 @@
  * The NLS message manager for PreferenceMessages
  * 
  */
-public final class PreferenceMessages extends NLS {
+/*package*/ final class PreferenceMessages extends NLS {
 
 	private static final String BUNDLE_NAME = "org.eclipse.jst.jsf.facesconfig.ui.preference.PreferenceMessages";
 
@@ -197,6 +197,9 @@
      */
     public static String EditorPreferences_LABEL_ShowIntroEditor;
 
+	/**
+	 * see PreferenceMessages.properties
+	 */
 	public static String GEMPreferences_description;
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PrintedPageLayer.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PrintedPageLayer.java
index 5bd3f1c..4b79429 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PrintedPageLayer.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/PrintedPageLayer.java
@@ -33,12 +33,12 @@
  * The reason this needs to be added to the printable layers is so that it will
  * show up in the content outline viewer.
  */
-public class PrintedPageLayer extends FreeformLayer {
+/*package*/ class PrintedPageLayer extends FreeformLayer {
 	// our layer name
-	public static final String PRINTED_PAGE_LAYER = "Printed Page";
+	static final String PRINTED_PAGE_LAYER = "Printed Page";
 
 	// the size of the page tiles (this should be the printer's resolution)
-	protected Dimension pageSize = new Dimension(850, 1100);
+	private Dimension pageSize = new Dimension(850, 1100);
 
 	// the WindowFigure that owns this layer
 	private final WindowFigure host;
@@ -49,7 +49,7 @@
 
 	// A simple page outline figure. We can get fancy later with turned-up
 	// dogears, page numbers, titles and whatnot...
-	class PrintedPageFigure extends RectangleFigure {
+	static class PrintedPageFigure extends RectangleFigure {
 		PrintedPageFigure() {
 			super();
 			setFill(false);
@@ -58,11 +58,19 @@
 		}
 	}
 
+	/**
+	 * @param figure
+	 */
 	public PrintedPageLayer(WindowFigure figure) {
 		super();
 		this.host = figure;
 	}
 
+	/**
+	 * @param x
+	 * @param y
+	 * @return the print page figure
+	 */
 	protected PrintedPageFigure createPage(int x, int y) {
 		PrintedPageFigure page = new PrintedPageFigure();
 		page.setBounds(new Rectangle(x, y, pageSize.width, pageSize.height));
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/RectangleList.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/RectangleList.java
index 068c89f..03aadbb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/RectangleList.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/RectangleList.java
@@ -13,23 +13,32 @@
 package org.eclipse.jst.jsf.facesconfig.ui.preference;
 
 import java.util.ArrayList;
-import java.util.List;
 
-import org.eclipse.draw2d.Figure;
 import org.eclipse.draw2d.geometry.Rectangle;
 
-public class RectangleList extends Figure {
-	protected List rectangles = new ArrayList();
+/**
+ * A List<Rectangle> implementation with a coordinate-based
+ * convenience method for adding rectangles.
+ *
+ */
+class RectangleList extends ArrayList<Rectangle>
+{
+	private static final long serialVersionUID = -4088355285820327890L;
 
+	/**
+	 * Default constructor
+	 */
 	public RectangleList() {
-        // ??
+		super();
 	}
 
+	/**
+	 * @param x1
+	 * @param y1
+	 * @param x2
+	 * @param y2
+	 */
 	public void addRectangle(int x1, int y1, int x2, int y2) {
-		rectangles.add(new Rectangle(x1, y1, x2 - x1, y2 - y1));
-	}
-
-	public List getRectangles() {
-		return rectangles;
+		add(new Rectangle(x1, y1, x2 - x1, y2 - y1));
 	}
 }
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TabbedTitleBarBorder.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TabbedTitleBarBorder.java
index 8111427..2a751ad 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TabbedTitleBarBorder.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TabbedTitleBarBorder.java
@@ -33,7 +33,11 @@
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.widgets.Composite;
 
-public class TabbedTitleBarBorder extends SchemeBorder {
+/**
+ * A border for the tabbed title bar
+ *
+ */
+/*package*/ class TabbedTitleBarBorder extends SchemeBorder {
 	// private int state = CompoundFigureListener.RESTORED;
 
 	private IFigure parent;
@@ -59,6 +63,7 @@
 
 	/**
 	 * Constructs a TitleBarBorder with its label set to the name of this class.
+	 * @param parent 
 	 * 
 	 * @since 2.0
 	 */
@@ -101,17 +106,28 @@
 		});
 	}
 
+	/**
+	 * @return the tab list
+	 */
 	protected List getTabList() {
 		if (tabList == null)
 			tabList = new ArrayList();
 		return tabList;
 	}
 
+	/**
+	 * Add a new tab with the text
+	 * @param text
+	 * @return the previous number of tabs
+	 */
 	public int addTab(String text) {
 		getTabList().add(new Tab(text));
 		return getTabList().size() - 1;
 	}
 
+	/**
+	 * @param index
+	 */
 	public void removeTab(int index) {
 		if (index >= 0 && index < getTabList().size()) {
 			tabList.remove(index);
@@ -121,6 +137,9 @@
 		}
 	}
 
+	/**
+	 * @param newIndex
+	 */
 	public void setCurrentTab(int newIndex) {
 		if (newIndex >= 0 && newIndex < getTabList().size()) {
 			Tab newTab = (Tab) tabList.get(newIndex);
@@ -143,36 +162,61 @@
 		}
 	}
 
+	/**
+	 * @return the index of the current tab
+	 */
 	public int getCurrentTab() {
 		return currentTab;
 	}
 
+	/**
+	 * @param index
+	 * @return the contents object of the tab at index
+	 * or null if  index is out of range
+	 */
 	public Object getContents(int index) {
 		if (index >= 0 && index < getTabList().size())
 			return ((Tab) tabList.get(index)).getContents();
 		return null;
 	}
 
+	/**
+	 * @param index
+	 * @param contents
+	 */
 	public void setContents(int index, Object contents) {
 		if (index >= 0 && index < getTabList().size())
 			((Tab) tabList.get(index)).setContents(contents);
 	}
 
+	/**
+	 * @param listener
+	 */
 	public void addTabbedWindowListener(WindowFigureListener listener) {
 		if (listenerList == null)
 			listenerList = new ListenerList(ListenerList.IDENTITY);
 		listenerList.add(listener);
 	}
 
+	/**
+	 * @param listener
+	 */
 	public void removeTabbedWindowListener(WindowFigureListener listener) {
 		if (listenerList != null)
 			listenerList.remove(listener);
 	}
 
+	/**
+	 * @return the listeners
+	 */
 	public Object[] getListeners() {
 		return listenerList.getListeners();
 	}
 
+	/**
+	 * @param oldIndex
+	 * @param newIndex
+	 */
 	protected void fireTabChanged(int oldIndex, int newIndex) {
 		Object l[] = listenerList.getListeners();
 		for (int i = 0; i < l.length; ++i) {
@@ -210,54 +254,92 @@
 		return insets;
 	}
 
+	/**
+	 * @param c
+	 */
 	public void setTextColor(Color c) {
 		textColor = c;
 	}
 
+	/**
+	 * @return the text color
+	 */
 	public Color getTextColor() {
 		return textColor;
 	}
 
+	/**
+	 * @param c
+	 */
 	public void setBackgroundColor(Color c) {
 		bgColor = c;
 	}
 
+	/**
+	 * @return the background color
+	 */
 	public Color getBackgroundColor() {
 		return bgColor;
 	}
 
+	/**
+	 * @param p
+	 */
 	public void setPadding(Insets p) {
 		padding = p;
 		invalidate();
 	}
 
+	/**
+	 * @return the padding insets
+	 */
 	public Insets getPadding() {
 		return padding;
 	}
 
+	/**
+	 * @param text
+	 */
 	public void setLabel(String text) {
 		setLabel(currentTab, text);
 	}
 
+	/**
+	 * @param index
+	 * @param text
+	 */
 	public void setLabel(int index, String text) {
 		if (index >= 0 && index < getTabList().size())
 			((Tab) tabList.get(index)).setLabel(text);
 	}
 
+	/**
+	 * @return the label
+	 */
 	public String getLabel() {
 		return getLabel(currentTab);
 	}
 
+	/**
+	 * @param index
+	 * @return the label
+	 */
 	public String getLabel(int index) {
 		if (index >= 0 && index < getTabList().size())
 			return ((Tab) tabList.get(index)).getLabel();
 		return "";
 	}
 
+	/**
+	 * @return the parent figureb
+	 */
 	public IFigure getParent() {
 		return parent;
 	}
 
+	/**
+	 * validate each of the tabs
+	 */
 	public void invalidate() {
 		insets = null;
 		for (int i = 0; i < getTabList().size(); ++i) {
@@ -266,6 +348,10 @@
 		}
 	}
 
+	/**
+	 * @param f
+	 * @return the text extends
+	 */
 	public Dimension getTextExtents(IFigure f) {
 		Dimension d = new Dimension(0, 0);
 		for (int i = 0; i < getTabList().size(); ++i) {
@@ -350,6 +436,11 @@
 		g.setBackgroundColor(getBackgroundColor());
 	}
 
+	/**
+	 * @param wHint
+	 * @param hHint
+	 * @return the minimum size
+	 */
 	public Dimension getMinimumSize(int wHint, int hHint) {
 		Dimension d = getTextExtents(parent);
 		getInsets(parent);
@@ -368,30 +459,51 @@
 
 		private boolean active;
 
+		/**
+		 * @param text
+		 */
 		public Tab(String text) {
 			this.label = text;
 		}
 
+		/**
+		 * @param contents
+		 */
 		public void setContents(Object contents) {
 			this.contents = contents;
 		}
 
+		/**
+		 * @return the contents
+		 */
 		public Object getContents() {
 			return contents;
 		}
 
+		/**
+		 * @param active
+		 */
 		public void setActive(boolean active) {
 			this.active = active;
 		}
 
+		/**
+		 * @return the active state
+		 */
 		public boolean isActive() {
 			return active;
 		}
 
+		/**
+		 * @return the label
+		 */
 		public String getLabel() {
 			return label;
 		}
 
+		/**
+		 * @param text
+		 */
 		public void setLabel(String text) {
 			if (text == null)
 				this.label = "";
@@ -400,6 +512,9 @@
 			textExtents = null;
 		}
 
+		/**
+		 * @return the text extents
+		 */
 		public Dimension calculateTextExtents() {
 			textExtents = FigureUtilities.getTextExtents(label == null ? "W"
 					: label, getFont());
@@ -408,16 +523,29 @@
 			return textExtents;
 		}
 
+		/**
+		 * @return the text extents.  A copy is returned based on what
+		 * is cached internall by calculateTextExtents
+		 */
 		public Dimension getTextExtents() {
 			if (textExtents == null)
 				calculateTextExtents();
 			return textExtents.getCopy();
 		}
 
+		/**
+		 * 
+		 */
 		public void invalidate() {
 			textExtents = null;
 		}
 
+		/**
+		 * @param g
+		 * @param f
+		 * @param x
+		 * @param y
+		 */
 		public void paint(Graphics g, IFigure f, int x, int y) {
 			if (contents instanceof Composite) {
 				return;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TabbedWindowBorder.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TabbedWindowBorder.java
index 9e8ce13..6d41870 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TabbedWindowBorder.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TabbedWindowBorder.java
@@ -23,162 +23,230 @@
 import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.widgets.Composite;
 
-public class TabbedWindowBorder extends FrameBorder {
-	private boolean isVisible = true;
+/**
+ * A frame border for a tabbed window
+ * 
+ */
+/* package */final class TabbedWindowBorder extends FrameBorder
+{
+    private boolean isVisible = true;
 
-	// CR392586: resource leaks
-	private static MySchemeBorder normalBorder = new MySchemeBorder(
-			new MySchemeBorder.MyScheme(
-					new Color[] { ColorConstants.button,
-							ColorConstants.buttonLightest,
-							ColorConstants.button },
-					new Color[] { ColorConstants.buttonDarkest,
-							ColorConstants.buttonDarker, ColorConstants.button }));
+    // CR392586: resource leaks
+    private static MySchemeBorder normalBorder = new MySchemeBorder(
+            new MySchemeBorder.MyScheme(new Color[]
+                                                  { ColorConstants.button, ColorConstants.buttonLightest,
+                    ColorConstants.button }, new Color[]
+                                                       { ColorConstants.buttonDarkest, ColorConstants.buttonDarker,
+                    ColorConstants.button }));
 
-	// CR392586: resource leaks
-	private static MySchemeBorder highlightBorder = new MySchemeBorder(
-			new MySchemeBorder.MyScheme(new Color[] {
-					FigureUtilities.lighter(ColorConstants.titleBackground),
-					ColorConstants.titleBackground,
-					FigureUtilities.darker(ColorConstants.titleBackground) },
-					new Color[] {
-							FigureUtilities
-									.darker(ColorConstants.titleGradient),
-							ColorConstants.titleGradient,
-							FigureUtilities
-									.lighter(ColorConstants.titleGradient) }));
+    // CR392586: resource leaks
+    private static MySchemeBorder highlightBorder = new MySchemeBorder(
+            new MySchemeBorder.MyScheme(new Color[]
+                                                  { FigureUtilities.lighter(ColorConstants.titleBackground),
+                    ColorConstants.titleBackground,
+                    FigureUtilities.darker(ColorConstants.titleBackground) },
+                    new Color[]
+                              {
+                    FigureUtilities
+                    .darker(ColorConstants.titleGradient),
+                    ColorConstants.titleGradient,
+                    FigureUtilities
+                    .lighter(ColorConstants.titleGradient) }));
 
-	public static class MySchemeBorder extends SchemeBorder {
-		public static class MyScheme extends SchemeBorder.Scheme {
-			public MyScheme(Color[] highlight, Color[] shadow) {
-				super(highlight, shadow);
-			}
+    /**
+     * A border scheme
+     * 
+     */
+    private static class MySchemeBorder extends SchemeBorder
+    {
+        private static class MyScheme extends SchemeBorder.Scheme
+        {
+            /**
+             * @param highlight
+             * @param shadow
+             */
+            public MyScheme(final Color[] highlight, final Color[] shadow)
+            {
+                super(highlight, shadow);
+            }
 
-			public Color[] getHighlight() {
-				return super.getHighlight();
-			}
+            @Override
+            public Color[] getHighlight()
+            {
+                return super.getHighlight();
+            }
 
-			public Color[] getShadow() {
-				return super.getHighlight();
-			}
-		}
+            @Override
+            public Color[] getShadow()
+            {
+                return super.getHighlight();
+            }
+        }
 
-		MySchemeBorder(MyScheme scheme) {
-			super(scheme);
-		}
+        MySchemeBorder(final MyScheme scheme)
+        {
+            super(scheme);
+        }
 
-		public MyScheme getMyScheme() {
-			return (MyScheme) super.getScheme();
-		}
+        /**
+         * @return the scheme
+         */
+        public MyScheme getMyScheme()
+        {
+            return (MyScheme) super.getScheme();
+        }
 
-		/**
-		 * @see org.eclipse.draw2d.Border#paint(IFigure, Graphics, Insets)
-		 */
-		public void paint(Composite comp, GC gc, Insets insets) {
-			Color[] tl = getMyScheme().getHighlight();
-			Color[] br = getMyScheme().getShadow();
-			paint(comp, gc, insets, tl, br);
-		}
+        /**
+         * @see org.eclipse.draw2d.Border#paint(IFigure, Graphics, Insets)
+         * @param comp
+         * @param gc
+         * @param insets
+         */
+        public void paint(final Composite comp, final GC gc, final Insets insets)
+        {
+            final Color[] tl = getMyScheme().getHighlight();
+            final Color[] br = getMyScheme().getShadow();
+            paint(comp, gc, insets, tl, br);
+        }
 
-		/**
-		 * Paints the border using the information in the set Scheme and the
-		 * inputs given. Side widths are determined by the number of colors in
-		 * the Scheme for each side.
-		 * @param comp 
-		 *            the composit whose rect should be used for the inset bounds
-		 * @param gc
-		 *            the graphics object
-		 * @param insets
-		 *            the insets
-		 * @param tl
-		 *            the highlight (top/left) colors
-		 * @param br
-		 *            the shadow (bottom/right) colors
-		 */
-		protected void paint(Composite comp, GC gc, Insets insets, Color[] tl,
-				Color[] br) {
-			org.eclipse.swt.graphics.Rectangle rect = comp.getBounds();
+        /**
+         * Paints the border using the information in the set Scheme and the
+         * inputs given. Side widths are determined by the number of colors in
+         * the Scheme for each side.
+         * 
+         * @param comp
+         *            the composit whose rect should be used for the inset
+         *            bounds
+         * @param gc
+         *            the graphics object
+         * @param insets
+         *            the insets
+         * @param tl
+         *            the highlight (top/left) colors
+         * @param br
+         *            the shadow (bottom/right) colors
+         */
+        protected void paint(final Composite comp, final GC gc, final Insets insets, final Color[] tl,
+                final Color[] br)
+        {
+            final org.eclipse.swt.graphics.Rectangle rect = comp.getBounds();
 
-			gc.setLineWidth(1);
-			gc.setLineStyle(SWT.LINE_SOLID);
-			// TODO: deprecated with no obvious replacement: 
-			gc.setXORMode(false);
+            gc.setLineWidth(1);
+            gc.setLineStyle(SWT.LINE_SOLID);
 
-			int top = rect.y - insets.top;
-			int left = rect.x - insets.left;
-			int bottom = rect.y + rect.height + insets.bottom;
-			int right = rect.x + rect.width + insets.right;
-			gc.setClipping(new org.eclipse.swt.graphics.Rectangle(left, top,
-					right - left, bottom - top));
+            final int top = rect.y - insets.top;
+            final int left = rect.x - insets.left;
+            int bottom = rect.y + rect.height + insets.bottom;
+            int right = rect.x + rect.width + insets.right;
+            gc.setClipping(new org.eclipse.swt.graphics.Rectangle(left, top,
+                    right - left, bottom - top));
 
-			Color color = ColorConstants.red;
-			gc.setForeground(color);
-			gc.drawLine(left, top, right, bottom);
+            final Color color = ColorConstants.red;
+            gc.setForeground(color);
+            gc.drawLine(left, top, right, bottom);
 
-			for (int i = 0; i < br.length; i++) {
-				// color = br[i];
-				gc.setForeground(color);
-				gc.drawLine(right - i, bottom - i, right - i, top + i);
-				gc.drawLine(right - i, bottom - i, left + i, bottom - i);
-			}
+            for (int i = 0; i < br.length; i++)
+            {
+                // color = br[i];
+                gc.setForeground(color);
+                gc.drawLine(right - i, bottom - i, right - i, top + i);
+                gc.drawLine(right - i, bottom - i, left + i, bottom - i);
+            }
 
-			right--;
-			bottom--;
+            right--;
+            bottom--;
 
-			for (int i = 0; i < tl.length; i++) {
-				// color = tl[i];
-				gc.setForeground(color);
-				gc.drawLine(left + i, top + i, right - i, top + i);
-				gc.drawLine(left + i, top + i, left + i, bottom - i);
-			}
-			color.dispose();
-		}
-	}
+            for (int i = 0; i < tl.length; i++)
+            {
+                // color = tl[i];
+                gc.setForeground(color);
+                gc.drawLine(left + i, top + i, right - i, top + i);
+                gc.drawLine(left + i, top + i, left + i, bottom - i);
+            }
+            color.dispose();
+        }
+    }
 
-	public TabbedWindowBorder(IFigure parent) {
-		// apparently paint() gets called before createBorders() has had
-		// a chance to create the borders, so we just create them here
-		inner = new TabbedTitleBarBorder(parent);
-		outer = normalBorder;
-	}
+    /**
+     * @param parent
+     */
+    public TabbedWindowBorder(final IFigure parent)
+    {
+        // apparently paint() gets called before createBorders() has had
+        // a chance to create the borders, so we just create them here
+        inner = new TabbedTitleBarBorder(parent);
+        outer = normalBorder;
+    }
 
-	public void setVisible(boolean flag) {
-		if (isVisible != flag) {
-			isVisible = flag;
-			((TabbedTitleBarBorder) inner).setVisible(flag);
-			if (flag)
-				((TabbedTitleBarBorder) inner).getParent().repaint();
-		}
-	}
+    /**
+     * @param flag
+     */
+    public void setVisible(final boolean flag)
+    {
+        if (isVisible != flag)
+        {
+            isVisible = flag;
+            ((TabbedTitleBarBorder) inner).setVisible(flag);
+            if (flag)
+            {
+                ((TabbedTitleBarBorder) inner).getParent().repaint();
+            }
+        }
+    }
 
-	public void setHighlight(boolean flag) {
-		if (flag)
-			outer = highlightBorder;
-		else
-			outer = normalBorder;
-		((TabbedTitleBarBorder) inner).getParent().repaint();
-	}
+    /**
+     * @param flag
+     */
+    public void setHighlight(final boolean flag)
+    {
+        if (flag)
+        {
+            outer = highlightBorder;
+        }
+        else
+        {
+            outer = normalBorder;
+        }
+        ((TabbedTitleBarBorder) inner).getParent().repaint();
+    }
 
-	protected void createBorders() {
+    @Override
+    protected void createBorders()
+    {
         // TODO: NOTE: this is overriding default border creation
-	}
+    }
 
-	public void paint(IFigure figure, Graphics g, Insets insets) {
-		if (isVisible) {
-			if (comp != null) {
-				GC gc = new GC(comp);
-				paint(comp, gc, insets);
-				gc.dispose();
-			} else
-				super.paint(figure, g, insets);
-		}
-	}
+    @Override
+    public void paint(final IFigure figure, final Graphics g, final Insets insets)
+    {
+        if (isVisible)
+        {
+            if (comp != null)
+            {
+                final GC gc = new GC(comp);
+                paint(comp, gc, insets);
+                gc.dispose();
+            }
+            else
+            {
+                super.paint(figure, g, insets);
+            }
+        }
+    }
 
-	private Composite comp;
+    private Composite comp;
 
-	public void paint(Composite comp_, GC gc, Insets insets) {
-		this.comp = comp_;
-		if (isVisible)
-			((MySchemeBorder) outer).paint(comp_, gc, insets);
-	}
+    /**
+     * @param comp_
+     * @param gc
+     * @param insets
+     */
+    public void paint(final Composite comp_, final GC gc, final Insets insets)
+    {
+        this.comp = comp_;
+        if (isVisible)
+        {
+            ((MySchemeBorder) outer).paint(comp_, gc, insets);
+        }
+    }
 }
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TitleBarButton.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TitleBarButton.java
index a30063e..1496ca4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TitleBarButton.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/TitleBarButton.java
@@ -28,27 +28,35 @@
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.swt.graphics.Image;
 
-public class TitleBarButton extends Button {
-	boolean state = false;
+/**
+ * A title bar button
+ *
+ */
+/*package*/ final class TitleBarButton extends Button {
+	private boolean state = false;
 
-	Image uncheckedImage;
+	private Image uncheckedImage;
 
-	Image checkedImage;
+	private Image checkedImage;
 
-	Image uncheckedHiliteImage;
+	private Image uncheckedHiliteImage;
 
-	Image checkedHiliteImage;
+	private Image checkedHiliteImage;
 
-	RectangleList uncheckedRects;
+	private RectangleList uncheckedRects;
 
-	RectangleList checkedRects;
+	private RectangleList checkedRects;
 
-	boolean hilite = false;
+	private boolean hilite = false;
 
-	public TitleBarButton(Image image) {
-		this(image, null, null, null);
-	}
 
+
+	/**
+	 * @param unchecked
+	 * @param uncheckedHilite
+	 * @param checked
+	 * @param checkedHilite
+	 */
 	public TitleBarButton(Image unchecked, Image uncheckedHilite,
 			Image checked, Image checkedHilite) {
 		super();
@@ -68,12 +76,19 @@
 		initialize();
 	}
 
+	/**
+	 * @param rects
+	 */
 	public TitleBarButton(RectangleList rects) {
 		super();
 		uncheckedRects = rects;
 		initialize();
 	}
 
+	/**
+	 * @param unchecked
+	 * @param checked
+	 */
 	public TitleBarButton(RectangleList unchecked, RectangleList checked) {
 		super();
 		uncheckedRects = unchecked;
@@ -81,10 +96,16 @@
 		initialize();
 	}
 
+	/**
+	 * @return the state
+	 */
 	public boolean getState() {
 		return state;
 	}
 
+	/**
+	 * @param newState
+	 */
 	public void setState(boolean newState) {
 		state = newState;
 		hilite = false;
@@ -143,22 +164,25 @@
 		});
 	}
 
+	/**
+	 * @return the preferred size dimensions
+	 */
 	public Dimension calculatePreferredSize() {
 		if (prefSize == null) {
 			Rectangle rect = new Rectangle(0, 0, 0, 0);
 			if (uncheckedRects != null) {
-				Iterator iter = uncheckedRects.getRectangles().iterator();
+				Iterator<Rectangle> iter = uncheckedRects.iterator();
 				while (iter.hasNext()) {
 					/*Point p =*/ getLocation();
-					Rectangle r = ((Rectangle) iter.next()).getCopy();
+					Rectangle r = iter.next().getCopy();
 					rect = rect.getUnion(r);
 				}
 			}
 			if (checkedRects != null) {
-				Iterator iter = checkedRects.getRectangles().iterator();
+				Iterator<Rectangle> iter = checkedRects.iterator();
 				while (iter.hasNext()) {
 					/*Point p =*/ getLocation();
-					Rectangle r = ((Rectangle) iter.next()).getCopy();
+					Rectangle r = iter.next().getCopy();
 					rect = rect.getUnion(r);
 				}
 			}
@@ -194,14 +218,14 @@
 					graphics.drawImage(checkedImage, getLocation());
 			}
 		} else {
-			Iterator iter = null;
+			Iterator<Rectangle> iter = null;
 			if (state == false)
-				iter = uncheckedRects.getRectangles().iterator();
+				iter = uncheckedRects.iterator();
 			else
-				iter = checkedRects.getRectangles().iterator();
+				iter = checkedRects.iterator();
 			while (iter.hasNext()) {
 				Point p = getLocation();
-				Rectangle r = ((Rectangle) iter.next()).getCopy();
+				Rectangle r = iter.next().getCopy();
 				r = r.translate(p.x, p.y);
 				graphics.setForegroundColor(getForegroundColor());
 				if (hilite)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFigure.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFigure.java
index 57e6062..d382875 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFigure.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFigure.java
@@ -15,8 +15,6 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.draw2d.AncestorListener;
 import org.eclipse.draw2d.ColorConstants;
 import org.eclipse.draw2d.ConnectionLayer;
@@ -39,13 +37,16 @@
 import org.eclipse.gef.editparts.GridLayer;
 import org.eclipse.gef.editparts.GuideLayer;
 import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 
-public class WindowFigure extends ScrollPane implements IContainerFigure,
+/**
+ * A ScollPane used as figure container
+ *
+ */
+/*package*/ class WindowFigure extends ScrollPane implements IContainerFigure,
 		LayerConstants, FreeformFigure {
 	private TabbedWindowBorder windowBorder;
 
@@ -63,32 +64,31 @@
 
 	private FreeformLayer primaryLayer;
 
-	public static Font defaultFont = JFaceResources.getFontRegistry().get(
+	private final static Font defaultFont = JFaceResources.getFontRegistry().get(
 			JFaceResources.DEFAULT_FONT);
 
-	public static Color defaultForegroundColor = ColorConstants.black;
+	private final static Color defaultForegroundColor = ColorConstants.black;
 
-	public static Color defaultBackgroundColor = ColorConstants.white;
+	private final static Color defaultBackgroundColor = ColorConstants.white;
 
-	public static Color defaultGridColor = ColorConstants.lightGray;
+	private final static Color defaultGridColor = ColorConstants.lightGray;
 
-	public static Dimension defaultGridSpacing = null;
+	private final static Dimension defaultGridSpacing = null;
 
-	public static boolean defaultGridEnabled = false;
+	private final static boolean defaultGridEnabled = false;
 
 	// Line Routing is not used within the WindowFigure class; it just serves as
 	// a storage
 	// location for communicating between the GEMPreferences and EditParts that
 	// actually
 	// create the line routers.
-	public static int LINE_ROUTING_MANUAL = 0;
+	private final static int LINE_ROUTING_MANUAL = 0;
 
-	public static int LINE_ROUTING_MANHATTAN = 1;
-
-	public static int defaultLineRoutingStyle = LINE_ROUTING_MANUAL;
+	// TODO: should this really be static?
+	private static int defaultLineRoutingStyle = LINE_ROUTING_MANUAL;
 
 	private class MyGridLayer extends GridLayer {
-		public Point getOrigin() {
+		Point getOrigin() {
 			return origin.getCopy();
 		}
 	}
@@ -99,6 +99,9 @@
 		}
 	}
 
+	/**
+	 * Default constructor
+	 */
 	public WindowFigure() {
 		super();
 
@@ -144,13 +147,7 @@
 			}
 
 			public void ancestorRemoved(IFigure ancestor) {
-				// TODO: fix this - shouldn't be throwing an exception
-				try {
-					setVisible(false);
-				} catch (Exception e) {
-                    EditorPlugin.getDefault().getLog().log(
-                       new Status(IStatus.ERROR, EditorPlugin.getPluginId(), 0, "Error setting visible", e));
-				}
+				setVisible(false);
 			}
 		});
 	}
@@ -159,6 +156,9 @@
 	// Layer management
 	// //////////////////////////////////////////////////////////////////////////
 
+	/**
+	 * @param layeredPane
+	 */
 	protected void createLayers(LayeredPane layeredPane) {
 		layeredPane.add(getScaledLayers(), SCALABLE_LAYERS);
 		layeredPane.add(new FreeformLayer(), HANDLE_LAYER);
@@ -169,6 +169,9 @@
 		layeredPane.add(new GuideLayer(), GUIDE_LAYER);
 	}
 
+	/**
+	 * @return the pane
+	 */
 	protected ScalableFreeformLayeredPane createScaledLayers() {
 		ScalableFreeformLayeredPane layers = new ScalableFreeformLayeredPane();
 		layers.add(createGridLayer(), GRID_LAYER);
@@ -180,12 +183,18 @@
 		return layers;
 	}
 
+	/**
+	 * @return layered pane
+	 */
 	protected LayeredPane getScaledLayers() {
 		if (scaledLayers == null)
 			scaledLayers = createScaledLayers();
 		return scaledLayers;
 	}
 
+	/**
+	 * @return layered pane
+	 */
 	protected LayeredPane createPrintableLayers() {
 		FreeformLayeredPane layeredPane = new FreeformLayeredPane();
 
@@ -210,16 +219,25 @@
 		return layeredPane;
 	}
 
+	/**
+	 * @return the layered pane
+	 */
 	protected LayeredPane getPrintableLayers() {
 		if (printableLayers == null)
 			printableLayers = createPrintableLayers();
 		return printableLayers;
 	}
 
+	/**
+	 * @return the grid layer
+	 */
 	protected GridLayer createGridLayer() {
 		return new MyGridLayer();
 	}
 
+	/**
+	 * @return the grid layer
+	 */
 	public GridLayer getGridLayer() {
 		return (GridLayer) getLayer(GRID_LAYER);
 	}
@@ -246,24 +264,39 @@
 	// Properties
 	// //////////////////////////////////////////////////////////////////////////
 
+	/**
+	 * @return the scroll position
+	 */
 	public Point getScrollPosition() {
 		int x = getHorizontalScrollBar().getRangeModel().getValue();
 		int y = getVerticalScrollBar().getRangeModel().getValue();
 		return new Point(x, y);
 	}
 
+	/**
+	 * @return the border
+	 */
 	public TabbedTitleBarBorder getTabbedTitleBarBorder() {
 		return titleBarBorder;
 	}
 
+	/**
+	 * @return the border
+	 */
 	public TabbedWindowBorder getTabbedWindowBorder() {
 		return windowBorder;
 	}
 
+	/**
+	 * @param listener
+	 */
 	public void addTabbedWindowListener(WindowFigureListener listener) {
 		titleBarBorder.addTabbedWindowListener(listener);
 	}
 
+	/**
+	 * @param listener
+	 */
 	public void removeTabbedWindowListener(WindowFigureListener listener) {
 		titleBarBorder.removeTabbedWindowListener(listener);
 	}
@@ -274,10 +307,17 @@
 		return d;
 	}
 
+	/**
+	 * @param s
+	 * @return the previous number of tabs
+	 */
 	public int addTab(String s) {
 		return titleBarBorder.addTab(s);
 	}
 
+	/**
+	 * @param index
+	 */
 	public void removeTab(int index) {
 		titleBarBorder.removeTab(index);
 		internalSetCurrentTab(titleBarBorder.getCurrentTab());
@@ -289,11 +329,17 @@
 		// setContents((IFigure) contents);
 	}
 
+	/**
+	 * @param index
+	 */
 	public void setCurrentTab(int index) {
 		internalSetCurrentTab(index);
 		titleBarBorder.setCurrentTab(index);
 	}
 
+	/**
+	 * @return the current tab index
+	 */
 	public int getCurrentTab() {
 		return titleBarBorder.getCurrentTab();
 	}
@@ -303,12 +349,20 @@
 		super.setContents(figure);
 	}
 
+	/**
+	 * @param index
+	 * @param contents
+	 */
 	public void setContents(int index, Object contents) {
 		if (contents instanceof IFigure)
 			setContents((IFigure) contents);
 		titleBarBorder.setContents(index, contents);
 	}
 
+	/**
+	 * @param index
+	 * @return the content object of the index
+	 */
 	public Object getContents(int index) {
 		return titleBarBorder.getContents(index);
 	}
@@ -334,11 +388,17 @@
 		titleBarBorder.setTextColor(c);
 	}
 
+	/**
+	 * @param style
+	 */
 	public void setLineRoutingStyle(int style) {
 		defaultLineRoutingStyle = style;
 		revalidate();
 	}
 
+	/**
+	 * @return the line routing style
+	 */
 	public int getLineRoutingStyle() {
 		return defaultLineRoutingStyle;
 	}
@@ -414,16 +474,6 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see com.sybase.stf.gem.diagram.editor.figures.basic.ITabbedWindow#setName(int,
-	 *      java.lang.String)
-	 */
-	public void setText(int index, String name) {
-		titleBarBorder.setLabel(index, name);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
 	 * @see com.sybase.stf.gem.diagram.editor.figures.IBaseFigure#getText()
 	 */
 	public String getText() {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFigureListener.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFigureListener.java
index 0a6d4b1..e263904 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFigureListener.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFigureListener.java
@@ -18,6 +18,10 @@
  * Defines an interface for notifying listeners of page switches on a tabbed
  * window figure.
  */
-public interface WindowFigureListener {
+/*package*/ interface WindowFigureListener {
+	/**
+	 * @param oldIndex
+	 * @param newIndex
+	 */
 	void tabChanged(int oldIndex, int newIndex);
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFreeformHelper.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFreeformHelper.java
index 834d516..55be3a4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFreeformHelper.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/preference/WindowFreeformHelper.java
@@ -27,7 +27,7 @@
  * 
  * @author bbrodt
  */
-public class WindowFreeformHelper implements FreeformListener {
+/*package*/ class WindowFreeformHelper implements FreeformListener {
 	FreeformLayeredPane x;
 
 	class ChildTracker implements FigureListener {
@@ -42,10 +42,16 @@
 
 	private FigureListener figureListener = new ChildTracker();
 
+	/**
+	 * @param host
+	 */
 	public WindowFreeformHelper(FreeformFigure host) {
 		this.host = host;
 	}
 
+	/**
+	 * @return the freeform extent
+	 */
 	public Rectangle getFreeformExtent() {
 		if (freeformExtent != null)
 			return freeformExtent;
@@ -75,6 +81,9 @@
 		return freeformExtent;
 	}
 
+	/**
+	 * @param child
+	 */
 	public void hookChild(IFigure child) {
 		invalidate();
 		if (child instanceof FreeformFigure)
@@ -98,6 +107,9 @@
 		invalidate();
 	}
 
+	/**
+	 * @param bounds
+	 */
 	public void setFreeformBounds(Rectangle bounds) {
 		host.setBounds(bounds);
 		bounds = bounds.getCopy();
@@ -113,6 +125,9 @@
 		host.getLayoutManager().layout(host);
 	}
 
+	/**
+	 * @param child
+	 */
 	public void unhookChild(IFigure child) {
 		invalidate();
 		if (child instanceof FreeformFigure)
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/AttributeSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/AttributeSection.java
index 6a8d0fb..2df812e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/AttributeSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/AttributeSection.java
@@ -57,6 +57,10 @@
 import org.eclipse.ui.forms.IManagedForm;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 
+/**
+ * Attribute section
+ *
+ */
 public class AttributeSection extends AbstractFacesConfigSection  {
 
 	private static final int TABLE_DEFAULT_HEIGHT = 160;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/FacetSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/FacetSection.java
index 7bcb10a..40aa389 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/FacetSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/FacetSection.java
@@ -55,6 +55,10 @@
 import org.eclipse.ui.forms.IManagedForm;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 
+/**
+ * Section for facets
+ *
+ */
 public class FacetSection extends AbstractFacesConfigSection {
 
 	private static final int TABLE_DEFAULT_HEIGHT = 160;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/LifecycleSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/LifecycleSection.java
index 2c694c7..50e529c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/LifecycleSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/LifecycleSection.java
@@ -77,6 +77,9 @@
 				null);
 	}
 
+	/**
+	 * @return the lifecycle child
+	 */
 	public EObject createLifecycleChildObject() {
 		String superType = ModelUtil.getSuperType(lifecycleChildClass);
 		IProject project = (IProject) this.getPage().getEditor().getAdapter(
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ListEntriesEditGroup.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ListEntriesEditGroup.java
index 1f62382..f06070e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ListEntriesEditGroup.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ListEntriesEditGroup.java
@@ -371,7 +371,7 @@
 		});
 	}
 
-	protected void addButtonSelected() {
+	private void addButtonSelected() {
 		EditValueDialog dialog = new EditValueDialog(EditorPlugin
 				.getActiveShell(), true, false, null);
 		if (dialog.open() == Dialog.OK) {
@@ -423,7 +423,7 @@
 		}
 	}
 
-	protected void editButtonSelected() {
+	private void editButtonSelected() {
 		Object select = ((IStructuredSelection) tableViewer.getSelection())
 				.getFirstElement();
 		boolean isNullValue;
@@ -485,7 +485,7 @@
 		}
 	}
 
-	protected void removeButtonSelected() {
+	private void removeButtonSelected() {
 		Object select = ((IStructuredSelection) tableViewer.getSelection())
 				.getFirstElement();
 		ListEntriesType listEntries = managedBean.getListEntries();
@@ -552,11 +552,7 @@
 		return currentProject;
 	}
 
-	public void setProject(IProject project) {
-		currentProject = project;
-	}
-
-	public void updateButtons() {
+	private void updateButtons() {
 		if (((IStructuredSelection) tableViewer.getSelection()).size() > 0) {
 			editButton.setEnabled(true);
 			removeButton.setEnabled(true);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanGeneralSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanGeneralSection.java
index e7c475b..f65d6b9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanGeneralSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanGeneralSection.java
@@ -282,7 +282,7 @@
 		}
 	}
 
-	protected ManagedBeanGeneralSectionAdapter getManagedBeanGeneralSectionAdatper() {
+	private ManagedBeanGeneralSectionAdapter getManagedBeanGeneralSectionAdatper() {
 		if (managedBeanGeneralSectionAdapter == null) {
 			managedBeanGeneralSectionAdapter = new ManagedBeanGeneralSectionAdapter();
 		}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanMasterSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanMasterSection.java
index 1204dd1..1289f41 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanMasterSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanMasterSection.java
@@ -251,7 +251,7 @@
 		}
 	}
 
-	protected ManagedBeanMasterSectionAdapter getManagedBeanMasterSectionAdapter() {
+	private ManagedBeanMasterSectionAdapter getManagedBeanMasterSectionAdapter() {
 		if (managedBeanMasterSectionAdapter == null) {
 			managedBeanMasterSectionAdapter = new ManagedBeanMasterSectionAdapter();
 		}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanScopeTreeItem.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanScopeTreeItem.java
index 69f6016..4101d9e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanScopeTreeItem.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedBeanScopeTreeItem.java
@@ -25,6 +25,9 @@
  */
 public class ManagedBeanScopeTreeItem {
 
+	/**
+	 * Possible values for bean scope
+	 */
 	public static final String[] scopeItems = {
 			IFacesConfigConstants.MANAGED_BEAN_SCOPE_SESSION,
 			IFacesConfigConstants.MANAGED_BEAN_SCOPE_REQUEST,
@@ -48,18 +51,30 @@
 		this.facesConfig = facesConfig;
 	}
 
+	/**
+	 * @return the parent object
+	 */
 	public Object getParent() {
 		return facesConfig;
 	}
 
+	/**
+	 * @return true if this node has children
+	 */
 	public boolean hasChildren() {
 		return !getChildren().isEmpty();
 	}
 
+	/**
+	 * @return the scope
+	 */
 	public String getScope() {
 		return scope;
 	}
 
+	/**
+	 * @return the list of children.  List may be empty.
+	 */
 	public List getChildren() {
 		List result = new ArrayList();
 		List managedBeans = facesConfig.getManagedBean();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedPropertyEditGroup.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedPropertyEditGroup.java
index 18c9fc5..a8b3548 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedPropertyEditGroup.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/ManagedPropertyEditGroup.java
@@ -87,6 +87,7 @@
 	private List selectionChangedListeners = new ArrayList();
 
 	/**
+	 * @param section 
 	 * 
 	 */
 	public ManagedPropertyEditGroup(AbstractFacesConfigSection section) {
@@ -100,8 +101,7 @@
 	 * @see org.eclipse.jst.jsf.facesconfig.ui.common.dialogfield.DialogFieldGroup#initialize()
 	 */
 	public void initialize() {
-		// TODO Auto-generated method stub
-
+		// do nothing
 	}
 
 	/*
@@ -306,7 +306,7 @@
 
 	}
 
-	protected void addButtonSelected() {
+	private void addButtonSelected() {
 		Shell shell = EditorPlugin.getActiveShell();
 
 		AddEditManagedPropertyDialog dialog = new AddEditManagedPropertyDialog(
@@ -326,7 +326,7 @@
 
 	}
 
-	protected void editButtonSelected() {
+	private void editButtonSelected() {
 		ManagedPropertyType managedProperty = (ManagedPropertyType) ((IStructuredSelection) tableViewer
 				.getSelection()).getFirstElement();
 		Shell shell = EditorPlugin.getActiveShell();
@@ -431,7 +431,7 @@
 		}
 	}
 
-	protected ManagedPropertyType createManagedPropertyFromDialog(
+	private ManagedPropertyType createManagedPropertyFromDialog(
 			AddEditManagedPropertyDialog dialog) {
 
 		String propertyName = dialog.getPropertyName();
@@ -473,7 +473,7 @@
 		return managedProperty;
 	}
 
-	protected void removeButtonSelected() {
+	private void removeButtonSelected() {
 		ManagedPropertyType managedProperty = (ManagedPropertyType) ((IStructuredSelection) tableViewer
 				.getSelection()).getFirstElement();
 		Assert.isNotNull(managedProperty);
@@ -516,7 +516,7 @@
 		return managedBean;
 	}
 
-	public EditingDomain getEditingDomain() {
+	private EditingDomain getEditingDomain() {
 		return section.getEditingDomain();
 	}
 
@@ -526,7 +526,6 @@
 	 * @see org.eclipse.jface.viewers.ISelectionProvider#addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)
 	 */
 	public void addSelectionChangedListener(ISelectionChangedListener listener) {
-		// TODO Auto-generated method stub
 		selectionChangedListeners.add(listener);
 	}
 
@@ -536,7 +535,6 @@
 	 * @see org.eclipse.jface.viewers.ISelectionProvider#getSelection()
 	 */
 	public ISelection getSelection() {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
@@ -547,7 +545,6 @@
 	 */
 	public void removeSelectionChangedListener(
 			ISelectionChangedListener listener) {
-		// TODO Auto-generated method stub
 		selectionChangedListeners.remove(listener);
 	}
 
@@ -557,8 +554,7 @@
 	 * @see org.eclipse.jface.viewers.ISelectionProvider#setSelection(org.eclipse.jface.viewers.ISelection)
 	 */
 	public void setSelection(ISelection selection) {
-		// TODO Auto-generated method stub
-
+		// do nothing
 	}
 
 	/*
@@ -567,7 +563,6 @@
 	 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
 	 */
 	public void selectionChanged(SelectionChangedEvent event) {
-		// TODO Auto-generated method stub
 		for (Iterator listeners = selectionChangedListeners.iterator(); listeners
 				.hasNext();) {
 			ISelectionChangedListener listener = (ISelectionChangedListener) listeners
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/MapEntriesEditGroup.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/MapEntriesEditGroup.java
index a2f16a0..7f8d7e8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/MapEntriesEditGroup.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/MapEntriesEditGroup.java
@@ -98,6 +98,7 @@
 	private List selectionChangedListeners = new ArrayList();
 
 	/**
+	 * @param section 
 	 */
 	public MapEntriesEditGroup(AbstractFacesConfigSection section) {
 		super();
@@ -113,7 +114,7 @@
         // TODO: initialize?
 	}
 
-	public void updateButtons() {
+	private void updateButtons() {
 		if (((IStructuredSelection) tableViewer.getSelection()).size() > 0) {
 			editButton.setEnabled(true);
 			removeButton.setEnabled(true);
@@ -415,7 +416,7 @@
 		});
 	}
 
-	protected void addButtonSelected() {
+	private void addButtonSelected() {
 		AddEditMapEntryDialog dialog = new AddEditMapEntryDialog(EditorPlugin
 				.getActiveShell(), true);
 		if (dialog.open() == Dialog.OK) {
@@ -466,7 +467,7 @@
 		}
 	}
 
-	protected void editButtonSelected() {
+	private void editButtonSelected() {
 		if (tableViewer.getSelection() == null
 				|| ((IStructuredSelection) tableViewer.getSelection())
 						.isEmpty()) {
@@ -552,7 +553,7 @@
 
 	}
 
-	protected void removeButtonSelected() {
+	private void removeButtonSelected() {
 
 		MapEntryType mapEntry = (MapEntryType) ((IStructuredSelection) tableViewer
 				.getSelection()).getFirstElement();
@@ -577,10 +578,6 @@
 		return currentProject;
 	}
 
-	public void setProject(IProject project) {
-		currentProject = project;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -603,7 +600,7 @@
 		}
 	}
 
-	public void refreshAll() {
+	/*package*/ void refreshAll() {
 		if (managedBean.getMapEntries() != null
 				&& managedBean.getMapEntries().getKeyClass() != null) {
 			this.keyClassField.setTextWithoutUpdate(managedBean.getMapEntries()
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/OverviewNavigationSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/OverviewNavigationSection.java
index 05a63c4..973c4f0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/OverviewNavigationSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/OverviewNavigationSection.java
@@ -284,7 +284,7 @@
 
 	}
 
-	protected void addOverviewNavigationSectionAdapter(EObject object) {
+	private void addOverviewNavigationSectionAdapter(EObject object) {
 		if (EcoreUtil.getExistingAdapter(object,
 				OverviewNavigationSection.class) == null) {
 			object.eAdapters().add(getOverviewNavigationSectionAdapter());
@@ -292,14 +292,14 @@
 
 	}
 
-	protected void removeOverviewNavigationSectionAdapter(EObject object) {
+	private void removeOverviewNavigationSectionAdapter(EObject object) {
 		if (EcoreUtil.getExistingAdapter(object,
 				OverviewNavigationSection.class) != null) {
 			object.eAdapters().remove(getOverviewNavigationSectionAdapter());
 		}
 	}
 
-	protected OverviewNavigationSectionAdapter getOverviewNavigationSectionAdapter() {
+	private OverviewNavigationSectionAdapter getOverviewNavigationSectionAdapter() {
 		if (overviewNavigationSectionAdapter == null)
 			overviewNavigationSectionAdapter = new OverviewNavigationSectionAdapter();
 		return overviewNavigationSectionAdapter;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/OverviewOthersSection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/OverviewOthersSection.java
index 2ca4867..573987f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/OverviewOthersSection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/OverviewOthersSection.java
@@ -231,20 +231,20 @@
 
 	}
 
-	protected void addOverviewOthersSectionAdapter(EObject object) {
+	private void addOverviewOthersSectionAdapter(EObject object) {
 		if (EcoreUtil.getExistingAdapter(object, OverviewOthersSection.class) == null) {
 			object.eAdapters().add(getOverviewOthersSectionAdapter());
 		}
 
 	}
 
-	protected void removeOverviewOthersSectionAdapter(EObject object) {
+	private void removeOverviewOthersSectionAdapter(EObject object) {
 		if (EcoreUtil.getExistingAdapter(object, OverviewOthersSection.class) != null) {
 			object.eAdapters().remove(getOverviewOthersSectionAdapter());
 		}
 	}
 
-	protected OverviewOthersSectionAdapter getOverviewOthersSectionAdapter() {
+	private OverviewOthersSectionAdapter getOverviewOthersSectionAdapter() {
 		if (overviewOthersSectionAdapter == null) {
 			overviewOthersSectionAdapter = new OverviewOthersSectionAdapter();
 		}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/PropertySection.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/PropertySection.java
index fdabeb1..95746ed 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/PropertySection.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/section/PropertySection.java
@@ -57,6 +57,10 @@
 import org.eclipse.ui.forms.IManagedForm;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 
+/**
+ * Section for properties
+ *
+ */
 public class PropertySection extends AbstractFacesConfigSection {
 
 	private static final int TABLE_DEFAULT_HEIGHT = 160;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/ManagedBeanPropertyPage.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/ManagedBeanPropertyPage.java
index 0f01854..44e01e0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/ManagedBeanPropertyPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/ManagedBeanPropertyPage.java
@@ -217,7 +217,7 @@
 		initialize();
 	}
 
-	protected void initialize() {
+	private void initialize() {
 		if (defaultScope != null && defaultScope.length() > 0)
 			scopeCombo.setText(defaultScope);
 		else
@@ -277,10 +277,16 @@
 		return data;
 	}
 
+	/**
+	 * @return the name of the managed bean
+	 */
 	public String getManagedBeanName() {
 		return this.managedBeanNameText.getText().trim();
 	}
 
+	/**
+	 * @return the managed bean class name
+	 */
 	public String getManagedBeanClass() {
 		if (this.getPreviousPage() instanceof ManagedBeanClassSelectionPage) {
 			return ((ManagedBeanClassSelectionPage) this.getPreviousPage()).getClassName();
@@ -299,10 +305,16 @@
 		return "";//$NON-NLS-1$
 	}
 
+	/**
+	 * @return the managed bean scope
+	 */
 	public String getManagedBeanScope() {
 		return this.scopeCombo.getText().trim();
 	}
 
+	/**
+	 * @return the managed bean description
+	 */
 	public String getManagedBeanDescription() {
 		return this.managedBeanDescriptionText.getText().trim();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/NewJavaClassPage.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/NewJavaClassPage.java
index 73285ac..ed4354a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/NewJavaClassPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/NewJavaClassPage.java
@@ -30,15 +30,18 @@
 public class NewJavaClassPage extends org.eclipse.jdt.ui.wizards.NewClassWizardPage
 		implements ISummaryDataSource {
 
-	private IProject currentProject;
+	private final IProject currentProject;
 
+	/**
+	 * @param project
+	 */
 	public NewJavaClassPage(IProject project) {
 		super();
 		currentProject = project;
 		setPageComplete(false);
 	}
 
-	public void initialize() {
+	private void initialize() {
 		if (getPackageFragmentRoot() == null
 				|| currentProject != getPackageFragmentRoot().getJavaProject()
 						.getProject()) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/WizardMessages.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/WizardMessages.java
index d9a162d..7a2555d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/WizardMessages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig.ui/src/org/eclipse/jst/jsf/facesconfig/ui/wizard/WizardMessages.java
@@ -12,6 +12,10 @@
 
 import org.eclipse.osgi.util.NLS;
 
+/**
+ * Message bundle for wizards
+ *
+ */
 public final class WizardMessages extends NLS {
 
 	private static final String BUNDLE_NAME = "org.eclipse.jst.jsf.facesconfig.ui.wizard.WizardMessages";
@@ -24,176 +28,434 @@
 		NLS.initializeMessages(BUNDLE_NAME, WizardMessages.class);
 	}
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewManagedBeanWizardBase_Type;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewManagedBeanWizardBase_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewManagedBeanWizardBase_Title;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewManagedBeanCreationWizard_Title;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String IntroWizardPage_Title;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String IntroWizardPage_Intro;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanWizardSelectionPage_Title;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanWizardSelectionPage_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanWizardSelectionPage_Group;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanWizardSelectionPage_HelpContextID;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String Registry_LoadWizard_Error;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewWizard_Title_WizardDefault;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_Title;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_General;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_ManagedBeanName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_ManagedBeanScope;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_ManagedBeanDescription;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_ManagedBeanProperty;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_PropertyName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_Type;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_Value;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_Button_Add;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_Button_Edit;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_Button_Remove;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_Warning_MissingManagedBeanName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_Warning_InvalidManagedBeanName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyWizardPage_Warning_DuplicateManagedBeanName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyEditDialog_PropertyName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyEditDialog_DataType;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyEditDialog_InitialValue;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyEditDialog_Title_NewPropertyEntry;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String ManagedBeanPropertyEditDialog_Title_ExistingPropertyEntry;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_Title;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_Project;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_FacesConfig;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_FacesConfig_Browser;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_Warning_MissingProjectName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_Warning_MissingFacesConfigName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_Warning_InvalidFacesConfigName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_Warning_InvalidFacesConfigContent;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_Warning_FacesConfigNotDefinedInWebDotXML;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigSelectionWizardPage_HelpContextID;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigFileSelectionDialog_Title;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String FacesConfigFileSelectionDialog_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Title;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Group;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Search;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Search_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Search_ClassName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Search_ClassName_Browse;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Create;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Create_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_FindType;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_FindType_Filter;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Error_ClassIsEmpty;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_Error_ClassIsNotDefined;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String JavaSelectionWizardPage_HelpContextID;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Summary_ProjectName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Summary_FacesConfigFileName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Summary_TypeName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Summary_PackageName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Summary_SourceFolder;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Summary_ManagedBeanName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Summary_ManagedBeanScope;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Summary_ClassName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Summary_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_SummaryPage_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Task_CreateNewManagedBean;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String NewJavaManagedBeanWizard_Task_CreateNewJavaClass;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String DuplicateBeanWizard_Title;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String DuplicateBeanPage_Title;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String DuplicateBeanPage_Description;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String DuplicateBeanGroup_Group_Label;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String DuplicateBeanGroup_OverwriteButton_Text;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String DuplicateBeanGroup_NewButton_Text;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String DuplicateBeanGroup_NewNameDialogField_Label;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String DuplicateBeanGroup_Error_EmptyManagedBeanName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String DuplicateBeanGroup_Error_InvalidManagedBeanName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String DuplicateBeanGroup_Error_DuplicatedManagedBeanName;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String WizardSummaryPage_Title_WizardSummary;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String WizardSummaryPage_Summary_SummaryDesc;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String WizardSummaryPage_Label_Field;
 
+	/**
+	 * see WizardMessages.properties
+	 */
 	public static String WizardSummaryPage_Label_Value;
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/META-INF/MANIFEST.MF
index 30c0c13..03c0772 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/META-INF/MANIFEST.MF
@@ -2,21 +2,21 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.eclipse.jst.jsf.facesconfig; singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Activator: org.eclipse.jst.jsf.facesconfig.FacesConfigPlugin$Implementation
 Bundle-Vendor: %plugin.provider
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jst.j2ee;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.4.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,3.0.0)",
  org.eclipse.wst.common.emf;bundle-version="[1.1.103,2.0.0)",
- org.eclipse.emf.edit.ui;bundle-version="[2.2.0,2.4.0)",
+ org.eclipse.emf.edit.ui;bundle-version="[2.2.0,3.0.0)",
  org.eclipse.wst.xml.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.common.uriresolver;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.sse.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.common.emfworkbench.integration;bundle-version="[1.1.0,1.2.0)"
-Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.jst.jsf.facesconfig,
  org.eclipse.jst.jsf.facesconfig.edit.provider,
  org.eclipse.jst.jsf.facesconfig.emf,
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ActionListenerTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ActionListenerTypeItemProvider.java
index 2181211..ebedef3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ActionListenerTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ActionListenerTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -33,12 +34,14 @@
 /**
  * This is the item provider adapter for a
  * {@link org.eclipse.jst.jsf.facesconfig.emf.ActionListenerType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class ActionListenerTypeItemProvider extends ItemProviderAdapter
-		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -187,7 +190,6 @@
 	 * @see org.eclipse.emf.edit.provider.ITableItemLabelProvider#getColumnImage(java.lang.Object, int)
 	 */
 	public Object getColumnImage(Object object, int columnIndex) {
-		// TODO Auto-generated method stub
 		if(columnIndex ==0)
 			return getImage(object);
 		return null;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ApplicationExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ApplicationExtensionTypeItemProvider.java
index d50eeb4..137af7f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ApplicationExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ApplicationExtensionTypeItemProvider.java
@@ -49,11 +49,13 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ApplicationTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ApplicationTypeItemProvider.java
index 7cc8cfc..c9925f5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ApplicationTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ApplicationTypeItemProvider.java
@@ -58,6 +58,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -86,6 +87,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -108,6 +110,7 @@
     /**
      * This adds a property descriptor for the EL Resolver feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -130,6 +133,7 @@
     /**
      * This adds a property descriptor for the Resource Bundle feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -152,6 +156,7 @@
     /**
      * This adds a property descriptor for the Application Extension feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/AttributeExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/AttributeExtensionTypeItemProvider.java
index 4904e38..16f4fc5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/AttributeExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/AttributeExtensionTypeItemProvider.java
@@ -45,6 +45,7 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/AttributeTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/AttributeTypeItemProvider.java
index 1ba0ca6..b0edf90 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/AttributeTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/AttributeTypeItemProvider.java
@@ -60,6 +60,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -88,6 +89,7 @@
     /**
      * This adds a property descriptor for the Attribute Class feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -110,6 +112,7 @@
     /**
      * This adds a property descriptor for the Default Value feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -132,6 +135,7 @@
     /**
      * This adds a property descriptor for the Suggested Value feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -154,6 +158,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentClassTypeItemProvider.java
index 2a73dda..85a232e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentClassTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentExtensionTypeItemProvider.java
index 0757a79..d1b8a4f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentExtensionTypeItemProvider.java
@@ -45,11 +45,13 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentFamilyTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentFamilyTypeItemProvider.java
index 46eb3d8..3dae3c0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentFamilyTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentFamilyTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentTypeItemProvider.java
index 72adf3f..6fbc666 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentTypeItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -34,13 +35,15 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.ComponentType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.ComponentType} object. 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class ComponentTypeItemProvider extends ItemProviderAdapter implements
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -50,6 +53,7 @@
 	/**
 	 * This constructs an instance from a factory and a notifier. <!--
 	 * begin-user-doc --> <!-- end-user-doc -->
+	 * @param adapterFactory 
 	 * 
 	 * @generated
 	 */
@@ -58,8 +62,10 @@
     }
 
 	/**
-	 * This returns the property descriptors for the adapted class. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This returns the property descriptors for the adapted class. 
+	 * <!-- begin-user-doc --> 
+	 * 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -72,6 +78,9 @@
         return itemPropertyDescriptors;
     }
 
+	/**
+	 * @param object
+	 */
 	protected void addComponentClassPropertyDescriptor(Object object) {
 		itemPropertyDescriptors.add(createItemPropertyDescriptor(
 				((ComposeableAdapterFactory) adapterFactory)
@@ -84,6 +93,9 @@
 				null));
 	}
 	
+	/**
+	 * @param object
+	 */
 	protected void addComponentTypePropertyDescriptor(Object object) {
 		itemPropertyDescriptors.add(createItemPropertyDescriptor(
 				((ComposeableAdapterFactory) adapterFactory)
@@ -99,8 +111,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentTypeTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentTypeTypeItemProvider.java
index 2f66694..9319c02 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentTypeTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ComponentTypeTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterClassTypeItemProvider.java
index ba5e398..a7f7e23 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterClassTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterExtensionTypeItemProvider.java
index 4ffb589..15afa95 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterExtensionTypeItemProvider.java
@@ -49,11 +49,13 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterForClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterForClassTypeItemProvider.java
index 3007a8c..f614303 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterForClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterForClassTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterIdTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterIdTypeItemProvider.java
index 9b368d0..c865d06 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterIdTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterIdTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterTypeItemProvider.java
index 97fbff5..d76abca 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ConverterTypeItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -34,13 +35,15 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.ConverterType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.ConverterType} object. 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class ConverterTypeItemProvider extends ItemProviderAdapter implements
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -48,8 +51,10 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * <!-- begin-user-doc --> 
+ 	 * @param adapterFactory 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -76,8 +81,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Converter Id feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Converter Id feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+ 	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -98,8 +106,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Converter For Class feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Converter For Class feature. 
+	 * 
+	 * <!-- begin-user-doc -->
+	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -120,9 +131,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Converter Class feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Converter Class feature. 
 	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	protected void addConverterClassPropertyDescriptor(Object object) {
@@ -143,8 +156,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
@@ -301,7 +315,6 @@
 	 * @see org.eclipse.emf.edit.provider.ITableItemLabelProvider#getColumnImage(java.lang.Object, int)
 	 */
 	public Object getColumnImage(Object object, int columnIndex) {
-		// TODO Auto-generated method stub
 		if(columnIndex ==0)
 			return getImage(object);
 		return null;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultLocaleTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultLocaleTypeItemProvider.java
index c741921..5522e12 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultLocaleTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultLocaleTypeItemProvider.java
@@ -48,8 +48,11 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!-- begin-user-doc --> 
+ 	 * @param adapterFactory 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -74,8 +77,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+ 	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -97,8 +103,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultRenderKitIdTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultRenderKitIdTypeItemProvider.java
index 46ae685..27370e5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultRenderKitIdTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultRenderKitIdTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,11 +33,13 @@
 
 /**
  * This is the item provider adapter for a {@link org.eclipse.jst.jsf.facesconfig.emf.DefaultRenderKitIdType} object.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * <!-- begin-user-doc -->
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * @generated
  */
 public class DefaultRenderKitIdTypeItemProvider extends ItemProviderAdapter
-		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -44,9 +47,11 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
 	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param adapterFactory
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	public DefaultRenderKitIdTypeItemProvider(AdapterFactory adapterFactory) {
@@ -70,8 +75,12 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc -->
+	 * @param object
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -93,8 +102,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
@@ -180,7 +190,6 @@
 	 * @see org.eclipse.emf.edit.provider.ITableItemLabelProvider#getColumnImage(java.lang.Object, int)
 	 */
 	public Object getColumnImage(Object object, int columnIndex) {
-		// TODO Auto-generated method stub
 		if(columnIndex ==0)
 			return getImage(object);
 		return null;
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultValueTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultValueTypeItemProvider.java
index 7f03d26..721f68d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultValueTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DefaultValueTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DescriptionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DescriptionTypeItemProvider.java
index f4293a2..95bcec3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DescriptionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DescriptionTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -83,6 +84,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -105,6 +107,7 @@
     /**
      * This adds a property descriptor for the Lang feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -127,6 +130,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DisplayNameTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DisplayNameTypeItemProvider.java
index cd915c1..c64caca 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DisplayNameTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DisplayNameTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -83,6 +84,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -106,6 +108,7 @@
      * This adds a property descriptor for the Lang feature.
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+     * @param object 
      * @generated
      */
 	protected void addLangPropertyDescriptor(Object object) {
@@ -128,6 +131,7 @@
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+     * @param object 
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DocumentRootItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DocumentRootItemProvider.java
index bd15c75..d309390 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DocumentRootItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DocumentRootItemProvider.java
@@ -55,6 +55,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DynamicAttributeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DynamicAttributeItemProvider.java
index b87b805..dc315d5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DynamicAttributeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DynamicAttributeItemProvider.java
@@ -59,6 +59,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -85,6 +86,7 @@
     /**
      * This adds a property descriptor for the Name feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -107,6 +109,7 @@
     /**
      * This adds a property descriptor for the Value feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DynamicElementItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DynamicElementItemProvider.java
index ec595ee..c8f7c1a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DynamicElementItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/DynamicElementItemProvider.java
@@ -60,6 +60,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -87,6 +88,7 @@
     /**
      * This adds a property descriptor for the Attributes feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -109,6 +111,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -131,6 +134,7 @@
     /**
      * This adds a property descriptor for the Name feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ELResolverTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ELResolverTypeItemProvider.java
index bc6e861..3bdffc1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ELResolverTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ELResolverTypeItemProvider.java
@@ -59,6 +59,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -85,6 +86,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -107,6 +109,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ExtensionTypeItemProvider.java
index f51629b..0552a35 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ExtensionTypeItemProvider.java
@@ -59,6 +59,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -86,6 +87,7 @@
     /**
      * This adds a property descriptor for the Child Nodes feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -108,6 +110,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -130,6 +133,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigExtensionTypeItemProvider.java
index 97bad27..c124a24 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigExtensionTypeItemProvider.java
@@ -49,11 +49,13 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigItemProviderAdapterFactory.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigItemProviderAdapterFactory.java
index c3f6b09..9ae32c5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigItemProviderAdapterFactory.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigItemProviderAdapterFactory.java
@@ -46,6 +46,7 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigTypeItemProvider.java
index 70a07d3..47bc95f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesConfigTypeItemProvider.java
@@ -58,6 +58,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -85,6 +86,7 @@
     /**
      * This adds a property descriptor for the Faces Config Extension feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -107,6 +109,7 @@
     /**
      * This adds a property descriptor for the Xmlns feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -129,6 +132,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesContextFactoryTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesContextFactoryTypeItemProvider.java
index 713373b..bc25a8b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesContextFactoryTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacesContextFactoryTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,11 +33,13 @@
 
 /**
  * This is the item provider adapter for a {@link org.eclipse.jst.jsf.facesconfig.emf.FacesContextFactoryType} object.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider 
+ * <!-- end-user-doc -->
  * @generated
  */
 public class FacesContextFactoryTypeItemProvider extends ItemProviderAdapter
-		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider{
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -44,8 +47,11 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * <!-- begin-user-doc --> 
+	 * @param adapterFactory
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -70,8 +76,10 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * <!-- begin-user-doc --> 
+	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -93,8 +101,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc--> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetExtensionTypeItemProvider.java
index cbb42ff..e57515f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetExtensionTypeItemProvider.java
@@ -45,11 +45,13 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetNameTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetNameTypeItemProvider.java
index fb94b32..1aa8229 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetNameTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetNameTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetTypeItemProvider.java
index 068d04b..1177216 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FacetTypeItemProvider.java
@@ -40,8 +40,9 @@
 /**
  * This is the item provider adapter for a {@link org.eclipse.jst.jsf.facesconfig.emf.FacetType} object.
  * <!-- begin-user-doc -->
+ * @extends ITableItemLabelProvider
  * <!-- end-user-doc -->
- * 
+ * @generated
  */
 public class FacetTypeItemProvider
 	extends ItemProviderAdapter
@@ -62,6 +63,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -87,6 +89,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -250,7 +253,6 @@
 	}
 
 	public Object getColumnImage(Object object, int columnIndex) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FactoryExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FactoryExtensionTypeItemProvider.java
index 17c95fe..4a366e9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FactoryExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FactoryExtensionTypeItemProvider.java
@@ -49,11 +49,13 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FactoryTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FactoryTypeItemProvider.java
index 58c2235..94bb34f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FactoryTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FactoryTypeItemProvider.java
@@ -58,6 +58,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -84,6 +85,7 @@
     /**
      * This adds a property descriptor for the Factory Extension feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -106,6 +108,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromActionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromActionTypeItemProvider.java
index bd2f9e3..2fe5038 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromActionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromActionTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromOutcomeTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromOutcomeTypeItemProvider.java
index b91c2c6..6a02075 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromOutcomeTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromOutcomeTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromViewIdTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromViewIdTypeItemProvider.java
index ef2b898..4e11015 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromViewIdTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/FromViewIdTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/IconTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/IconTypeItemProvider.java
index 31ba081..4162aa7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/IconTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/IconTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -84,6 +85,7 @@
     /**
      * This adds a property descriptor for the Small Icon feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -106,6 +108,7 @@
     /**
      * This adds a property descriptor for the Large Icon feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -128,6 +131,7 @@
     /**
      * This adds a property descriptor for the Lang feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -150,6 +154,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/KeyClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/KeyClassTypeItemProvider.java
index 2c900d1..d34d042 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/KeyClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/KeyClassTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/KeyTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/KeyTypeItemProvider.java
index 33d74bf..e4e77b8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/KeyTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/KeyTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LargeIconTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LargeIconTypeItemProvider.java
index 1984b2d..79a6ae5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LargeIconTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LargeIconTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleExtensionTypeItemProvider.java
index a5a6567..bd0f333 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleExtensionTypeItemProvider.java
@@ -49,11 +49,13 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleFactoryTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleFactoryTypeItemProvider.java
index e07f8e6..0cba622 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleFactoryTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleFactoryTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,13 +33,16 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.LifecycleFactoryType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.LifecycleFactoryType} object. 
+ * 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class LifecycleFactoryTypeItemProvider extends ItemProviderAdapter
-		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -46,8 +50,12 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!--begin-user-doc --> 
+	 * @param adapterFactory 
+	 * <!-- end-user-doc -->
+	 * 
 	 * 
 	 * @generated
 	 */
@@ -72,8 +80,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+ 	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -95,8 +106,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleTypeItemProvider.java
index 57982b3..deb42c3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LifecycleTypeItemProvider.java
@@ -59,6 +59,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -84,6 +85,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ListEntriesTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ListEntriesTypeItemProvider.java
index c24de79..2614396 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ListEntriesTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ListEntriesTypeItemProvider.java
@@ -58,6 +58,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -84,6 +85,7 @@
     /**
      * This adds a property descriptor for the Value Class feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -106,6 +108,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LocaleConfigTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LocaleConfigTypeItemProvider.java
index a5af85e..82820fb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LocaleConfigTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/LocaleConfigTypeItemProvider.java
@@ -24,6 +24,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -36,13 +37,14 @@
 /**
  * This is the item provider adapter for a {@link org.eclipse.jst.jsf.facesconfig.emf.LocaleConfigType} object.
  * <!-- begin-user-doc -->
+ * @extends ITableItemLabelProvider
  * <!-- end-user-doc -->
  * @generated
  */
 public class LocaleConfigTypeItemProvider
 	extends ItemProviderAdapter
 	implements	
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -53,6 +55,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -78,6 +81,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanClassTypeItemProvider.java
index b37e332..17253fd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanClassTypeItemProvider.java
@@ -59,6 +59,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -85,6 +86,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -107,6 +109,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanExtensionTypeItemProvider.java
index 36baa15..7f0c609 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanExtensionTypeItemProvider.java
@@ -49,11 +49,13 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanNameTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanNameTypeItemProvider.java
index 7f814a7..47b3b5a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanNameTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanNameTypeItemProvider.java
@@ -59,6 +59,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -85,6 +86,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -107,6 +109,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanScopeTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanScopeTypeItemProvider.java
index 53f688e..d066a36 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanScopeTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanScopeTypeItemProvider.java
@@ -59,6 +59,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -85,6 +86,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -107,6 +109,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanTypeItemProvider.java
index 0c4060d..6c9c099 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedBeanTypeItemProvider.java
@@ -55,6 +55,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -83,6 +84,7 @@
     /**
      * This adds a property descriptor for the Managed Bean Name feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -105,6 +107,7 @@
     /**
      * This adds a property descriptor for the Managed Bean Class feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -127,6 +130,7 @@
     /**
      * This adds a property descriptor for the Managed Bean Scope feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -149,6 +153,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedPropertyTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedPropertyTypeItemProvider.java
index edc901c..635774e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedPropertyTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ManagedPropertyTypeItemProvider.java
@@ -55,6 +55,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -84,6 +85,7 @@
     /**
      * This adds a property descriptor for the Property Name feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -106,6 +108,7 @@
     /**
      * This adds a property descriptor for the Property Class feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -128,6 +131,7 @@
     /**
      * This adds a property descriptor for the Null Value feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -150,7 +154,8 @@
     /**
      * This adds a property descriptor for the Value feature.
      * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+     * @param object \
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addValuePropertyDescriptor(Object object) {
@@ -172,6 +177,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MapEntriesTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MapEntriesTypeItemProvider.java
index 79dc0e3..b2ce1ff 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MapEntriesTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MapEntriesTypeItemProvider.java
@@ -57,6 +57,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -84,6 +85,7 @@
     /**
      * This adds a property descriptor for the Key Class feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -106,6 +108,7 @@
     /**
      * This adds a property descriptor for the Value Class feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -128,6 +131,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MapEntryTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MapEntryTypeItemProvider.java
index aba986f..67c7a60 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MapEntryTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MapEntryTypeItemProvider.java
@@ -60,6 +60,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -88,6 +89,7 @@
     /**
      * This adds a property descriptor for the Key feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -110,6 +112,7 @@
     /**
      * This adds a property descriptor for the Null Value feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -132,6 +135,7 @@
     /**
      * This adds a property descriptor for the Value feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -154,6 +158,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MessageBundleTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MessageBundleTypeItemProvider.java
index 12b57e8..550bd1d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MessageBundleTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/MessageBundleTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,13 +33,16 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.MessageBundleType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.MessageBundleType} object. 
+ * 
+ * <!-- begin-user-doc -->
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class MessageBundleTypeItemProvider extends ItemProviderAdapter
-		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -46,8 +50,10 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * <!-- begin-user-doc --> 
+ 	 * @param adapterFactory 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -72,9 +78,10 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
-	 * 
+	 * This adds a property descriptor for the Text Content feature. 
+	 * <!-- begin-user-doc --> 
+	 * @param object
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	protected void addTextContentPropertyDescriptor(Object object) {
@@ -95,8 +102,10 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc--> 
+     * @param object
+     * <!-- end-user-doc -->
+     *  
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationCaseTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationCaseTypeItemProvider.java
index 87a5112..4c5a89d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationCaseTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationCaseTypeItemProvider.java
@@ -24,6 +24,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -37,13 +38,14 @@
 /**
  * This is the item provider adapter for a {@link org.eclipse.jst.jsf.facesconfig.emf.NavigationCaseType} object.
  * <!-- begin-user-doc -->
+ * @extends ITableItemLabelProvider
  * <!-- end-user-doc -->
  * @generated
  */
 public class NavigationCaseTypeItemProvider
 	extends ItemProviderAdapter
 	implements	
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -54,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +85,7 @@
     /**
      * This adds a property descriptor for the From Action feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +108,7 @@
     /**
      * This adds a property descriptor for the From Outcome feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -126,6 +131,7 @@
     /**
      * This adds a property descriptor for the To View Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -148,6 +154,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -293,7 +300,6 @@
 	 * @see org.eclipse.emf.edit.provider.ITableItemLabelProvider#getColumnImage(java.lang.Object, int)
 	 */
 	public Object getColumnImage(Object object, int columnIndex) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationHandlerTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationHandlerTypeItemProvider.java
index 1abda44..d7af3b1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationHandlerTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationHandlerTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,11 +33,13 @@
 
 /**
  * This is the item provider adapter for a {@link org.eclipse.jst.jsf.facesconfig.emf.NavigationHandlerType} object.
- * <!-- begin-user-doc --> <!-- end-user-doc -->
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * @generated
  */
 public class NavigationHandlerTypeItemProvider extends ItemProviderAdapter
-		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -44,8 +47,12 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param adapterFactory 
+	 * <!-- end-user-doc -->
+	 * 
 	 * 
 	 * @generated
 	 */
@@ -70,8 +77,12 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -93,8 +104,10 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object
+     * <!-- end-user-doc -->
+     *  
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationRuleExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationRuleExtensionTypeItemProvider.java
index 2f5e1e3..af2dd45 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationRuleExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationRuleExtensionTypeItemProvider.java
@@ -49,11 +49,13 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationRuleTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationRuleTypeItemProvider.java
index a72ac7a..1cc12f8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationRuleTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NavigationRuleTypeItemProvider.java
@@ -24,6 +24,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -36,13 +37,14 @@
 /**
  * This is the item provider adapter for a {@link org.eclipse.jst.jsf.facesconfig.emf.NavigationRuleType} object.
  * <!-- begin-user-doc -->
+ * @extends ITableItemLabelProvider
  * <!-- end-user-doc -->
  * @generated
  */
 public class NavigationRuleTypeItemProvider
 	extends ItemProviderAdapter
 	implements	
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource{
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider{
     /**
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -53,6 +55,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -79,6 +82,7 @@
     /**
      * This adds a property descriptor for the From View Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -101,6 +105,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NullValueTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NullValueTypeItemProvider.java
index d3432f3..1fea595 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NullValueTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/NullValueTypeItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -34,13 +35,14 @@
 /**
  * This is the item provider adapter for a {@link org.eclipse.jst.jsf.facesconfig.emf.NullValueType} object.
  * <!-- begin-user-doc -->
+ * @extends ITableItemLabelProvider
  * <!-- end-user-doc -->
  * @generated
  */
 public class NullValueTypeItemProvider
 	extends ItemProviderAdapter
 	implements	
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -51,6 +53,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -76,6 +79,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -162,7 +166,6 @@
 	}
 
 	public Object getColumnImage(Object object, int columnIndex) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PhaseListenerTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PhaseListenerTypeItemProvider.java
index b88da6e..aff050d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PhaseListenerTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PhaseListenerTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,13 +33,15 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.PhaseListenerType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.PhaseListenerType} object. 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class PhaseListenerTypeItemProvider extends ItemProviderAdapter
-		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -46,8 +49,11 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!-- begin-user-doc --> 
+ 	 * @param adapterFactory 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -72,8 +78,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+ 	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -95,8 +104,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyClassTypeItemProvider.java
index 89ff554..13c2225 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyClassTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyExtensionTypeItemProvider.java
index c643d90..ab058b9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyExtensionTypeItemProvider.java
@@ -45,11 +45,13 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyNameTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyNameTypeItemProvider.java
index 7454636..ecfe1a9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyNameTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyNameTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyResolverTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyResolverTypeItemProvider.java
index d5e588f..5f29fe0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyResolverTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyResolverTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,13 +33,15 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.PropertyResolverType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.PropertyResolverType} object. 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class PropertyResolverTypeItemProvider extends ItemProviderAdapter
-		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -46,8 +49,12 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param adapterFactory
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -72,8 +79,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -95,8 +105,10 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc--> 
+     * @param object
+     * <!-- end-user-doc -->
+     *  
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyTypeItemProvider.java
index 0471c59..3158621 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/PropertyTypeItemProvider.java
@@ -38,8 +38,10 @@
 /**
  * This is the item provider adapter for a {@link org.eclipse.jst.jsf.facesconfig.emf.PropertyType} object.
  * <!-- begin-user-doc -->
+ * @extends ITableItemLabelProvider
  * <!-- end-user-doc -->
  * 
+ * @gemerated
  */
 public class PropertyTypeItemProvider
 	extends ItemProviderAdapter
@@ -60,6 +62,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -89,6 +92,7 @@
     /**
      * This adds a property descriptor for the Property Name feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -111,6 +115,7 @@
     /**
      * This adds a property descriptor for the Property Class feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -133,6 +138,7 @@
     /**
      * This adds a property descriptor for the Default Value feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -155,6 +161,7 @@
     /**
      * This adds a property descriptor for the Suggested Value feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -177,6 +184,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RedirectTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RedirectTypeItemProvider.java
index 32a375e..fab4ff5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RedirectTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RedirectTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -81,6 +82,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanClassTypeItemProvider.java
index b41f538..3cec112 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanClassTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanNameTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanNameTypeItemProvider.java
index 50b8e23..3448ae1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanNameTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanNameTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanTypeItemProvider.java
index 850990a..6ec8d87 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ReferencedBeanTypeItemProvider.java
@@ -58,6 +58,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -85,6 +86,7 @@
     /**
      * This adds a property descriptor for the Referenced Bean Name feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -107,6 +109,7 @@
     /**
      * This adds a property descriptor for the Referenced Bean Class feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -129,6 +132,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitClassTypeItemProvider.java
index 95b0c55..9d31620 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitClassTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitExtensionTypeItemProvider.java
index 2000cf5..668eaa4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitExtensionTypeItemProvider.java
@@ -49,11 +49,13 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitFactoryTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitFactoryTypeItemProvider.java
index d2a1580..4f3f0b7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitFactoryTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitFactoryTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,13 +33,15 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.RenderKitFactoryType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.RenderKitFactoryType} object. 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class RenderKitFactoryTypeItemProvider extends ItemProviderAdapter
-		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -46,8 +49,12 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param adapterFactory
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -72,8 +79,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -95,8 +105,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitIdTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitIdTypeItemProvider.java
index 508321b..2489fae 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitIdTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitIdTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitTypeItemProvider.java
index c11e104..0c1d4c6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RenderKitTypeItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -34,13 +35,16 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.RenderKitType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.RenderKitType} object. 
+ * 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class RenderKitTypeItemProvider extends ItemProviderAdapter implements
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -48,8 +52,11 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * <!-- begin-user-doc --> 
+	 * @param adapterFactory
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -75,8 +82,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Render Kit Id feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Render Kit Id feature. 
+	 * 
+	 * <!--begin-user-doc --> 
+	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -97,8 +107,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Render Kit Class feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Render Kit Class feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+ 	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -120,8 +133,10 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object
+     * <!-- end-user-doc -->
+     *  
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererClassTypeItemProvider.java
index d42e1bf..7738621 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererClassTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererExtensionTypeItemProvider.java
index 3880162..2d3787a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererExtensionTypeItemProvider.java
@@ -45,11 +45,13 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererTypeItemProvider.java
index 8db67ba..daf6a35 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererTypeItemProvider.java
@@ -24,6 +24,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -37,13 +38,14 @@
 /**
  * This is the item provider adapter for a {@link org.eclipse.jst.jsf.facesconfig.emf.RendererType} object.
  * <!-- begin-user-doc -->
+ * @extends ITableItemLabelProvider
  * <!-- end-user-doc -->
  * @generated
  */
 public class RendererTypeItemProvider
 	extends ItemProviderAdapter
 	implements	
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -54,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +85,7 @@
     /**
      * This adds a property descriptor for the Component Family feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +108,7 @@
     /**
      * This adds a property descriptor for the Renderer Type feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -126,6 +131,7 @@
     /**
      * This adds a property descriptor for the Renderer Class feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -148,6 +154,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -324,7 +331,6 @@
 	}
 
 	public Object getColumnImage(Object object, int columnIndex) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererTypeTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererTypeTypeItemProvider.java
index b38e05e..84a35ed 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererTypeTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/RendererTypeTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -33,13 +34,16 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.RendererTypeType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.RendererTypeType} object. 
+ * 
+ * <!-- begin-user-doc -->
+ * @extends ITableItemLabelProvider 
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class RendererTypeTypeItemProvider extends ItemProviderAdapter implements
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -47,8 +51,10 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * <!-- begin-user-doc -->
+ 	 * @param adapterFactory 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -73,8 +79,12 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -96,8 +106,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ResourceBundleTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ResourceBundleTypeItemProvider.java
index 9d5f3c3..06a0f6b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ResourceBundleTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ResourceBundleTypeItemProvider.java
@@ -62,6 +62,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -89,6 +90,7 @@
     /**
      * This adds a property descriptor for the Base Name feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -111,6 +113,7 @@
     /**
      * This adds a property descriptor for the Var feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -133,6 +136,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SmallIconTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SmallIconTypeItemProvider.java
index 71ef245..c366aeb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SmallIconTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SmallIconTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/StateManagerTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/StateManagerTypeItemProvider.java
index d68c297..973482b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/StateManagerTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/StateManagerTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,13 +33,16 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.StateManagerType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.StateManagerType} object. 
+ * 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class StateManagerTypeItemProvider extends ItemProviderAdapter implements
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -46,8 +50,12 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param adapterFactory
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -72,8 +80,12 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object 
+	 * <!-- end-user-doc -->
+	 * 
 	 * 
 	 * @generated
 	 */
@@ -95,8 +107,10 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object
+     * <!-- end-user-doc -->
+     *  
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SuggestedValueTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SuggestedValueTypeItemProvider.java
index 6a2e071..060d57d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SuggestedValueTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SuggestedValueTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SupportedLocaleTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SupportedLocaleTypeItemProvider.java
index dbbe830..774d17b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SupportedLocaleTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/SupportedLocaleTypeItemProvider.java
@@ -48,8 +48,12 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param adapterFactory
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -74,8 +78,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -97,8 +104,10 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object
+     * <!-- end-user-doc -->
+     *  
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ToViewIdTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ToViewIdTypeItemProvider.java
index 02fb4a0..e34a192 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ToViewIdTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ToViewIdTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorClassTypeItemProvider.java
index 16adf0f..afb6b52 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorClassTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorExtensionTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorExtensionTypeItemProvider.java
index 7dafc40..f57bb2d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorExtensionTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorExtensionTypeItemProvider.java
@@ -49,11 +49,13 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorIdTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorIdTypeItemProvider.java
index ee3f427..447646c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorIdTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorIdTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorTypeItemProvider.java
index a2bbb78..7a729cc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValidatorTypeItemProvider.java
@@ -23,6 +23,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -34,13 +35,16 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.ValidatorType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.ValidatorType} object. 
+ * 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class ValidatorTypeItemProvider extends ItemProviderAdapter implements
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -48,8 +52,11 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param adapterFactory 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -75,8 +82,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Validator Id feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Validator Id feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -97,8 +107,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Validator Class feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Validator Class feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -120,8 +133,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValueClassTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValueClassTypeItemProvider.java
index 306ed39..b9b2a87 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValueClassTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValueClassTypeItemProvider.java
@@ -56,6 +56,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -82,6 +83,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -104,6 +106,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValueTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValueTypeItemProvider.java
index fe36afa..fb258c1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValueTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ValueTypeItemProvider.java
@@ -53,6 +53,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -79,6 +80,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -101,6 +103,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -190,7 +193,6 @@
 	}
 
 	public Object getColumnImage(Object object, int columnIndex) {
-		// TODO Auto-generated method stub
 		return null;
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/VarTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/VarTypeItemProvider.java
index a1975ee..14dac65 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/VarTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/VarTypeItemProvider.java
@@ -59,6 +59,7 @@
     /**
      * This constructs an instance from a factory and a notifier.
      * <!-- begin-user-doc -->
+     * @param adapterFactory 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -85,6 +86,7 @@
     /**
      * This adds a property descriptor for the Text Content feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -107,6 +109,7 @@
     /**
      * This adds a property descriptor for the Id feature.
      * <!-- begin-user-doc -->
+     * @param object 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/VariableResolverTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/VariableResolverTypeItemProvider.java
index ffe5531..4d5b9c9 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/VariableResolverTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/VariableResolverTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,13 +33,16 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.VariableResolverType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.VariableResolverType} object. 
+ * 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class VariableResolverTypeItemProvider extends ItemProviderAdapter
-		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -46,8 +50,11 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!-- begin-user-doc --> 
+ 	 * @param adapterFactory 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -72,8 +79,12 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. \
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -95,8 +106,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ViewHandlerTypeItemProvider.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ViewHandlerTypeItemProvider.java
index 2b766d2..02673cd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ViewHandlerTypeItemProvider.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/edit/provider/ViewHandlerTypeItemProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.edit.provider.IItemLabelProvider;
 import org.eclipse.emf.edit.provider.IItemPropertySource;
 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
 import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
 import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ItemProviderAdapter;
@@ -32,13 +33,16 @@
 
 /**
  * This is the item provider adapter for a
- * {@link org.eclipse.jst.jsf.facesconfig.emf.ViewHandlerType} object. <!--
- * begin-user-doc --> <!-- end-user-doc -->
+ * {@link org.eclipse.jst.jsf.facesconfig.emf.ViewHandlerType} object. 
+ * 
+ * <!-- begin-user-doc --> 
+ * @extends ITableItemLabelProvider
+ * <!-- end-user-doc -->
  * 
  * @generated
  */
 public class ViewHandlerTypeItemProvider extends ItemProviderAdapter implements
-		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource {
+		IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, ITableItemLabelProvider {
     /**
      * <!-- begin-user-doc --> <!-- end-user-doc -->
      * @generated
@@ -46,8 +50,12 @@
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
 	/**
-	 * This constructs an instance from a factory and a notifier. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This constructs an instance from a factory and a notifier. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param adapterFactory
+	 * <!-- end-user-doc -->
+	 *  
 	 * 
 	 * @generated
 	 */
@@ -72,8 +80,11 @@
     }
 
 	/**
-	 * This adds a property descriptor for the Text Content feature. <!--
-	 * begin-user-doc --> <!-- end-user-doc -->
+	 * This adds a property descriptor for the Text Content feature. 
+	 * 
+	 * <!-- begin-user-doc --> 
+	 * @param object 
+	 * <!-- end-user-doc -->
 	 * 
 	 * @generated
 	 */
@@ -95,8 +106,9 @@
 
     /**
      * This adds a property descriptor for the Id feature.
-     * <!-- begin-user-doc
-	 * --> <!-- end-user-doc -->
+     * <!-- begin-user-doc --> 
+     * @param object 
+     * <!-- end-user-doc -->
      * @generated
      */
 	protected void addIdPropertyDescriptor(Object object) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/FacesConfigPackage.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/FacesConfigPackage.java
index f10dda3..3aed13d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/FacesConfigPackage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/FacesConfigPackage.java
@@ -115,6 +115,7 @@
  *        extendedMetaData="qualified='false'"
  * @generated
  */
+@SuppressWarnings("hiding")
 public interface FacesConfigPackage extends EPackage {
     /**
      * <!-- begin-user-doc -->
@@ -10915,6 +10916,7 @@
      * <!-- end-user-doc -->
      * @generated
      */
+//    @SuppressWarnings("hiding")
     interface Literals  {
         /**
          * The meta object literal for the '{@link org.eclipse.jst.jsf.facesconfig.emf.impl.ActionListenerTypeImpl <em>Action Listener Type</em>}' class.
@@ -11304,7 +11306,7 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        EReference COMPONENT_TYPE__DESCRIPTION = eINSTANCE.getComponentType_Description();
+		EReference COMPONENT_TYPE__DESCRIPTION = eINSTANCE.getComponentType_Description();
 
         /**
          * The meta object literal for the '<em><b>Display Name</b></em>' containment reference list feature.
@@ -11562,7 +11564,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference CONVERTER_TYPE__CONVERTER_EXTENSION = eINSTANCE.getConverterType_ConverterExtension();
 
         /**
@@ -11571,7 +11572,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute CONVERTER_TYPE__ID = eINSTANCE.getConverterType_Id();
 
         /**
@@ -12496,7 +12496,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getFacesConfigType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass FACES_CONFIG_TYPE = eINSTANCE.getFacesConfigType();
 
         /**
@@ -12505,7 +12504,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__APPLICATION = eINSTANCE.getFacesConfigType_Application();
 
         /**
@@ -12514,7 +12512,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__FACTORY = eINSTANCE.getFacesConfigType_Factory();
 
         /**
@@ -12523,7 +12520,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__COMPONENT = eINSTANCE.getFacesConfigType_Component();
 
         /**
@@ -12532,7 +12528,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__CONVERTER = eINSTANCE.getFacesConfigType_Converter();
 
         /**
@@ -12541,7 +12536,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__MANAGED_BEAN = eINSTANCE.getFacesConfigType_ManagedBean();
 
         /**
@@ -12550,7 +12544,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__NAVIGATION_RULE = eINSTANCE.getFacesConfigType_NavigationRule();
 
         /**
@@ -12559,7 +12552,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__REFERENCED_BEAN = eINSTANCE.getFacesConfigType_ReferencedBean();
 
         /**
@@ -12568,7 +12560,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__RENDER_KIT = eINSTANCE.getFacesConfigType_RenderKit();
 
         /**
@@ -12577,7 +12568,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__LIFECYCLE = eINSTANCE.getFacesConfigType_Lifecycle();
 
         /**
@@ -12586,7 +12576,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__VALIDATOR = eINSTANCE.getFacesConfigType_Validator();
 
         /**
@@ -12595,7 +12584,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACES_CONFIG_TYPE__FACES_CONFIG_EXTENSION = eINSTANCE.getFacesConfigType_FacesConfigExtension();
 
         /**
@@ -12604,7 +12592,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FACES_CONFIG_TYPE__XMLNS = eINSTANCE.getFacesConfigType_Xmlns();
 
         /**
@@ -12613,7 +12600,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FACES_CONFIG_TYPE__ID = eINSTANCE.getFacesConfigType_Id();
 
         /**
@@ -12624,7 +12610,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getFacesContextFactoryType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass FACES_CONTEXT_FACTORY_TYPE = eINSTANCE.getFacesContextFactoryType();
 
         /**
@@ -12633,7 +12618,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FACES_CONTEXT_FACTORY_TYPE__TEXT_CONTENT = eINSTANCE.getFacesContextFactoryType_TextContent();
 
         /**
@@ -12642,7 +12626,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FACES_CONTEXT_FACTORY_TYPE__ID = eINSTANCE.getFacesContextFactoryType_Id();
 
         /**
@@ -12653,7 +12636,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getFacetExtensionType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass FACET_EXTENSION_TYPE = eINSTANCE.getFacetExtensionType();
 
         /**
@@ -12664,7 +12646,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getFacetNameType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass FACET_NAME_TYPE = eINSTANCE.getFacetNameType();
 
         /**
@@ -12673,7 +12654,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FACET_NAME_TYPE__TEXT_CONTENT = eINSTANCE.getFacetNameType_TextContent();
 
         /**
@@ -12682,7 +12662,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FACET_NAME_TYPE__ID = eINSTANCE.getFacetNameType_Id();
 
         /**
@@ -12693,7 +12672,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getFacetType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass FACET_TYPE = eINSTANCE.getFacetType();
 
         /**
@@ -12702,7 +12680,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACET_TYPE__DESCRIPTION = eINSTANCE.getFacetType_Description();
 
         /**
@@ -12711,7 +12688,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACET_TYPE__DISPLAY_NAME = eINSTANCE.getFacetType_DisplayName();
 
         /**
@@ -12720,7 +12696,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACET_TYPE__ICON = eINSTANCE.getFacetType_Icon();
 
         /**
@@ -12729,7 +12704,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACET_TYPE__FACET_NAME = eINSTANCE.getFacetType_FacetName();
 
         /**
@@ -12738,7 +12712,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACET_TYPE__FACET_EXTENSION = eINSTANCE.getFacetType_FacetExtension();
 
         /**
@@ -12747,7 +12720,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FACET_TYPE__ID = eINSTANCE.getFacetType_Id();
 
         /**
@@ -12758,7 +12730,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getFactoryType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass FACTORY_TYPE = eINSTANCE.getFactoryType();
 
         /**
@@ -12767,7 +12738,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACTORY_TYPE__APPLICATION_FACTORY = eINSTANCE.getFactoryType_ApplicationFactory();
 
         /**
@@ -12776,7 +12746,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACTORY_TYPE__FACES_CONTEXT_FACTORY = eINSTANCE.getFactoryType_FacesContextFactory();
 
         /**
@@ -12785,7 +12754,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACTORY_TYPE__LIFECYCLE_FACTORY = eINSTANCE.getFactoryType_LifecycleFactory();
 
         /**
@@ -12794,7 +12762,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACTORY_TYPE__RENDER_KIT_FACTORY = eINSTANCE.getFactoryType_RenderKitFactory();
 
         /**
@@ -12803,7 +12770,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference FACTORY_TYPE__FACTORY_EXTENSION = eINSTANCE.getFactoryType_FactoryExtension();
 
         /**
@@ -12812,7 +12778,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FACTORY_TYPE__ID = eINSTANCE.getFactoryType_Id();
 
         /**
@@ -12823,7 +12788,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getFromActionType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass FROM_ACTION_TYPE = eINSTANCE.getFromActionType();
 
         /**
@@ -12832,7 +12796,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FROM_ACTION_TYPE__TEXT_CONTENT = eINSTANCE.getFromActionType_TextContent();
 
         /**
@@ -12841,7 +12804,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FROM_ACTION_TYPE__ID = eINSTANCE.getFromActionType_Id();
 
         /**
@@ -12852,7 +12814,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getFromOutcomeType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass FROM_OUTCOME_TYPE = eINSTANCE.getFromOutcomeType();
 
         /**
@@ -12861,7 +12822,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FROM_OUTCOME_TYPE__TEXT_CONTENT = eINSTANCE.getFromOutcomeType_TextContent();
 
         /**
@@ -12870,7 +12830,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FROM_OUTCOME_TYPE__ID = eINSTANCE.getFromOutcomeType_Id();
 
         /**
@@ -12881,7 +12840,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getFromViewIdType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass FROM_VIEW_ID_TYPE = eINSTANCE.getFromViewIdType();
 
         /**
@@ -12890,7 +12848,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FROM_VIEW_ID_TYPE__TEXT_CONTENT = eINSTANCE.getFromViewIdType_TextContent();
 
         /**
@@ -12899,7 +12856,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute FROM_VIEW_ID_TYPE__ID = eINSTANCE.getFromViewIdType_Id();
 
         /**
@@ -12910,7 +12866,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getIconType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass ICON_TYPE = eINSTANCE.getIconType();
 
         /**
@@ -12919,7 +12874,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference ICON_TYPE__SMALL_ICON = eINSTANCE.getIconType_SmallIcon();
 
         /**
@@ -12928,7 +12882,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference ICON_TYPE__LARGE_ICON = eINSTANCE.getIconType_LargeIcon();
 
         /**
@@ -12937,7 +12890,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute ICON_TYPE__LANG = eINSTANCE.getIconType_Lang();
 
         /**
@@ -12946,7 +12898,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute ICON_TYPE__ID = eINSTANCE.getIconType_Id();
 
         /**
@@ -12957,7 +12908,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getKeyClassType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass KEY_CLASS_TYPE = eINSTANCE.getKeyClassType();
 
         /**
@@ -12966,7 +12916,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute KEY_CLASS_TYPE__TEXT_CONTENT = eINSTANCE.getKeyClassType_TextContent();
 
         /**
@@ -12975,7 +12924,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute KEY_CLASS_TYPE__ID = eINSTANCE.getKeyClassType_Id();
 
         /**
@@ -12986,7 +12934,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getKeyType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass KEY_TYPE = eINSTANCE.getKeyType();
 
         /**
@@ -12995,7 +12942,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute KEY_TYPE__TEXT_CONTENT = eINSTANCE.getKeyType_TextContent();
 
         /**
@@ -13004,7 +12950,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute KEY_TYPE__ID = eINSTANCE.getKeyType_Id();
 
         /**
@@ -13015,7 +12960,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getLargeIconType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass LARGE_ICON_TYPE = eINSTANCE.getLargeIconType();
 
         /**
@@ -13024,7 +12968,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute LARGE_ICON_TYPE__TEXT_CONTENT = eINSTANCE.getLargeIconType_TextContent();
 
         /**
@@ -13033,7 +12976,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute LARGE_ICON_TYPE__ID = eINSTANCE.getLargeIconType_Id();
 
         /**
@@ -13044,7 +12986,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getLifecycleFactoryType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass LIFECYCLE_FACTORY_TYPE = eINSTANCE.getLifecycleFactoryType();
 
         /**
@@ -13053,7 +12994,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute LIFECYCLE_FACTORY_TYPE__TEXT_CONTENT = eINSTANCE.getLifecycleFactoryType_TextContent();
 
         /**
@@ -13062,7 +13002,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute LIFECYCLE_FACTORY_TYPE__ID = eINSTANCE.getLifecycleFactoryType_Id();
 
         /**
@@ -13073,7 +13012,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getLifecycleType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass LIFECYCLE_TYPE = eINSTANCE.getLifecycleType();
 
         /**
@@ -13082,7 +13020,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference LIFECYCLE_TYPE__PHASE_LISTENER = eINSTANCE.getLifecycleType_PhaseListener();
 
         /**
@@ -13091,7 +13028,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference LIFECYCLE_TYPE__LIFECYCLE_EXTENSION = eINSTANCE.getLifecycleType_LifecycleExtension();
 
         /**
@@ -13100,7 +13036,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute LIFECYCLE_TYPE__ID = eINSTANCE.getLifecycleType_Id();
 
         /**
@@ -13111,7 +13046,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getListEntriesType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass LIST_ENTRIES_TYPE = eINSTANCE.getListEntriesType();
 
         /**
@@ -13120,7 +13054,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference LIST_ENTRIES_TYPE__VALUE_CLASS = eINSTANCE.getListEntriesType_ValueClass();
 
         /**
@@ -13129,7 +13062,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference LIST_ENTRIES_TYPE__NULL_VALUE = eINSTANCE.getListEntriesType_NullValue();
 
         /**
@@ -13138,7 +13070,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference LIST_ENTRIES_TYPE__VALUE = eINSTANCE.getListEntriesType_Value();
 
         /**
@@ -13147,7 +13078,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute LIST_ENTRIES_TYPE__ID = eINSTANCE.getListEntriesType_Id();
 
         /**
@@ -13158,7 +13088,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getLocaleConfigType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass LOCALE_CONFIG_TYPE = eINSTANCE.getLocaleConfigType();
 
         /**
@@ -13167,7 +13096,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference LOCALE_CONFIG_TYPE__DEFAULT_LOCALE = eINSTANCE.getLocaleConfigType_DefaultLocale();
 
         /**
@@ -13176,7 +13104,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference LOCALE_CONFIG_TYPE__SUPPORTED_LOCALE = eINSTANCE.getLocaleConfigType_SupportedLocale();
 
         /**
@@ -13185,7 +13112,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute LOCALE_CONFIG_TYPE__ID = eINSTANCE.getLocaleConfigType_Id();
 
         /**
@@ -13196,7 +13122,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getManagedBeanClassType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass MANAGED_BEAN_CLASS_TYPE = eINSTANCE.getManagedBeanClassType();
 
         /**
@@ -13205,7 +13130,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute MANAGED_BEAN_CLASS_TYPE__TEXT_CONTENT = eINSTANCE.getManagedBeanClassType_TextContent();
 
         /**
@@ -13214,7 +13138,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute MANAGED_BEAN_CLASS_TYPE__ID = eINSTANCE.getManagedBeanClassType_Id();
 
         /**
@@ -13225,7 +13148,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getManagedBeanNameType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass MANAGED_BEAN_NAME_TYPE = eINSTANCE.getManagedBeanNameType();
 
         /**
@@ -13234,7 +13156,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute MANAGED_BEAN_NAME_TYPE__TEXT_CONTENT = eINSTANCE.getManagedBeanNameType_TextContent();
 
         /**
@@ -13243,7 +13164,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute MANAGED_BEAN_NAME_TYPE__ID = eINSTANCE.getManagedBeanNameType_Id();
 
         /**
@@ -13254,7 +13174,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getManagedBeanScopeType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass MANAGED_BEAN_SCOPE_TYPE = eINSTANCE.getManagedBeanScopeType();
 
         /**
@@ -13263,7 +13182,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute MANAGED_BEAN_SCOPE_TYPE__TEXT_CONTENT = eINSTANCE.getManagedBeanScopeType_TextContent();
 
         /**
@@ -13272,7 +13190,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute MANAGED_BEAN_SCOPE_TYPE__ID = eINSTANCE.getManagedBeanScopeType_Id();
 
         /**
@@ -13283,7 +13200,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getManagedBeanType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass MANAGED_BEAN_TYPE = eINSTANCE.getManagedBeanType();
 
         /**
@@ -13340,7 +13256,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference MANAGED_BEAN_TYPE__MANAGED_PROPERTY = eINSTANCE.getManagedBeanType_ManagedProperty();
 
         /**
@@ -13349,7 +13264,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference MANAGED_BEAN_TYPE__MAP_ENTRIES = eINSTANCE.getManagedBeanType_MapEntries();
 
         /**
@@ -13358,7 +13272,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference MANAGED_BEAN_TYPE__LIST_ENTRIES = eINSTANCE.getManagedBeanType_ListEntries();
 
         /**
@@ -13367,7 +13280,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference MANAGED_BEAN_TYPE__MANAGED_BEAN_EXTENSION = eINSTANCE.getManagedBeanType_ManagedBeanExtension();
 
         /**
@@ -13376,7 +13288,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EAttribute MANAGED_BEAN_TYPE__ID = eINSTANCE.getManagedBeanType_Id();
 
         /**
@@ -13387,7 +13298,6 @@
          * @see org.eclipse.jst.jsf.facesconfig.emf.impl.FacesConfigPackageImpl#getManagedPropertyType()
          * @generated
          */
-        @SuppressWarnings("hiding")
         EClass MANAGED_PROPERTY_TYPE = eINSTANCE.getManagedPropertyType();
 
         /**
@@ -13396,7 +13306,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference MANAGED_PROPERTY_TYPE__DESCRIPTION = eINSTANCE.getManagedPropertyType_Description();
 
         /**
@@ -13405,7 +13314,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference MANAGED_PROPERTY_TYPE__DISPLAY_NAME = eINSTANCE.getManagedPropertyType_DisplayName();
 
         /**
@@ -13414,7 +13322,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference MANAGED_PROPERTY_TYPE__ICON = eINSTANCE.getManagedPropertyType_Icon();
 
         /**
@@ -13423,7 +13330,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference MANAGED_PROPERTY_TYPE__PROPERTY_NAME = eINSTANCE.getManagedPropertyType_PropertyName();
 
         /**
@@ -13432,7 +13338,6 @@
          * <!-- end-user-doc -->
          * @generated
          */
-        @SuppressWarnings("hiding")
         EReference MANAGED_PROPERTY_TYPE__PROPERTY_CLASS = eINSTANCE.getManagedPropertyType_PropertyClass();
 
         /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ApplicationExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ApplicationExtensionTypeImpl.java
index ae261dd..7074886 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ApplicationExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ApplicationExtensionTypeImpl.java
@@ -31,7 +31,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/AttributeExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/AttributeExtensionTypeImpl.java
index f5fa4fc..6160573 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/AttributeExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/AttributeExtensionTypeImpl.java
@@ -31,6 +31,7 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/AttributeTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/AttributeTypeImpl.java
index 5aa9a82..1e51f42 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/AttributeTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/AttributeTypeImpl.java
@@ -228,6 +228,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newAttributeName 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -271,6 +274,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newAttributeClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -314,6 +320,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newDefaultValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -357,6 +366,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newSuggestedValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ComponentExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ComponentExtensionTypeImpl.java
index 7fffb18..d3ca134 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ComponentExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ComponentExtensionTypeImpl.java
@@ -31,6 +31,7 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ComponentTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ComponentTypeImpl.java
index 04fee15..b9c3f17 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ComponentTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ComponentTypeImpl.java
@@ -240,6 +240,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newComponentType 
+     * @param msgs 
+     * @return the notification chain
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -283,6 +286,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newComponentClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ConverterExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ConverterExtensionTypeImpl.java
index 7195480..ba8b1ce 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ConverterExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ConverterExtensionTypeImpl.java
@@ -31,7 +31,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ConverterTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ConverterTypeImpl.java
index d01e887..24df9d4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ConverterTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ConverterTypeImpl.java
@@ -240,6 +240,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newConverterId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -283,6 +286,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newConverterForClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -327,6 +333,9 @@
     /**
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+     * @param newConverterClass 
+     * @param msgs 
+     * @return the notification chain 
      * @generated
      */
 	public NotificationChain basicSetConverterClass(ConverterClassType newConverterClass, NotificationChain msgs) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/DocumentRootImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/DocumentRootImpl.java
index ce48b26..5379a84 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/DocumentRootImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/DocumentRootImpl.java
@@ -305,6 +305,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newActionListener 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -332,6 +335,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newApplication 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -359,6 +365,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newApplicationFactory 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -386,6 +395,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newAttribute 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -413,6 +425,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newAttributeClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -440,6 +455,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newAttributeExtension 
+     * @param msgs 
+     * @return the notification chiain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -467,6 +485,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newAttributeName 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -494,6 +515,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newComponent 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -521,6 +545,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newComponentClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -548,6 +575,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newComponentExtension 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -575,6 +605,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newComponentFamily 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -602,6 +635,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newComponentType 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -629,6 +665,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newConverter 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -656,6 +695,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newConverterClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -683,6 +725,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newConverterForClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -710,6 +755,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newConverterId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -737,6 +785,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newDefaultLocale 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -764,6 +815,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newDefaultRenderKitId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -791,6 +845,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newDefaultValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -818,6 +875,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newDescription 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -845,6 +905,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newDisplayName 
+     * @param msgs 
+     * @return the notification 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -872,6 +935,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFacesConfig 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -900,6 +966,9 @@
     /**
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+     * @param newFacesContextFactory 
+     * @param msgs 
+     * @return the notification chain
      * @generated
      */
 	public NotificationChain basicSetFacesContextFactory(FacesContextFactoryType newFacesContextFactory, NotificationChain msgs) {
@@ -926,6 +995,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFacet 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -953,6 +1025,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFacetExtension 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -980,6 +1055,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFacetName 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1007,6 +1085,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFactory 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1034,6 +1115,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFromAction 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1061,6 +1145,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFromOutcome 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1088,6 +1175,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFromViewId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1115,6 +1205,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newIcon 
+     * @param msgs 
+     * @return the notification  chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1142,6 +1235,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newKey 
+     * @param msgs 
+     * @return the notification chiainn 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1169,6 +1265,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newKeyClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1196,6 +1295,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newLargeIcon 
+     * @param msgs 
+     * @return the notification  chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1223,6 +1325,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newLifecycle 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1250,6 +1355,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newLifecycleFactory 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1277,6 +1385,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newListEntries 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1304,6 +1415,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newLocaleConfig 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1331,6 +1445,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newManagedBean 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1358,6 +1475,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newManagedBeanClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1385,6 +1505,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newManagedBeanName 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1412,6 +1535,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newManagedBeanScope 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1439,6 +1565,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newManagedProperty 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1466,6 +1595,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newMapEntries 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1493,6 +1625,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newMapEntry 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1520,6 +1655,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newMessageBundle 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1547,6 +1685,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newNavigationCase 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1574,6 +1715,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newNavigationHandler 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1601,6 +1745,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newNavigationRule 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1628,6 +1775,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newNullValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1655,6 +1805,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newPhaseListener 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1682,6 +1835,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newProperty 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1709,6 +1865,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newPropertyClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1736,6 +1895,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newPropertyExtension 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1763,6 +1925,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newPropertyName 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1790,6 +1955,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newPropertyResolver 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1817,6 +1985,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRedirect 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1844,6 +2015,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newReferencedBean 
+     * @param msgs 
+     * @return the notification chai 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1871,6 +2045,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newReferencedBeanClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1898,6 +2075,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newReferencedBeanName 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1925,6 +2105,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRenderer 
+     * @param msgs 
+     * @return the notification chain
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1952,6 +2135,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRendererClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -1979,6 +2165,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRendererExtension 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2006,6 +2195,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRendererType 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2033,6 +2225,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRenderKit 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2060,6 +2255,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRenderKitClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2087,6 +2285,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRenderKitFactory 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2114,6 +2315,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRenderKitId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2141,6 +2345,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newSmallIcon 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2168,6 +2375,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newStateManager 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2195,6 +2405,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newSuggestedValue 
+     * @param msgs 
+     * @return the notification chain
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2222,6 +2435,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newSupportedLocale 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2249,6 +2465,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newToViewId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2276,6 +2495,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newValidator 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2304,6 +2526,9 @@
     /**
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+     * @param newValidatorClass 
+     * @param msgs 
+     * @return the notification chain
      * @generated
      */
 	public NotificationChain basicSetValidatorClass(ValidatorClassType newValidatorClass, NotificationChain msgs) {
@@ -2330,6 +2555,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newValidatorId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2357,6 +2585,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2384,6 +2615,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newValueClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2411,6 +2645,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newVariableResolver 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -2438,6 +2675,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newViewHandler 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigExtensionTypeImpl.java
index a8309b7..cda65b5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigExtensionTypeImpl.java
@@ -31,7 +31,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigFactoryImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigFactoryImpl.java
index 19e687a..4a4683d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigFactoryImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigFactoryImpl.java
@@ -39,6 +39,7 @@
     /**
      * Creates the default factory implementation.
      * <!-- begin-user-doc -->
+     * @return the factory instance 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -1144,6 +1145,7 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @return the package 
 	 * <!-- end-user-doc -->
      * @deprecated
      * @generated
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigPackageImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigPackageImpl.java
index 650d82a..4e358ee 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigPackageImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacesConfigPackageImpl.java
@@ -755,6 +755,7 @@
      * <p>Invocation of this method will not affect any packages that have
      * already been initialized.
      * <!-- begin-user-doc -->
+     * @return the package 
 	 * <!-- end-user-doc -->
      * @see #eNS_URI
      * @see #createPackageContents()
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacetExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacetExtensionTypeImpl.java
index 59d690e..c40e8d5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacetExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacetExtensionTypeImpl.java
@@ -31,6 +31,7 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacetTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacetTypeImpl.java
index 2395e39..7f10ac5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacetTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FacetTypeImpl.java
@@ -193,6 +193,9 @@
     /**
      * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
+     * @param newFacetName 
+     * @param msgs 
+     * @return the notification chain 
      * @generated
      */
 	public NotificationChain basicSetFacetName(FacetNameType newFacetName, NotificationChain msgs) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FactoryExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FactoryExtensionTypeImpl.java
index ee5eb50..d7323c1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FactoryExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/FactoryExtensionTypeImpl.java
@@ -31,7 +31,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/IconTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/IconTypeImpl.java
index 33cbbc9..9eda36b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/IconTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/IconTypeImpl.java
@@ -136,6 +136,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newSmallIcon 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -179,6 +182,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newLargeIcon 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/LifecycleExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/LifecycleExtensionTypeImpl.java
index 1bf6c0e..862733f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/LifecycleExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/LifecycleExtensionTypeImpl.java
@@ -31,7 +31,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ListEntriesTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ListEntriesTypeImpl.java
index fd44ca1..9e013de 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ListEntriesTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ListEntriesTypeImpl.java
@@ -132,6 +132,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newValueClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/LocaleConfigTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/LocaleConfigTypeImpl.java
index cfb6e7a..1aa88d4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/LocaleConfigTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/LocaleConfigTypeImpl.java
@@ -120,6 +120,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newDefaultLocale 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedBeanExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedBeanExtensionTypeImpl.java
index 37e212a..eeb3090 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedBeanExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedBeanExtensionTypeImpl.java
@@ -31,7 +31,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedBeanTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedBeanTypeImpl.java
index 1f10d9d..a4bda90 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedBeanTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedBeanTypeImpl.java
@@ -252,6 +252,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newManagedBeanName 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -295,6 +298,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newManagedBeanClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -338,6 +344,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newManagedBeanScope 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -393,6 +402,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newMapEntries 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -436,6 +448,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newListEntries 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedPropertyTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedPropertyTypeImpl.java
index 11180b6..607baed 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedPropertyTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ManagedPropertyTypeImpl.java
@@ -240,6 +240,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newPropertyName 
+     * @param msgs 
+     * @return  the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -283,6 +286,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newPropertyClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -326,6 +332,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newMapEntries 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -369,6 +378,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newNullValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -412,6 +424,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -455,6 +470,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newListEntries 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/MapEntriesTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/MapEntriesTypeImpl.java
index 848cfd3..00ac1ec 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/MapEntriesTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/MapEntriesTypeImpl.java
@@ -132,6 +132,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newKeyClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -175,6 +178,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newValueClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/MapEntryTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/MapEntryTypeImpl.java
index 41e03e9..15e4128 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/MapEntryTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/MapEntryTypeImpl.java
@@ -127,6 +127,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newKey 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -170,6 +173,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newNullValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -213,6 +219,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationCaseTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationCaseTypeImpl.java
index e0ab707..e672071 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationCaseTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationCaseTypeImpl.java
@@ -216,6 +216,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFromAction 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -259,6 +262,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFromOutcome 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -302,6 +308,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newToViewId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -345,6 +354,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRedirect 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationRuleExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationRuleExtensionTypeImpl.java
index 3741ac4..efd8e32 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationRuleExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationRuleExtensionTypeImpl.java
@@ -31,7 +31,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationRuleTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationRuleTypeImpl.java
index e53b55b..63edf76 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationRuleTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/NavigationRuleTypeImpl.java
@@ -204,6 +204,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newFromViewId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/PropertyExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/PropertyExtensionTypeImpl.java
index 399d29c..40ebf97 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/PropertyExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/PropertyExtensionTypeImpl.java
@@ -31,6 +31,7 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/PropertyTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/PropertyTypeImpl.java
index 1465100..b363155 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/PropertyTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/PropertyTypeImpl.java
@@ -228,6 +228,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newPropertyName 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -271,6 +274,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newPropertyClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -314,6 +320,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newDefaultValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -357,6 +366,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newSuggestedValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ReferencedBeanTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ReferencedBeanTypeImpl.java
index f8e870c..83e7415 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ReferencedBeanTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ReferencedBeanTypeImpl.java
@@ -192,6 +192,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newReferencedBeanName 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -235,6 +238,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newReferencedBeanClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RenderKitExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RenderKitExtensionTypeImpl.java
index 8a6fd8b..d73ba4c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RenderKitExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RenderKitExtensionTypeImpl.java
@@ -31,7 +31,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RenderKitTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RenderKitTypeImpl.java
index fea37fa..65f84aa 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RenderKitTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RenderKitTypeImpl.java
@@ -216,6 +216,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRenderKitId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -259,6 +262,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRenderKitClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RendererExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RendererExtensionTypeImpl.java
index 23ad197..3311bbd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RendererExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RendererExtensionTypeImpl.java
@@ -31,6 +31,7 @@
 	 * <!-- end-user-doc -->
      * @generated
      */
+	@SuppressWarnings("hiding")
 	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RendererTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RendererTypeImpl.java
index 242635d..c1baf80 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RendererTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/RendererTypeImpl.java
@@ -240,6 +240,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newComponentFamily 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -283,6 +286,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRendererType 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -326,6 +332,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newRendererClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ResourceBundleTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ResourceBundleTypeImpl.java
index 07c68fd..1766c06 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ResourceBundleTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ResourceBundleTypeImpl.java
@@ -204,6 +204,7 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @return the base name 
      * <!-- end-user-doc -->
      * @generated
      */
@@ -242,6 +243,7 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @return the variable 
      * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ValidatorExtensionTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ValidatorExtensionTypeImpl.java
index d5dbc74..1e4a3e2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ValidatorExtensionTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ValidatorExtensionTypeImpl.java
@@ -31,7 +31,8 @@
      * <!-- end-user-doc -->
      * @generated
      */
-    public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
+    @SuppressWarnings("hiding")
+	public static final String copyright = "Copyright (c) 2005, 2006 IBM Corporation and others";
 
     /**
      * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ValidatorTypeImpl.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ValidatorTypeImpl.java
index ed7b1e7..54ae5f8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ValidatorTypeImpl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/impl/ValidatorTypeImpl.java
@@ -228,6 +228,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newValidatorId 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
@@ -271,6 +274,9 @@
 
     /**
      * <!-- begin-user-doc -->
+     * @param newValidatorClass 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
      * @generated
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/util/FacesConfigSwitch.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/util/FacesConfigSwitch.java
index ee17b20..02b8f45 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/util/FacesConfigSwitch.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/emf/util/FacesConfigSwitch.java
@@ -62,8 +62,9 @@
     /**
      * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
      * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+     * @param theEObject 
      * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * <!-- end-user-doc -->
      * @generated
      */
 	public Object doSwitch(EObject theEObject) {
@@ -73,8 +74,10 @@
     /**
      * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
      * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+     * @param theEClass 
+     * @param theEObject 
      * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * <!-- end-user-doc -->
      * @generated
      */
 	protected Object doSwitch(EClass theEClass, EObject theEObject) {
@@ -91,8 +94,10 @@
     /**
      * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
      * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
+     * @param classifierID 
+     * @param theEObject 
      * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * <!-- end-user-doc -->
      * @generated
      */
 	protected Object doSwitch(int classifierID, EObject theEObject) {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/Logger.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/Logger.java
index bfa8077..01ba896 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/Logger.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/Logger.java
@@ -37,15 +37,15 @@
 
 	private static final String TRACEFILTER_LOCATION = "/debug/tracefilter"; //$NON-NLS-1$
 
-	public static final int OK = IStatus.OK; // 0
-	public static final int INFO = IStatus.INFO; // 1
-	public static final int WARNING = IStatus.WARNING; // 2
-	public static final int ERROR = IStatus.ERROR; // 4
+	private static final int OK = IStatus.OK; // 0
+	private static final int INFO = IStatus.INFO; // 1
+	private static final int WARNING = IStatus.WARNING; // 2
+	private static final int ERROR = IStatus.ERROR; // 4
 
-	public static final int OK_DEBUG = 200 + OK;
-	public static final int INFO_DEBUG = 200 + INFO;
-	public static final int WARNING_DEBUG = 200 + WARNING;
-	public static final int ERROR_DEBUG = 200 + ERROR;
+	private static final int OK_DEBUG = 200 + OK;
+	private static final int INFO_DEBUG = 200 + INFO;
+	private static final int WARNING_DEBUG = 200 + WARNING;
+	private static final int ERROR_DEBUG = 200 + ERROR;
 
 	/**
 	 * Adds message to log.
@@ -82,6 +82,7 @@
 	 * Prints message to log if category matches /debug/tracefilter option.
 	 * @param message text to print
 	 * @param category category of the message, to be compared with /debug/tracefilter
+	 * @param exception 
 	 */
 	protected static void _trace(String category, String message, Throwable exception) {
 		if (isTracing(category)) {
@@ -120,26 +121,51 @@
 		return false;
 	}
 
+	/**
+	 * @param level
+	 * @param message
+	 */
 	public static void log(int level, String message) {
 		_log(level, message, null);
 	}
 
+	/**
+	 * @param level
+	 * @param message
+	 * @param exception
+	 */
 	public static void log(int level, String message, Throwable exception) {
 		_log(level, message, exception);
 	}
 	
+	/**
+	 * @param source
+	 * @param message
+	 */
 	public static void log(Object source, String message) {
 		doLog(source, message, null);
 	}
 
+	/**
+	 * @param source
+	 * @param message
+	 * @param throwable
+	 */
 	public static void log(Object source, String message, Throwable throwable) {
 		doLog(source, message, throwable);
 	}
 
+	/**
+	 * @param source
+	 * @param throwable
+	 */
 	public static void log(Object source, Throwable throwable) {
 		doLog(source, null, throwable);
 	}
 	
+	/**
+	 * @param message
+	 */
 	public static void log(String message) {
 		doLog(message, null);
 	}
@@ -162,22 +188,42 @@
 		return buffer.toString();
 	}
 
+	/**
+	 * @param message
+	 * @param exception
+	 */
 	public static void logException(String message, Throwable exception) {
 		_log(ERROR, message, exception);
 	}
 
+	/**
+	 * @param exception
+	 */
 	public static void logException(Throwable exception) {
 		_log(ERROR, exception.getMessage(), exception);
 	}
 
+	/**
+	 * @param category
+	 * @param message
+	 * @param exception
+	 */
 	public static void traceException(String category, String message, Throwable exception) {
 		_trace(category, message, exception);
 	}
 
+	/**
+	 * @param category
+	 * @param exception
+	 */
 	public static void traceException(String category, Throwable exception) {
 		_trace(category, exception.getMessage(), exception);
 	}
 
+	/**
+	 * @param category
+	 * @param message
+	 */
 	public static void trace(String category, String message) {
 		_trace(category, message, null);
 	}
@@ -186,7 +232,7 @@
 		return FacesConfigPlugin.getPlugin();
 	}
 
-	public static Plugin getPlugin() {
+	private static Plugin getPlugin() {
 
 		if (fPlugin == null) {
 			fPlugin = getFacesPlugin();
@@ -194,7 +240,10 @@
 		return fPlugin;
 	}
 
-	public static String getPluginId() {
+	/**
+	 * @return the plugin id
+	 */
+	private static String getPluginId() {
 
 		if (fPluginId == null) {
 			fPluginId = ((Plugin) (FacesConfigPlugin.getPlugin())).getBundle().getSymbolicName() ;
@@ -222,6 +271,11 @@
 		}
 	}
 	
+	/**
+	 * @param category
+	 * @param source
+	 * @param message
+	 */
 	public static void trace(String category, Object source, String message) {
 		doTrace(category, source, message);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/nls/Messages.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/nls/Messages.java
index 746a08f..b5897e3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/nls/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/nls/Messages.java
@@ -12,6 +12,10 @@
 
 import org.eclipse.osgi.util.NLS;
 
+/**
+ * @author cbateman
+ *
+ */
 public final class Messages extends NLS {
 
 	private static final String BUNDLE_NAME = "org.eclipse.jst.jsf.facesconfig.internal.nls.messages";//$NON-NLS-1$
@@ -20,347 +24,1382 @@
 		// Do not instantiate
 	}
 
+	/**
+	 * see messages.properties
+	 */
 	public static String Source_UI_;
+	/**
+	 * see messages.properties
+	 */
 	public static String FaceConfigEditor_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String Overview_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String Application_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String Factory_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String Component_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String Converter_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String ManagedBean_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String NavigationRule_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String ReferencedBean_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String RenderKit_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String Lifecycle_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String Validator_Page_Title;
+	/**
+	 * see messages.properties
+	 */
 	public static String MANAGEDBEAN_MAIN_SEC_TITLE;
+	/**
+	 * see messages.properties
+	 */
 	public static String MANAGEDBEAN_MAIN_SEC_DESC;
+	/**
+	 * see messages.properties
+	 */
 	public static String Invalid_Config_File;
+	/**
+	 * see messages.properties
+	 */
 	public static String OPEN_TO_FACESCONFIG_SOURCE_PAGE_MENU_LABEL;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_CreateChild_text;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_CreateChild_text2;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_CreateChild_tooltip;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_CreateChild_description;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_CreateSibling_description;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyDescriptor_description;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ActionListenerType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationFactoryType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeExtensionType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeNameType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentClassType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentExtensionType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentTypeType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ConverterType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DefaultLocaleType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DescriptionType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DisplayNameType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesContextFactoryType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FactoryType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_IconType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_LifecycleFactoryType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_LifecycleType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ListEntriesType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_LocaleConfigType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MapEntriesType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MapEntryType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MessageBundleType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationCaseType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationHandlerType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationRuleType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NullValueType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PhaseListenerType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyExtensionType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyResolverType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RedirectType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ReferencedBeanType_type;
+	/**
+	 * see messages.properties
+	 */
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererExtensionType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitFactoryType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_StateManagerType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedComponentClassType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedComponentTypeType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedLocaleType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValidatorType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValueType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_VariableResolverType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ViewHandlerType_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_Unknown_type;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ActionListenerType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ActionListenerType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationFactoryType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationFactoryType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationType_actionListener_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationType_messageBundle_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationType_navigationHandler_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationType_viewHandler_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationType_stateManager_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationType_propertyResolver_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationType_variableResolver_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationType_localeConfig_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ApplicationType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeExtensionType_mixed_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeExtensionType_group_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeExtensionType_any_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeExtensionType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeNameType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeNameType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeType_attributeName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeType_attributeExtension_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeType_attributeClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeType_defaultValue_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_AttributeType_suggestedValue_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentClassType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentClassType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentExtensionType_mixed_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentExtensionType_group_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentExtensionType_any_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentExtensionType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentType_componentType_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentType_componentClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentType_attribute_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentType_property_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentType_componentExtension_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentTypeType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ComponentTypeType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ConverterType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ConverterType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ConverterType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ConverterType_attribute_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ConverterType_property_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ConverterType_converterClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ConverterType_converterForClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ConverterType_converterId_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ConverterType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DefaultLocaleType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DefaultLocaleType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DescriptionType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DescriptionType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DescriptionType_lang_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DisplayNameType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DisplayNameType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DisplayNameType_lang_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_mixed_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_xMLNSPrefixMap_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_xSISchemaLocation_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_actionListener_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_application_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_applicationFactory_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_attribute_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_attributeExtension_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_attributeName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_component_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_componentClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_componentExtension_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_componentType_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_converter_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_defaultLocale_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_facesConfig_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_facesContextFactory_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_factory_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_lifecycle_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_lifecycleFactory_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_listEntries_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_localeConfig_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_managedBean_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_managedProperty_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_mapEntries_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_mapEntry_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_messageBundle_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_navigationCase_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_navigationHandler_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_navigationRule_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_nullValue_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_phaseListener_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_property_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_propertyExtension_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_propertyResolver_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_redirect_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_referencedBean_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_renderer_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_rendererExtension_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_renderKit_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_renderKitFactory_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_stateManager_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_supportedComponentClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_supportedComponentType_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_supportedLocale_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_validator_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_variableResolver_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_DocumentRoot_viewHandler_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_application_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_factory_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_component_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_converter_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_managedBean_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_navigationRule_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_referencedBean_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_renderKit_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_lifecycle_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_validator_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesConfigType_xmlns00000_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesContextFactoryType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FacesContextFactoryType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FactoryType_applicationFactory_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FactoryType_facesContextFactory_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FactoryType_lifecycleFactory_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FactoryType_renderKitFactory_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_FactoryType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_IconType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_IconType_lang_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_IconType_largeIcon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_IconType_smallIcon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_LifecycleFactoryType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_LifecycleFactoryType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_LifecycleType_phaseListener_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_LifecycleType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ListEntriesType_nullValue_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ListEntriesType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ListEntriesType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ListEntriesType_valueClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_LocaleConfigType_defaultLocale_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_LocaleConfigType_supportedLocale_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_LocaleConfigType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_managedProperty_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_mapEntries_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_listEntries_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_managedBeanClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_managedBeanName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedBeanType_managedBeanScope_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_mapEntries_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_listEntries_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_nullValue_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_propertyClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_propertyName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ManagedPropertyType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MapEntriesType_mapEntry_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MapEntriesType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MapEntriesType_keyClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MapEntriesType_valueClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MapEntryType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MapEntryType_key_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MapEntryType_nullValue_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MapEntryType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MessageBundleType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_MessageBundleType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationCaseType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationCaseType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationCaseType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationCaseType_redirect_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationCaseType_fromAction_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationCaseType_fromOutcome_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationCaseType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationCaseType_toViewId_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationHandlerType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationHandlerType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationRuleType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationRuleType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationRuleType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationRuleType_navigationCase_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationRuleType_fromViewId_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NavigationRuleType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_NullValueType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PhaseListenerType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PhaseListenerType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyExtensionType_mixed_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyExtensionType_group_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyExtensionType_any_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyExtensionType_id_feature;
+	/**
+	 * see messages.properties
+	 */
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyResolverType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyResolverType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyType_propertyExtension_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyType_defaultValue_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyType_propertyClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyType_propertyName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_PropertyType_suggestedValue_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RedirectType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ReferencedBeanType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ReferencedBeanType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ReferencedBeanType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ReferencedBeanType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ReferencedBeanType_referencedBeanClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ReferencedBeanType_referencedBeanName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererExtensionType_mixed_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererExtensionType_group_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererExtensionType_any_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererExtensionType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_attribute_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_supportedComponentType_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_supportedComponentClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_rendererExtension_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_rendererClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RendererType_rendererType_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitFactoryType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitFactoryType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitType_renderer_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitType_renderKitClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_RenderKitType_renderKitId_feature;
+	/**
+	 * see messages.properties
+	 */
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_StateManagerType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_StateManagerType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedComponentClassType_componentClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedComponentClassType_attributeName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedComponentClassType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedComponentTypeType_componentType_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedComponentTypeType_attributeName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedComponentTypeType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedLocaleType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_SupportedLocaleType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValidatorType_description_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValidatorType_displayName_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValidatorType_icon_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValidatorType_attribute_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValidatorType_property_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValidatorType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValidatorType_validatorClass_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValidatorType_validatorId_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValueType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ValueType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_VariableResolverType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_VariableResolverType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ViewHandlerType_value_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_ViewHandlerType_id_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String _UI_Unknown_feature;
+	/**
+	 * see messages.properties
+	 */
 	public static String scValidation_duplicate_definition;
 
 	static {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ActionListenerTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ActionListenerTranslator.java
index 51bdd31..3fafae5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ActionListenerTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ActionListenerTranslator.java
@@ -21,6 +21,10 @@
  *
  */
 public class ActionListenerTranslator extends Translator {
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ActionListenerTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);//$NON-NLS-1$
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ApplicationExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ApplicationExtensionTranslator.java
index 98592b0..a057ebc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ApplicationExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ApplicationExtensionTranslator.java
@@ -12,8 +12,18 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+/**
+ * Transtor for application extensions
+ * 
+ * @author cbateman
+ *
+ */
 public class ApplicationExtensionTranslator extends ExtensionTypeTranslator {
 
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public ApplicationExtensionTranslator(String domNameAndPath,
             EStructuralFeature feature) {
         super(domNameAndPath, feature);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ApplicationTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ApplicationTranslator.java
index b1f409e..4a3fb53 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ApplicationTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ApplicationTranslator.java
@@ -22,6 +22,10 @@
  *
  */
 public class ApplicationTranslator extends Translator {
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ApplicationTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);//$NON-NLS-1$
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeClassTranslator.java
index 3674af8..136513a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeClassTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for attributes
+ *
+ */
 public class AttributeClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public AttributeClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeExtensionTranslator.java
index 8820643..b9d7411 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeExtensionTranslator.java
@@ -18,6 +18,10 @@
  *
  */
 public class AttributeExtensionTranslator extends ExtensionTypeTranslator {
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public AttributeExtensionTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);//$NON-NLS-1$
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeNameTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeNameTranslator.java
index 920ec61..a25cf1f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeNameTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeNameTranslator.java
@@ -14,8 +14,18 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for attribute names
+ * 
+ * @author cbateman
+ *
+ */
 public class AttributeNameTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public AttributeNameTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeTranslator.java
index 73353d4..91b1a2a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/AttributeTranslator.java
@@ -23,6 +23,10 @@
  */
 public class AttributeTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public AttributeTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/BaseNameTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/BaseNameTranslator.java
index 4bc43b0..b1f9ef8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/BaseNameTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/BaseNameTranslator.java
@@ -14,8 +14,18 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the base name on a message bundle
+ * 
+ * @author cbateman
+ *
+ */
 public class BaseNameTranslator extends Translator {
 
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public BaseNameTranslator(String domNameAndPath, EStructuralFeature feature) {
         super(domNameAndPath, feature);
     }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentClassTranslator.java
index 03c6717..d625f48 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentClassTranslator.java
@@ -14,8 +14,18 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Component class translator
+ * 
+ * @author cbateman
+ *
+ */
 public class ComponentClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ComponentClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentExtensionTranslator.java
index aa9c049..759aa58 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentExtensionTranslator.java
@@ -18,6 +18,10 @@
  *
  */
 public class ComponentExtensionTranslator extends ExtensionTypeTranslator {
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ComponentExtensionTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentFamilyTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentFamilyTranslator.java
index b9b893c..8d7328b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentFamilyTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentFamilyTranslator.java
@@ -14,8 +14,17 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the component family property
+ * @author cbateman
+ *
+ */
 public class ComponentFamilyTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ComponentFamilyTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentTranslator.java
index ab9a4c9..9f25e02 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentTranslator.java
@@ -21,6 +21,10 @@
  *
  */
 public class ComponentTranslator extends Translator {
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ComponentTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);//$NON-NLS-1$
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentTypeTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentTypeTranslator.java
index e3fc73c..06554ae 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentTypeTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ComponentTypeTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translater of components
+ *
+ */
 public class ComponentTypeTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ComponentTypeTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterClassTranslator.java
index addd797..39c579e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterClassTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for converters
+ *
+ */
 public class ConverterClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ConverterClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterExtensionTranslator.java
index 4cdf304..45052c5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterExtensionTranslator.java
@@ -12,8 +12,18 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+/**
+ * Translator for extension data on converters
+ * 
+ * @author cbateman
+ *
+ */
 public class ConverterExtensionTranslator extends ExtensionTypeTranslator 
 {
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public ConverterExtensionTranslator(String domNameAndPath,
             EStructuralFeature feature) 
     {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterForClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterForClassTranslator.java
index 6be272d..2cc7228 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterForClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterForClassTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * ConverterForClass translator
+ *
+ */
 public class ConverterForClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ConverterForClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterIdTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterIdTranslator.java
index 6c72e1b..5683471 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterIdTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterIdTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for converter id
+ *
+ */
 public class ConverterIdTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ConverterIdTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterTranslator.java
index 69a728b..433eb39 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ConverterTranslator.java
@@ -22,6 +22,10 @@
  *
  */
 public class ConverterTranslator extends Translator {
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ConverterTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature); //$NON-NLS-1$
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultLocaleTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultLocaleTranslator.java
index 54be3eb..7ed253f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultLocaleTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultLocaleTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for default locale
+ *
+ */
 public class DefaultLocaleTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public DefaultLocaleTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultRenderKitIdTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultRenderKitIdTranslator.java
index 595fcf0..634e8e5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultRenderKitIdTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultRenderKitIdTranslator.java
@@ -22,6 +22,10 @@
  *
  */
 public class DefaultRenderKitIdTranslator extends Translator {
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public DefaultRenderKitIdTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature); //$NON-NLS-1$
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultValueTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultValueTranslator.java
index 4b63e7f..7dd543d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultValueTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DefaultValueTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for default values
+ *
+ */
 public class DefaultValueTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public DefaultValueTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DescriptionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DescriptionTranslator.java
index 23bf481..7e1ed5e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DescriptionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DescriptionTranslator.java
@@ -22,6 +22,10 @@
  *
  */
 public class DescriptionTranslator extends Translator {
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public DescriptionTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DisplayNameTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DisplayNameTranslator.java
index 2d913b9..1587631 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DisplayNameTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DisplayNameTranslator.java
@@ -23,6 +23,10 @@
  */
 public class DisplayNameTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public DisplayNameTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DynamicElementTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DynamicElementTranslator.java
index 686a418..4254f25 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DynamicElementTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/DynamicElementTranslator.java
@@ -371,9 +371,8 @@
             return super.isManagedByParent();
         }
 
-        public boolean isMapFor(Object feature, Object oldValue, Object newValue) {
-            // TODO Auto-generated method stub
-            return super.isMapFor(feature, oldValue, newValue);
+        public boolean isMapFor(Object feature1, Object oldValue, Object newValue) {
+            return super.isMapFor(feature1, oldValue, newValue);
         }
 
         public boolean isMultiValued() {
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ELResolverTypeTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ELResolverTypeTranslator.java
index c42499c..2f90aa6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ELResolverTypeTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ELResolverTypeTranslator.java
@@ -14,7 +14,15 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * The el-resolver translator
+ *
+ */
 public class ELResolverTypeTranslator extends Translator {
+    /**
+     * @param domNameAndPath
+     * @param aFeature
+     */
     public ELResolverTypeTranslator(String domNameAndPath, EStructuralFeature aFeature) {
         super(domNameAndPath, aFeature);
     }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ExtensionTypeTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ExtensionTypeTranslator.java
index 9e1f0b5..7c3f71d 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ExtensionTypeTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ExtensionTypeTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for extension types
+ *
+ */
 public abstract class ExtensionTypeTranslator extends Translator 
 {
+    /**
+     * @param domNameAndPath
+     * @param aFeature
+     */
     public ExtensionTypeTranslator(String domNameAndPath, EStructuralFeature aFeature) 
     {
         super(domNameAndPath, aFeature);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesConfigExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesConfigExtensionTranslator.java
index 7b6419e..967c24b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesConfigExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesConfigExtensionTranslator.java
@@ -12,8 +12,16 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+/**
+ * Translator for FacesConfig extension data
+ *
+ */
 public class FacesConfigExtensionTranslator extends ExtensionTypeTranslator {
 
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public FacesConfigExtensionTranslator(String domNameAndPath,
             EStructuralFeature feature) {
         super(domNameAndPath, feature);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesConfigTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesConfigTranslator.java
index d24bef9..3cfb5d7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesConfigTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesConfigTranslator.java
@@ -22,8 +22,14 @@
  */
 public class FacesConfigTranslator extends RootTranslator {
 	
+	/**
+	 * Instance of translator
+	 */
 	public static FacesConfigTranslator INSTANCE = new FacesConfigTranslator();
 
+    /**
+     * Default constructor
+     */
     public FacesConfigTranslator() {
 		super("faces-config", FacesConfigPackage.eINSTANCE.getFacesConfigType()); //$NON-NLS-1$
     }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesContextFactoryTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesContextFactoryTranslator.java
index 32ba41e..ad48da5 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesContextFactoryTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacesContextFactoryTranslator.java
@@ -23,6 +23,10 @@
  */
 public class FacesContextFactoryTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public FacesContextFactoryTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetExtensionTranslator.java
index 5199804..659545f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetExtensionTranslator.java
@@ -18,6 +18,10 @@
  *
  */
 public class FacetExtensionTranslator extends ExtensionTypeTranslator {
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public FacetExtensionTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature); //$NON-NLS-1$
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetNameTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetNameTranslator.java
index 27b2aa1..668a1e2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetNameTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetNameTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for facet name
+ *
+ */
 public class FacetNameTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public FacetNameTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetTranslator.java
index b1dd5f3..aea013b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FacetTranslator.java
@@ -23,6 +23,10 @@
  */
 public class FacetTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public FacetTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FactoryExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FactoryExtensionTranslator.java
index 4b8ab83..0b0cec6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FactoryExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FactoryExtensionTranslator.java
@@ -12,8 +12,16 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+/**
+ * The factory extension translator
+ *
+ */
 public class FactoryExtensionTranslator extends ExtensionTypeTranslator {
 
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public FactoryExtensionTranslator(String domNameAndPath,
             EStructuralFeature feature) {
         super(domNameAndPath, feature);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FactoryTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FactoryTranslator.java
index 0dca7e6..d178277 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FactoryTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FactoryTranslator.java
@@ -22,6 +22,10 @@
  */
 public class FactoryTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public FactoryTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromActionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromActionTranslator.java
index 0e8296e..1c7383e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromActionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromActionTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for FromAction
+ *
+ */
 public class FromActionTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public FromActionTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromOutcomeTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromOutcomeTranslator.java
index 3a8799b..7928116 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromOutcomeTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromOutcomeTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for FromOutcome
+ *
+ */
 public class FromOutcomeTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public FromOutcomeTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromViewIdTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromViewIdTranslator.java
index 75ba470..a9790bd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromViewIdTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/FromViewIdTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for FromViewId
+ *
+ */
 public class FromViewIdTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public FromViewIdTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/IAnyTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/IAnyTranslator.java
index 5591d3a..be54850 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/IAnyTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/IAnyTranslator.java
@@ -27,6 +27,7 @@
      * based on the contents of the Element node's
      * runtime attribute values
      * 
+     * @param element 
      * @return a list of translators for attributes
      * of dynamic elements
      */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/IconTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/IconTranslator.java
index 62b468a..add34b6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/IconTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/IconTranslator.java
@@ -23,6 +23,10 @@
  */
 public class IconTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public IconTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/KeyClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/KeyClassTranslator.java
index 6a17832..420a75b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/KeyClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/KeyClassTranslator.java
@@ -14,8 +14,18 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for key class property
+ * 
+ * @author cbateman
+ *
+ */
 public class KeyClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public KeyClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/KeyTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/KeyTranslator.java
index ed79167..9f783af 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/KeyTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/KeyTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for key property
+ *
+ */
 public class KeyTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public KeyTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LargeIconTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LargeIconTranslator.java
index 97245bb..f19bd05 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LargeIconTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LargeIconTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for large icon property
+ *
+ */
 public class LargeIconTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public LargeIconTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleExtensionTranslator.java
index 306e3dd..fa99a18 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleExtensionTranslator.java
@@ -12,8 +12,16 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+/**
+ * Translator for lifecycle extensions
+ *
+ */
 public class LifecycleExtensionTranslator extends ExtensionTypeTranslator {
 
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public LifecycleExtensionTranslator(String domNameAndPath,
             EStructuralFeature feature) {
         super(domNameAndPath, feature);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleFactoryTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleFactoryTranslator.java
index 5626273..6db3db3 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleFactoryTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleFactoryTranslator.java
@@ -23,6 +23,10 @@
  */
 public class LifecycleFactoryTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public LifecycleFactoryTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleTranslator.java
index d35878a..0fd0e95 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LifecycleTranslator.java
@@ -22,6 +22,10 @@
  */
 public class LifecycleTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public LifecycleTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ListEntriesTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ListEntriesTranslator.java
index d978bb1..d7027df 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ListEntriesTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ListEntriesTranslator.java
@@ -23,6 +23,10 @@
  */
 public class ListEntriesTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ListEntriesTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LocaleConfigTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LocaleConfigTranslator.java
index f779f21..26e8075 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LocaleConfigTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/LocaleConfigTranslator.java
@@ -23,6 +23,10 @@
  */
 public class LocaleConfigTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public LocaleConfigTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanClassTranslator.java
index 19ab4db..a3b4a8a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanClassTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the managed bean class
+ *
+ */
 public class ManagedBeanClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ManagedBeanClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanExtensionTranslator.java
index d354614..49a8be7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanExtensionTranslator.java
@@ -12,8 +12,16 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+/**
+ * Translator for managed bean extensions
+ *
+ */
 public class ManagedBeanExtensionTranslator extends ExtensionTypeTranslator {
 
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public ManagedBeanExtensionTranslator(String domNameAndPath,
             EStructuralFeature feature) {
         super(domNameAndPath, feature);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanNameTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanNameTranslator.java
index 358a9bb..918af30 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanNameTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanNameTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for managed bean name
+ *
+ */
 public class ManagedBeanNameTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ManagedBeanNameTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanScopeTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanScopeTranslator.java
index 0e23a0e..6b94368 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanScopeTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanScopeTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for managed bean scope
+ *
+ */
 public class ManagedBeanScopeTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ManagedBeanScopeTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanTranslator.java
index d729ae7..b65ccab 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedBeanTranslator.java
@@ -23,6 +23,10 @@
  */
 public class ManagedBeanTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ManagedBeanTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedPropertyTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedPropertyTranslator.java
index 16728e0..85da11e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedPropertyTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ManagedPropertyTranslator.java
@@ -23,6 +23,10 @@
  */
 public class ManagedPropertyTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ManagedPropertyTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MapEntriesTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MapEntriesTranslator.java
index 869388d..a1b16fb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MapEntriesTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MapEntriesTranslator.java
@@ -23,6 +23,10 @@
  */
 public class MapEntriesTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public MapEntriesTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MapEntryTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MapEntryTranslator.java
index 20cf05e..1dc3ebb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MapEntryTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MapEntryTranslator.java
@@ -23,6 +23,10 @@
  */
 public class MapEntryTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public MapEntryTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MessageBundleTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MessageBundleTranslator.java
index 3d128ef..03834e4 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MessageBundleTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/MessageBundleTranslator.java
@@ -23,6 +23,10 @@
  */
 public class MessageBundleTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public MessageBundleTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationCaseTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationCaseTranslator.java
index e3fb19d..50dc244 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationCaseTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationCaseTranslator.java
@@ -23,6 +23,10 @@
  */
 public class NavigationCaseTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public NavigationCaseTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationHandlerTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationHandlerTranslator.java
index 9c563dc..584f914 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationHandlerTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationHandlerTranslator.java
@@ -23,6 +23,10 @@
  */
 public class NavigationHandlerTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public NavigationHandlerTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);//$NON-NLS-1$
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationRuleExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationRuleExtensionTranslator.java
index 660aa4c..4d18efc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationRuleExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationRuleExtensionTranslator.java
@@ -12,8 +12,16 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+/**
+ * Translator for navigation rule extensions
+ *
+ */
 public class NavigationRuleExtensionTranslator extends ExtensionTypeTranslator {
 
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public NavigationRuleExtensionTranslator(String domNameAndPath,
             EStructuralFeature feature) {
         super(domNameAndPath, feature);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationRuleTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationRuleTranslator.java
index 1b817be..b6c261e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationRuleTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NavigationRuleTranslator.java
@@ -23,6 +23,10 @@
  */
 public class NavigationRuleTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public NavigationRuleTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NullValueTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NullValueTranslator.java
index 1003681..e4507cd 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NullValueTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/NullValueTranslator.java
@@ -22,6 +22,10 @@
  */
 public class NullValueTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public NullValueTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature, EMPTY_TAG|END_TAG_NO_INDENT);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PhaseListenerTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PhaseListenerTranslator.java
index 716c174..1e1b975 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PhaseListenerTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PhaseListenerTranslator.java
@@ -23,6 +23,10 @@
  */
 public class PhaseListenerTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public PhaseListenerTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyClassTranslator.java
index fde7f64..e9c9b4f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyClassTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the property class
+ *
+ */
 public class PropertyClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public PropertyClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyExtensionTranslator.java
index b063d8a..8889939 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyExtensionTranslator.java
@@ -19,6 +19,10 @@
  */
 public class PropertyExtensionTranslator extends ExtensionTypeTranslator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public PropertyExtensionTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyNameTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyNameTranslator.java
index 36dc64e..afab1cf 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyNameTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyNameTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the property name
+ *
+ */
 public class PropertyNameTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public PropertyNameTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyResolverTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyResolverTranslator.java
index bfe0a93..62d4937 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyResolverTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyResolverTranslator.java
@@ -23,6 +23,10 @@
  */
 public class PropertyResolverTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public PropertyResolverTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyTranslator.java
index fd113b1..060a697 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/PropertyTranslator.java
@@ -23,6 +23,10 @@
  */
 public class PropertyTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public PropertyTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RedirectTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RedirectTranslator.java
index 449bf10..29b73b2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RedirectTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RedirectTranslator.java
@@ -15,8 +15,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the redirect
+ *
+ */
 public class RedirectTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public RedirectTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature, EMPTY_TAG|END_TAG_NO_INDENT);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanClassTranslator.java
index e0da5c4..a6f0aee 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanClassTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the reference bean class
+ *
+ */
 public class ReferencedBeanClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ReferencedBeanClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanNameTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanNameTranslator.java
index 9c0d738..5f03f92 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanNameTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanNameTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the referenced bean name
+ *
+ */
 public class ReferencedBeanNameTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ReferencedBeanNameTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanTranslator.java
index 6f3c165..7e654de 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ReferencedBeanTranslator.java
@@ -23,6 +23,10 @@
  */
 public class ReferencedBeanTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ReferencedBeanTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitClassTranslator.java
index a22f5d8..44b4160 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitClassTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the render kit class property
+ *
+ */
 public class RenderKitClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public RenderKitClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitExtensionTranslator.java
index 3d86bf4..fd2d126 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitExtensionTranslator.java
@@ -12,8 +12,16 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+/**
+ * Translator for the extension to renderkit property
+ *
+ */
 public class RenderKitExtensionTranslator extends ExtensionTypeTranslator {
 
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public RenderKitExtensionTranslator(String domNameAndPath,
             EStructuralFeature feature) {
         super(domNameAndPath, feature);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitFactoryTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitFactoryTranslator.java
index 0e74343..9029c56 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitFactoryTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitFactoryTranslator.java
@@ -23,6 +23,10 @@
  */
 public class RenderKitFactoryTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public RenderKitFactoryTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitIdTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitIdTranslator.java
index c9185a7..9fb0556 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitIdTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitIdTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the renderkit id
+ *
+ */
 public class RenderKitIdTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public RenderKitIdTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitTranslator.java
index 09969cd..eca2dec 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RenderKitTranslator.java
@@ -23,6 +23,10 @@
  */
 public class RenderKitTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public RenderKitTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererClassTranslator.java
index 5d947e6..a35139e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererClassTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for renderer class
+ *
+ */
 public class RendererClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public RendererClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererExtensionTranslator.java
index 420d33b..24d900f 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererExtensionTranslator.java
@@ -19,6 +19,10 @@
  */
 public class RendererExtensionTranslator extends ExtensionTypeTranslator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public RendererExtensionTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererTranslator.java
index 26e2f5c..05213fc 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererTranslator.java
@@ -23,6 +23,10 @@
  */
 public class RendererTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public RendererTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererTypeTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererTypeTranslator.java
index 9c7cfd8..4eb92ac 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererTypeTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/RendererTypeTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the renderer type
+ *
+ */
 public class RendererTypeTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public RendererTypeTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ResourceBundleTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ResourceBundleTranslator.java
index 7dba0c0..646def8 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ResourceBundleTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ResourceBundleTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for resource bundle element 
+ *
+ */
 public class ResourceBundleTranslator extends Translator {
 
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public ResourceBundleTranslator(String domNameAndPath,
             EStructuralFeature feature) {
         super(domNameAndPath, feature);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SmallIconTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SmallIconTranslator.java
index e4cba86..16ef06b 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SmallIconTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SmallIconTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the small icon property
+ *
+ */
 public class SmallIconTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public SmallIconTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/StateManagerTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/StateManagerTranslator.java
index ddcc3b4..aa4bd50 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/StateManagerTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/StateManagerTranslator.java
@@ -23,6 +23,10 @@
  */
 public class StateManagerTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public StateManagerTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SuggestedValueTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SuggestedValueTranslator.java
index 3cfdbe7..55a3b30 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SuggestedValueTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SuggestedValueTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the suggested value property
+ *
+ */
 public class SuggestedValueTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public SuggestedValueTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SupportedLocaleTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SupportedLocaleTranslator.java
index 3cb59aa..07d2d4a 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SupportedLocaleTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/SupportedLocaleTranslator.java
@@ -23,6 +23,10 @@
  */
 public class SupportedLocaleTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public SupportedLocaleTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ToViewIdTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ToViewIdTranslator.java
index 38180f7..16811a6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ToViewIdTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ToViewIdTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the toviewid property
+ *
+ */
 public class ToViewIdTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ToViewIdTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorClassTranslator.java
index ff0d4db..f9838a2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorClassTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the validator class property
+ *
+ */
 public class ValidatorClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ValidatorClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorExtensionTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorExtensionTranslator.java
index 95933a0..cac0642 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorExtensionTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorExtensionTranslator.java
@@ -12,8 +12,16 @@
 
 import org.eclipse.emf.ecore.EStructuralFeature;
 
+/**
+ * Translator for the validator extension
+ *
+ */
 public class ValidatorExtensionTranslator extends ExtensionTypeTranslator 
 {
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public ValidatorExtensionTranslator(String domNameAndPath,
             EStructuralFeature feature) {
         super(domNameAndPath, feature);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorIdTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorIdTranslator.java
index 88df447..c154592 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorIdTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorIdTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the validator id
+ *
+ */
 public class ValidatorIdTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ValidatorIdTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorTranslator.java
index 50907aa..d47b5f6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValidatorTranslator.java
@@ -23,6 +23,10 @@
  */
 public class ValidatorTranslator extends Translator {
 	
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ValidatorTranslator(String domNameAndPath,EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValueClassTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValueClassTranslator.java
index a0e1cae..e8e6bef 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValueClassTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValueClassTranslator.java
@@ -14,8 +14,16 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the value class
+ *
+ */
 public class ValueClassTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ValueClassTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValueTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValueTranslator.java
index af6a6d2..c92c275 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValueTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ValueTranslator.java
@@ -23,6 +23,10 @@
  */
 public class ValueTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ValueTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/VarTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/VarTranslator.java
index 307e600..f431e3c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/VarTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/VarTranslator.java
@@ -14,7 +14,15 @@
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 
+/**
+ * Translator for the var
+ *
+ */
 public class VarTranslator extends Translator {
+    /**
+     * @param domNameAndPath
+     * @param feature
+     */
     public VarTranslator(String domNameAndPath, EStructuralFeature feature) {
         super(domNameAndPath, feature);
     }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/VariableResolverTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/VariableResolverTranslator.java
index 107a8c4..d6b1dbb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/VariableResolverTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/VariableResolverTranslator.java
@@ -23,6 +23,10 @@
  */
 public class VariableResolverTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public VariableResolverTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ViewHandlerTranslator.java b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ViewHandlerTranslator.java
index db6c61f..d7cde77 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ViewHandlerTranslator.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.facesconfig/facesconfig/org/eclipse/jst/jsf/facesconfig/internal/translator/ViewHandlerTranslator.java
@@ -23,6 +23,10 @@
  */
 public class ViewHandlerTranslator extends Translator {
 
+	/**
+	 * @param domNameAndPath
+	 * @param aFeature
+	 */
 	public ViewHandlerTranslator(String domNameAndPath, EStructuralFeature aFeature) {
 		super(domNameAndPath, aFeature);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/.cvsignore b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/.cvsignore
index ba077a4..3d95935 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/.cvsignore
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/.cvsignore
@@ -1 +1,5 @@
 bin
+build.xml
+javaCompiler...args
+temp.folder
+@dot
diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/META-INF/MANIFEST.MF
index 6f3b190..71bee47 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.jsf.standard.tagsupport;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Localization: plugin
 Bundle-Activator: org.eclipse.jst.jsf.standard.tagsupport.StandardTagSupportPlugin
 Require-Bundle: org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jst.jsf.common;bundle-version="[1.0.0,1.1.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.4.0)"
-Eclipse-LazyStart: true
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,3.0.0)"
+Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: org.eclipse.jst.jsf.standard.tagsupport;x-internal:=true
 Bundle-Vendor: %pluginProvider
diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/build.properties b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/build.properties
index 2125fe7..85f90ec 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/build.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/build.properties
@@ -15,6 +15,7 @@
                plugin.xml,\
                metadata/,\
                plugin.properties,\
-               about.html
+               about.html,\
+               icons/
 javacSource=1.5
 javacTarget=1.5
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_A.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_A.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_A.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_A.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_FORM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_FORM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_FORM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_FORM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_HEAD.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_HEAD.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_HEAD.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_HEAD.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_HR.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_HR.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_HR.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_HR.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_IMG.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_IMG.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_IMG.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_IMG.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_BUTTON.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_BUTTON.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_BUTTON.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_BUTTON.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_CHECKBOX.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_CHECKBOX.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_CHECKBOX.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_CHECKBOX.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_HIDDEN.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_HIDDEN.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_HIDDEN.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_HIDDEN.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_IMAGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_IMAGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_IMAGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_IMAGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_PASSWORD.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_PASSWORD.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_PASSWORD.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_PASSWORD.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_RADIO.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_RADIO.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_RADIO.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_RADIO.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_TEXT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_TEXT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_INPUT_TEXT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_INPUT_TEXT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_OBJECT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_OBJECT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_OBJECT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_OBJECT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_SELECT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_SELECT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_SELECT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_SELECT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_TABLE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_TABLE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_TABLE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_TABLE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_TEXTAREA.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_TEXTAREA.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/large/HTML_TEXTAREA.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/large/HTML_TEXTAREA.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_A.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_A.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_A.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_A.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_BR.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_BR.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_BR.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_BR.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_FORM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_FORM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_FORM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_FORM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_HEAD.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_HEAD.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_HEAD.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_HEAD.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_HR.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_HR.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_HR.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_HR.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_IMG.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_IMG.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_IMG.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_IMG.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_BUTTON.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_BUTTON.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_BUTTON.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_BUTTON.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_CHECKBOX.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_CHECKBOX.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_CHECKBOX.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_CHECKBOX.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_HIDDEN.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_HIDDEN.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_HIDDEN.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_HIDDEN.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_IMAGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_IMAGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_IMAGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_IMAGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_PASSWORD.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_PASSWORD.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_PASSWORD.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_PASSWORD.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_RADIO.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_RADIO.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_RADIO.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_RADIO.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_TEXT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_TEXT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_INPUT_TEXT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_INPUT_TEXT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_OBJECT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_OBJECT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_OBJECT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_OBJECT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_SELECT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_SELECT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_SELECT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_SELECT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_TABLE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_TABLE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_TABLE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_TABLE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_TEXTAREA.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_TEXTAREA.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_TEXTAREA.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/HTML/small/HTML_TEXTAREA.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_ACTIONLISTENER.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_ACTIONLISTENER.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_ACTIONLISTENER.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_ACTIONLISTENER.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_ATTRIBUTE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_ATTRIBUTE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_ATTRIBUTE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_ATTRIBUTE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_CONVERTDATETIME.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_CONVERTDATETIME.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_CONVERTDATETIME.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_CONVERTDATETIME.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_CONVERTER.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_CONVERTER.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_CONVERTER.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_CONVERTER.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_CONVERTNUMBER.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_CONVERTNUMBER.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_CONVERTNUMBER.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_CONVERTNUMBER.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_FACET.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_FACET.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_FACET.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_FACET.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_LOADBUNDLE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_LOADBUNDLE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_LOADBUNDLE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_LOADBUNDLE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_PARAM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_PARAM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_PARAM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_PARAM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_SELECTITEM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_SELECTITEM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_SELECTITEM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_SELECTITEM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_SELECTITEMS.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_SELECTITEMS.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_SELECTITEMS.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_SELECTITEMS.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_SUBVIEW.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_SUBVIEW.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_SUBVIEW.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_SUBVIEW.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VALIDATEDOUBLERANGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VALIDATEDOUBLERANGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VALIDATEDOUBLERANGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VALIDATEDOUBLERANGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VALIDATELENGTH.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VALIDATELENGTH.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VALIDATELENGTH.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VALIDATELENGTH.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VALIDATELONGRANGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VALIDATELONGRANGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VALIDATELONGRANGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VALIDATELONGRANGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VALIDATOR.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VALIDATOR.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VALIDATOR.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VALIDATOR.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VALUECHANGELISTENER.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VALUECHANGELISTENER.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VALUECHANGELISTENER.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VALUECHANGELISTENER.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VERBATIM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VERBATIM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VERBATIM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VERBATIM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VIEW.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VIEW.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/large/JSF_VIEW.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/large/JSF_VIEW.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_ACTIONLISTENER.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_ACTIONLISTENER.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_ACTIONLISTENER.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_ACTIONLISTENER.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_ATTRIBUTE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_ATTRIBUTE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_ATTRIBUTE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_ATTRIBUTE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_CONVERTDATETIME.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_CONVERTDATETIME.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_CONVERTDATETIME.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_CONVERTDATETIME.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_CONVERTER.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_CONVERTER.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_CONVERTER.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_CONVERTER.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_CONVERTNUMBER.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_CONVERTNUMBER.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_CONVERTNUMBER.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_CONVERTNUMBER.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_FACET.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_FACET.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_FACET.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_FACET.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_LOADBUNDLE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_LOADBUNDLE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_LOADBUNDLE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_LOADBUNDLE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_PARAM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_PARAM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_PARAM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_PARAM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_SELECTITEM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_SELECTITEM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_SELECTITEM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_SELECTITEM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_SELECTITEMS.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_SELECTITEMS.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_SELECTITEMS.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_SELECTITEMS.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_SUBVIEW.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_SUBVIEW.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_SUBVIEW.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_SUBVIEW.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VALIDATEDOUBLERANGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VALIDATEDOUBLERANGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VALIDATEDOUBLERANGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VALIDATEDOUBLERANGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VALIDATELENGTH.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VALIDATELENGTH.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VALIDATELENGTH.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VALIDATELENGTH.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VALIDATELONGRANGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VALIDATELONGRANGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VALIDATELONGRANGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VALIDATELONGRANGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VALIDATOR.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VALIDATOR.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VALIDATOR.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VALIDATOR.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VALUECHANGELISTENER.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VALUECHANGELISTENER.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VALUECHANGELISTENER.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VALUECHANGELISTENER.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VERBATIM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VERBATIM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VERBATIM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VERBATIM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VIEW.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VIEW.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFCORE/small/JSF_VIEW.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFCORE/small/JSF_VIEW.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_COLUMN.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_COLUMN.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_COLUMN.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_COLUMN.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_COMMANDBUTTON.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_COMMANDBUTTON.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_COMMANDBUTTON.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_COMMANDBUTTON.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_COMMANDLINK.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_COMMANDLINK.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_COMMANDLINK.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_COMMANDLINK.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_DATATABLE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_DATATABLE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_DATATABLE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_DATATABLE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_FORM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_FORM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_FORM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_FORM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_GRAPHICIMAGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_GRAPHICIMAGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_GRAPHICIMAGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_GRAPHICIMAGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_INPUTHIDDEN.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_INPUTHIDDEN.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_INPUTHIDDEN.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_INPUTHIDDEN.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_INPUTSECRET.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_INPUTSECRET.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_INPUTSECRET.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_INPUTSECRET.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_INPUTTEXT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_INPUTTEXT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_INPUTTEXT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_INPUTTEXT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_INPUTTEXTAREA.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_INPUTTEXTAREA.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_INPUTTEXTAREA.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_INPUTTEXTAREA.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_MESSAGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_MESSAGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_MESSAGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_MESSAGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_MESSAGES.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_MESSAGES.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_MESSAGES.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_MESSAGES.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_OUTPUTFORMAT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_OUTPUTFORMAT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_OUTPUTFORMAT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_OUTPUTFORMAT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_OUTPUTLABEL.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_OUTPUTLABEL.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_OUTPUTLABEL.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_OUTPUTLABEL.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_OUTPUTLINK.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_OUTPUTLINK.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_OUTPUTLINK.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_OUTPUTLINK.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_OUTPUTTEXT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_OUTPUTTEXT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_OUTPUTTEXT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_OUTPUTTEXT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_PANELGRID.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_PANELGRID.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_PANELGRID.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_PANELGRID.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_PANELGROUP.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_PANELGROUP.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_PANELGROUP.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_PANELGROUP.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTBOOLEANCHECKBOX.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTBOOLEANCHECKBOX.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTBOOLEANCHECKBOX.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTBOOLEANCHECKBOX.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTMANYCHECKBOX.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTMANYCHECKBOX.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTMANYCHECKBOX.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTMANYCHECKBOX.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTMANYLISTBOX.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTMANYLISTBOX.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTMANYLISTBOX.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTMANYLISTBOX.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTMANYMENU.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTMANYMENU.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTMANYMENU.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTMANYMENU.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTONELISTBOX.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTONELISTBOX.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTONELISTBOX.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTONELISTBOX.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTONEMENU.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTONEMENU.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTONEMENU.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTONEMENU.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTONERADIO.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTONERADIO.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/large/JSF_SELECTONERADIO.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/large/JSF_SELECTONERADIO.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_COLUMN.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_COLUMN.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_COLUMN.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_COLUMN.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_COMMANDBUTTON.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_COMMANDBUTTON.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_COMMANDBUTTON.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_COMMANDBUTTON.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_COMMANDLINK.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_COMMANDLINK.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_COMMANDLINK.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_COMMANDLINK.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_DATATABLE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_DATATABLE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_DATATABLE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_DATATABLE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_FORM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_FORM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_FORM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_FORM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_GRAPHICIMAGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_GRAPHICIMAGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_GRAPHICIMAGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_GRAPHICIMAGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_INPUTHIDDEN.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_INPUTHIDDEN.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_INPUTHIDDEN.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_INPUTHIDDEN.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_INPUTSECRET.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_INPUTSECRET.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_INPUTSECRET.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_INPUTSECRET.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_INPUTTEXT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_INPUTTEXT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_INPUTTEXT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_INPUTTEXT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_INPUTTEXTAREA.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_INPUTTEXTAREA.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_INPUTTEXTAREA.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_INPUTTEXTAREA.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_MESSAGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_MESSAGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_MESSAGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_MESSAGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_MESSAGES.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_MESSAGES.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_MESSAGES.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_MESSAGES.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_OUTPUTFORMAT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_OUTPUTFORMAT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_OUTPUTFORMAT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_OUTPUTFORMAT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_OUTPUTLABEL.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_OUTPUTLABEL.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_OUTPUTLABEL.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_OUTPUTLABEL.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_OUTPUTLINK.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_OUTPUTLINK.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_OUTPUTLINK.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_OUTPUTLINK.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_OUTPUTTEXT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_OUTPUTTEXT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_OUTPUTTEXT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_OUTPUTTEXT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_PANELGRID.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_PANELGRID.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_PANELGRID.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_PANELGRID.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_PANELGROUP.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_PANELGROUP.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_PANELGROUP.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_PANELGROUP.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTBOOLEANCHECKBOX.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTBOOLEANCHECKBOX.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTBOOLEANCHECKBOX.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTBOOLEANCHECKBOX.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTMANYCHECKBOX.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTMANYCHECKBOX.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTMANYCHECKBOX.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTMANYCHECKBOX.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTMANYLISTBOX.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTMANYLISTBOX.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTMANYLISTBOX.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTMANYLISTBOX.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTMANYMENU.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTMANYMENU.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTMANYMENU.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTMANYMENU.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTONELISTBOX.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTONELISTBOX.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTONELISTBOX.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTONELISTBOX.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTONEMENU.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTONEMENU.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTONEMENU.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTONEMENU.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTONERADIO.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTONERADIO.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/icons/palette/JSFHTML/small/JSF_SELECTONERADIO.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSFHTML/small/JSF_SELECTONERADIO.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_DECLARATION.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_DECLARATION.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_DECLARATION.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_DECLARATION.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_DIRECTIVE.INCLUDE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_DIRECTIVE.INCLUDE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_DIRECTIVE.INCLUDE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_DIRECTIVE.INCLUDE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_DIRECTIVE.PAGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_DIRECTIVE.PAGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_DIRECTIVE.PAGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_DIRECTIVE.PAGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_DIRECTIVE.TAGLIB.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_DIRECTIVE.TAGLIB.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_DIRECTIVE.TAGLIB.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_DIRECTIVE.TAGLIB.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_EXPRESSION.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_EXPRESSION.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_EXPRESSION.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_EXPRESSION.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_FALLBACK.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_FALLBACK.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_FALLBACK.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_FALLBACK.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_FORWARD.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_FORWARD.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_FORWARD.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_FORWARD.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_GETPROPERTY.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_GETPROPERTY.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_GETPROPERTY.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_GETPROPERTY.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_INCLUDE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_INCLUDE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_INCLUDE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_INCLUDE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_PARAM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_PARAM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_PARAM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_PARAM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_PARAMS.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_PARAMS.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_PARAMS.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_PARAMS.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_PLUGIN.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_PLUGIN.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_PLUGIN.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_PLUGIN.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_ROOT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_ROOT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_ROOT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_ROOT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_SCRIPTLET.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_SCRIPTLET.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_SCRIPTLET.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_SCRIPTLET.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_SETPROPERTY.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_SETPROPERTY.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_SETPROPERTY.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_SETPROPERTY.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_TEXT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_TEXT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_TEXT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_TEXT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_USEBEAN.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_USEBEAN.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/large/JSP_USEBEAN.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/large/JSP_USEBEAN.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_DECLARATION.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_DECLARATION.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_DECLARATION.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_DECLARATION.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_DIRECTIVE.INCLUDE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_DIRECTIVE.INCLUDE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_DIRECTIVE.INCLUDE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_DIRECTIVE.INCLUDE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_DIRECTIVE.PAGE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_DIRECTIVE.PAGE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_DIRECTIVE.PAGE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_DIRECTIVE.PAGE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_DIRECTIVE.TAGLIB.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_DIRECTIVE.TAGLIB.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_DIRECTIVE.TAGLIB.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_DIRECTIVE.TAGLIB.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_EXPRESSION.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_EXPRESSION.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_EXPRESSION.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_EXPRESSION.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_FALLBACK.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_FALLBACK.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_FALLBACK.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_FALLBACK.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_FORWARD.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_FORWARD.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_FORWARD.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_FORWARD.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_GETPROPERTY.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_GETPROPERTY.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_GETPROPERTY.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_GETPROPERTY.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_INCLUDE.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_INCLUDE.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_INCLUDE.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_INCLUDE.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_PARAM.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_PARAM.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_PARAM.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_PARAM.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_PARAMS.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_PARAMS.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_PARAMS.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_PARAMS.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_PLUGIN.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_PLUGIN.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_PLUGIN.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_PLUGIN.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_ROOT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_ROOT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_ROOT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_ROOT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_SCRIPTLET.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_SCRIPTLET.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_SCRIPTLET.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_SCRIPTLET.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_SETPROPERTY.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_SETPROPERTY.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_SETPROPERTY.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_SETPROPERTY.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_TEXT.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_TEXT.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_TEXT.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_TEXT.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_USEBEAN.gif b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_USEBEAN.gif
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/icons/palette/JSP/small/JSP_USEBEAN.gif
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/icons/palette/JSP/small/JSP_USEBEAN.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/html.properties b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/html.properties
similarity index 63%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/metadata/html.properties
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/html.properties
index 7f19286..c55c220 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/html.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/html.properties
@@ -52,3 +52,45 @@
 
 TEXTAREA.display-label=Text Area
 TEXTAREA.description=The TEXTAREA element represents a multi-line text field
+
+
+any.dir.displayed-values.ltr=ltr (left-to-right)
+any.dir.displayed-values.rtl=rtl (right-to-left)
+
+any.frame.displayed-values.none=none (no sides, default value)
+any.frame.displayed-values.above=above (top side only)
+any.frame.displayed-values.below=below (bottom side only)
+any.frame.displayed-values.hsides=hsides (top and bottom sides only)
+any.frame.displayed-values.vsides=vsides (right and left sides only)
+any.frame.displayed-values.lhs=lhs (left hand side only)
+any.frame.displayed-values.rhs=rhs (right hand side only)
+any.frame.displayed-values.box=box (all four sides)
+any.frame.displayed-values.border=border (all four sides)
+
+any.rules.displayed-values.none=none (no rules, default value)
+any.rules.displayed-values.groups=groups (between row groups)
+any.rules.displayed-values.rows=rows (between rows only)
+any.rules.displayed-values.cols=cols (between columns only)
+any.rules.displayed-values.all=all (between all rows and columns)
+
+any.shape.displayed-values.default=default (entire region)
+any.shape.displayed-values.rect=rect (rectangular region)
+any.shape.displayed-values.circle=circle (circular region)
+any.shape.displayed-values.poly=poly (polygonal region)
+
+#categories
+property.category.event=Event
+property.category.language=Language
+property.category.html=HTML
+property.category.css=CSS
+property.category.general=General
+property.category.accessibility=Accessibility
+property.category.visualProperty=VisualProperty
+property.category.browser.specific=Browser Specific
+property.category.core=Core
+property.category.content=Content
+property.category.data.binding=Data Binding
+property.category.dynamic=Dynamic
+property.category.file=File
+property.category.image=Image
+
diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/html.xml b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/html.xml
new file mode 100644
index 0000000..e68391f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/html.xml
@@ -0,0 +1,721 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<md:metadatamodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" 
+	xmlns:md="http://org.eclipse.jst.jsf.common.metadata/metadata.ecore"
+	xmlns:mdt="http://org.eclipse.jst.jsf.common.metadata/metadataTraitTypes.ecore"  	
+	xmlns:pi="http://org.eclipse.jsf.pagedesigner/paletteInfos.ecore"
+	xmlns:qe="http://org.eclipse.jsf.pagedesigner/quickEditTabSections.ecore"
+	id="HTML"
+	type="tagFile">
+	<trait id="paletteInfos" >
+		<value xsi:type="pi:PaletteInfos">
+			<item id="BR"/>
+			<item id="INPUT.TEXT" tag="INPUT"/>
+			<item id="INPUT.BUTTON" tag="INPUT">
+				<display-label>%INPUT.BUTTON.display-label</display-label>
+				<description>%INPUT.BUTTON.description</description>
+				<small-icon>small/HTML_INPUT_BUTTON.gif</small-icon>
+				<large-icon>small/HTML_INPUT_BUTTON.gif</large-icon>
+				<tag-create>
+					<attribute id="type" value="submit"/>
+				</tag-create>
+			</item>
+			<item id="INPUT.CHECKBOX" tag="INPUT">
+				<display-label>%INPUT.CHECKBOX.display-label</display-label>
+				<description>%INPUT.CHECKBOX.description</description>
+				<small-icon>small/HTML_INPUT_CHECKBOX.gif</small-icon>
+				<large-icon>small/HTML_INPUT_CHECKBOX.gif</large-icon>
+				<tag-create>
+					<attribute id="type" value="checkbox"/>
+				</tag-create>				
+			</item>
+			<item id="FORM"/>		
+			<item id="INPUT.HIDDEN" tag="INPUT">
+				<display-label>%INPUT.HIDDEN.display-label</display-label>
+				<description>%INPUT.HIDDEN.description</description>
+				<small-icon>small/HTML_INPUT_HIDDEN.gif</small-icon>
+				<large-icon>small/HTML_INPUT_HIDDEN.gif</large-icon>
+				<tag-create>
+					<attribute id="type" value="hidden"/>
+				</tag-create>	
+			</item>
+			<item id="HR"/>
+			<item id="IMG"/>
+			<item id="INPUT.IMAGE" tag="INPUT">
+				<display-label>%INPUT.IMAGE.display-label</display-label>
+				<description>%INPUT.IMAGE.description</description>
+				<small-icon>small/HTML_INPUT_IMAGE.gif</small-icon>
+				<large-icon>small/HTML_INPUT_IMAGE.gif</large-icon>
+				<tag-create>
+					<attribute id="type" value="image"/>
+				</tag-create>					
+			</item>
+			<item id="A"/>			
+			<item id="INPUT.PASSWORD" tag="INPUT">
+				<display-label>%INPUT.PASSWORD.display-label</display-label>
+				<description>%INPUT.PASSWORD.description</description>
+				<small-icon>small/HTML_INPUT_PASSWORD.gif</small-icon>
+				<large-icon>small/HTML_INPUT_PASSWORD.gif</large-icon>
+				<tag-create>
+					<attribute id="type" value="password"/>
+				</tag-create>					
+			</item>
+			<item id="INPUT.RADIO" tag="INPUT">
+				<display-label>%INPUT.RADIO.display-label</display-label>
+				<description>%INPUT.RADIO.description</description>
+				<small-icon>small/HTML_INPUT_RADIO.gif</small-icon>
+				<large-icon>small/HTML_INPUT_RADIO.gif</large-icon>
+				<tag-create>
+					<attribute id="type" value="radio"/>
+				</tag-create>					
+			</item>			
+			<item id="SELECT"/>
+			<item id="TABLE"/>
+			<item id="TEXTAREA"/>
+		</value>
+	</trait>
+
+	<trait id="images-base-path">
+		<value>$nl$/icons/palette/HTML</value>
+	</trait>
+
+	<trait id="display-label">
+		<value>HTML 4.0</value>
+	</trait>
+	
+	<entity id="A">
+		<include-entity-group id="common-core-attributes"/>
+		<include-entity-group id="common-language-attributes"/>
+		<include-entity-group id="common-event-attributes"/>
+		<trait id="display-label">
+			<value>%A.display-label</value>
+		</trait>
+		<trait id="description">
+			<value>%A.description</value>
+		</trait>		
+		<trait id="small-icon">
+			<value>small/HTML_A.gif</value>
+		</trait>
+		<trait id="large-icon">
+			<value>large/HTML_A.gif</value>
+		</trait>
+	</entity>
+	<entity id="BODY">
+		<include-entity-group id="common-core-attributes"/>
+		<include-entity-group id="common-language-attributes"/>
+		<include-entity-group id="common-event-attributes"/>	
+		<include-entity-group id="common-html-attributes"/>	
+	</entity>		
+	<entity id="BR">
+		<include-entity-group id="common-core-attributes"/>
+		<trait id="display-label">
+			<value>%BR.display-label</value>
+		</trait>
+		<trait id="description">
+			<value>%BR.description</value>
+		</trait>		
+		<trait id="expert">
+			<value>true</value>
+		</trait>
+		<trait id="small-icon">
+			<value>small/HTML_BR.gif</value>
+		</trait>
+		<trait id="large-icon">
+			<value>large/HTML_BR.gif</value>
+		</trait>
+	</entity>
+	<entity id="INPUT">
+		<include-entity-group id="common-core-attributes"/>
+		<include-entity-group id="common-language-attributes"/>
+		<include-entity-group id="common-event-attributes"/>	
+		<trait id="display-label">
+			<value>%INPUT.TEXT.display-label</value>
+		</trait>					
+		<trait id="description">
+			<value>%INPUT.TEXT.description</value>
+		</trait>
+		<trait id="small-icon">
+			<value>small/HTML_INPUT_TEXT.gif</value>
+		</trait>
+		<trait id="large-icon">
+			<value>large/HTML_INPUT_TEXT.gif</value>
+		</trait>
+		<trait id="requires-html-form">
+			<value>true</value>
+		</trait>			
+	</entity>
+	<entity id="FORM">
+		<include-entity-group id="common-core-attributes"/>
+		<include-entity-group id="common-language-attributes"/>
+		<include-entity-group id="common-event-attributes"/>	
+		<include-entity-group id="form-event-attributes"/>
+		<trait id="display-label">
+			<value>%FORM.display-label</value>
+		</trait>					
+		<trait id="description">
+			<value>%FORM.description</value>
+		</trait>		
+		<trait id="small-icon">
+			<value>small/HTML_FORM.gif</value>
+		</trait>
+		<trait id="large-icon">
+			<value>large/HTML_FORM.gif</value>
+		</trait>
+	</entity>
+	<entity id="HEAD">
+		<include-entity-group id="common-language-attributes"/>
+	</entity>	
+	<entity id="HR">
+		<include-entity-group id="common-core-attributes"/>
+		<trait id="display-label">
+			<value>%HR.display-label</value>
+		</trait>					
+		<trait id="description">
+			<value>%HR.description</value>
+		</trait>		
+		<trait id="small-icon">
+			<value>small/HTML_HR.gif</value>
+		</trait>
+		<trait id="large-icon">
+			<value>large/HTML_HR.gif</value>
+		</trait>
+	</entity>	
+	<entity id="HTML">
+		<include-entity-group id="common-language-attributes"/>
+	</entity>	
+	<entity id="IMG">
+		<include-entity-group id="common-core-attributes"/>
+		<include-entity-group id="common-language-attributes"/>
+		<include-entity-group id="common-event-attributes"/>	
+		<trait id="display-label">
+			<value>%IMG.display-label</value>
+		</trait>					
+		<trait id="description">
+			<value>%IMG.description</value>
+		</trait>		
+		<trait id="small-icon">
+			<value>small/HTML_IMG.gif</value>
+		</trait>
+		<trait id="large-icon">
+			<value>large/HTML_IMG.gif</value>
+		</trait>
+	</entity>	
+	<entity id="LINK">
+		<include-entity-group id="common-core-attributes"/>
+		<include-entity-group id="common-language-attributes"/>
+		<include-entity-group id="common-event-attributes"/>		
+		<entity id="type">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.LinkType</value>
+			</trait>
+		</entity>	
+	</entity>
+	<entity id="META">
+		<include-entity-group id="common-language-attributes"/>
+		<entity id="content">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ContentType</value>
+			</trait>
+		</entity>
+	</entity>		
+	<entity id="SELECT">
+		<include-entity-group id="common-core-attributes"/>
+		<include-entity-group id="common-language-attributes"/>
+		<include-entity-group id="common-event-attributes"/>	
+		<trait id="display-label">
+			<value>%SELECT.display-label</value>
+		</trait>					
+		<trait id="description">
+			<value>%SELECT.description</value>
+		</trait>		
+		<trait id="small-icon">
+			<value>small/HTML_SELECT.gif</value>
+		</trait>
+		<trait id="large-icon">
+			<value>large/HTML_SELECT.gif</value>
+		</trait>
+		<trait id="requires-html-form">
+			<value>true</value>
+		</trait>			
+	</entity>		
+	<entity id="TABLE">
+		<include-entity-group id="common-core-attributes"/>
+		<include-entity-group id="common-language-attributes"/>
+		<include-entity-group id="common-event-attributes"/>	
+		<trait id="display-label">
+			<value>%TABLE.display-label</value>
+		</trait>					
+		<trait id="description">
+			<value>%TABLE.description</value>
+		</trait>		
+		<trait id="small-icon">
+			<value>small/HTML_TABLE.gif</value>
+		</trait>
+		<trait id="large-icon">
+			<value>large/HTML_TABLE.gif</value>
+		</trait>
+	</entity>
+	<entity id="TEXTAREA">
+		<include-entity-group id="common-core-attributes"/>
+		<include-entity-group id="common-language-attributes"/>
+		<include-entity-group id="common-event-attributes"/>	
+		<trait id="display-label">
+			<value>%TEXTAREA.display-label</value>
+		</trait>					
+		<trait id="description">
+			<value>%TEXTAREA.description</value>
+		</trait>		
+		<trait id="small-icon">
+			<value>small/HTML_TEXTAREA.gif</value>
+		</trait>
+		<trait id="large-icon">
+			<value>large/HTML_TEXTAREA.gif</value>
+		</trait>
+		<trait id="requires-html-form">
+			<value>true</value>
+		</trait>
+	</entity>	
+	<entity id="TITLE">
+		<include-entity-group id="common-language-attributes"/>
+	</entity>		
+	<entityGroup id="common-html-attributes">
+		<entity id="align">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="valid-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>right</item>
+					<item>char</item>
+					<item>left</item>
+					<item>center</item>
+					<item>justify</item>					
+				</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>
+		</entity>
+	
+		<entity id="alt">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="src">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="accesskey">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.CharacterType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="accept">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="accept-charset">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="border">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+			</trait>
+			<trait id="valid-minimum"><value>0</value></trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="disabled">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="height">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.LengthType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>		
+		<entity id="ismap">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="longdesc">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.URIType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>	
+		<entity id="maxlength">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+			</trait>
+			<trait id="valid-minimum"><value>0</value></trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="readonly">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+		</entity>
+		<entity id="rel">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.LinkType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="rev">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.LinkType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>	
+		<entity id="rows">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+			</trait>
+			<trait id="valid-minimum"><value>0</value></trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="shape">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="valid-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>default</item>
+					<item>rect</item>
+					<item>circle</item>
+					<item>poly</item>	
+				</value>			
+			</trait>
+			<trait id="displayed-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>%any.shape.displayed-values.default</item>
+					<item>%any.shape.displayed-values.rect</item>
+					<item>%any.shape.displayed-values.circle</item>
+					<item>%any.shape.displayed-values.poly</item>		
+				</value>		
+			</trait>
+			<trait id="default-value">
+				<value>default</value>
+			</trait>		
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="size">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+			</trait>
+			<trait id="valid-minimum"><value>0</value></trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="tabindex">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+			</trait>
+			<trait id="valid-minimum"><value>0</value></trait>
+			<trait id="valid-maximum"><value>32767</value></trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="target">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="valid-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>_self</item>
+					<item>_blank</item>
+					<item>_parent</item>
+					<item>_top</item>				
+				</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+		<entity id="type">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>	
+		<entity id="usemap">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>		
+		<entity id="valign">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="valid-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>middle</item>
+					<item>top</item>
+					<item>baseline</item>
+					<item>bottom</item>				
+				</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>
+		</entity>			
+		<entity id="width">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.LengthType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.html</value>
+			</trait>			
+		</entity>
+							
+	</entityGroup>
+	<entityGroup id="common-core-attributes">
+		<entity id="id">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.core</value>
+			</trait>			
+		</entity>
+		<entity id="class">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.pagedesigner.attributevalues.CSSClassType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.core</value>
+			</trait>			
+		</entity>
+		<entity id="style">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.pagedesigner.attributevalues.CSSStyleType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.core</value>
+			</trait>			
+		</entity>
+		<entity id="title">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.core</value>
+			</trait>			
+		</entity>		
+	</entityGroup>
+	<entityGroup id="common-event-attributes"> 
+		<entity id="onclick">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="ondblclick">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onmousedown">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onmouseup">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onmouseover">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onmousemove">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onmouseout">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onkeypress">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onkeydown">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onkeyup">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<!--almost common events - should be refactored-->
+		<entity id="onblur">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onchange">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onfocus">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>
+		<entity id="onselect">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>					
+	</entityGroup>
+	<entityGroup id="form-event-attributes">
+		<entity id="onsubmit">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>	
+		<entity id="onreset">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ScriptType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.event</value>
+			</trait>			
+		</entity>			
+	</entityGroup>
+	<entityGroup id="common-language-attributes" >
+		<entity id="dir">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="valid-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>ltr</item>
+					<item>rtl</item>
+				</value>
+			</trait>
+			<trait id="displayed-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>%any.dir.displayed-values.ltr</item>
+					<item>%any.dir.displayed-values.rtl</item>
+				</value>
+			</trait>	
+			<trait id="category">
+				<value>%property.category.language</value>
+			</trait>					
+		</entity>
+		<entity id="lang">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.LanguageCodeType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.language</value>
+			</trait>					
+		</entity>		
+	</entityGroup>	
+</md:metadatamodel>
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core.xml b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core.xml
index 0a7ae08..ee85f8c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core.xml
@@ -4,11 +4,17 @@
 	xmlns:md="http://org.eclipse.jst.jsf.common.metadata/metadata.ecore"
 	xmlns:mdt="http://org.eclipse.jst.jsf.common.metadata/metadataTraitTypes.ecore"  
 	xmlns:cnst="http://org.eclipse.jst.jsf.core/constraints.ecore" 
+	xmlns:qe="http://org.eclipse.jsf.pagedesigner/QuickEditTabSections.ecore"
 	id="http://java.sun.com/jsf/core"
 	type="tagFile">
 
 	<entity id="actionListener" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+	    <trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="type"/>
+			</value>
+		</trait>
 		<entity id="type">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -22,9 +28,20 @@
 	</entity>
 	<entity id="attribute" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+				<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="name"/>
+				<section id="value"/>
+			</value>
+		</trait>
 	</entity>	
 	<entity id="convertDateTime" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="section.general.convertDateTime" type="SECTION"/>
+			</value>
+		</trait>	
 		<entity id="dateStyle">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -80,9 +97,28 @@
 				<value>both</value>
 			</trait>
 		</entity>
+		<entity id="pattern">
+			<trait id="attribute-value-runtime-type">
+				<value>
+					org.eclipse.jst.jsf.core.attributevalues.DateTimePatternType
+				</value>
+			</trait>
+		</entity>
+		<entity id="locale">
+			<trait id="attribute-value-runtime-type">
+				<value>
+					org.eclipse.jst.jsf.core.attributevalues.LocaleType
+				</value>
+			</trait>
+		</entity>		
 	</entity>
 	<entity id="convertNumber" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="section.general.convertNumber" type="SECTION"/>
+			</value>
+		</trait>		
 		<entity id="groupingUsed">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -152,9 +188,35 @@
 				<value>number</value>
 			</trait>
 		</entity>
+		<entity id="locale">
+			<trait id="attribute-value-runtime-type">
+				<value>
+					org.eclipse.jst.jsf.core.attributevalues.LocaleType
+				</value>
+			</trait>
+		</entity>
+		<entity id="pattern">
+			<trait id="attribute-value-runtime-type">
+				<value>
+					org.eclipse.jst.jsf.core.attributevalues.NumberPatternType
+				</value>
+			</trait>
+		</entity>	
+		<entity id="currencyCode">
+			<trait id="attribute-value-runtime-type">
+				<value>
+					org.eclipse.jst.jsf.core.attributevalues.CurrencyCodeType
+				</value>
+			</trait>
+		</entity>	
 	</entity>
 	<entity id="converter" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="converterId"/>
+			</value>
+		</trait>		
 		<entity id="converterId">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -166,7 +228,20 @@
 			</trait>
 		</entity>
 	</entity>
+	<entity id="facet" type="tag">
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="name"/>
+			</value>
+		</trait>
+	</entity>
 	<entity id="loadBundle" type="tag">
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="basename"/>
+				<section id="var"/>
+			</value>
+		</trait>
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -192,10 +267,34 @@
 				<value>org.eclipse.jst.jsf.designtime.core.loadBundle</value>
 			</trait>
 		</entity>
+		<entity id="basename">
+			<trait id="attribute-value-runtime-type">
+				<value>
+					org.eclipse.jst.jsf.core.attributevalues.ResourceBundleType
+				</value>
+			</trait>
+		</entity>
 	</entity>
-	<entity id="param" type="tag"><include-entity-group id="common-core-attributes"/></entity>
+	<entity id="param" type="tag">
+		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="name"/>
+				<section id="value"/>
+				<section id="binding"/>
+			</value>
+		</trait>	
+	</entity>
 	<entity id="selectItem" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="itemLabel"/>
+				<section id="itemValue"/>
+			</value>
+		</trait>		
 		<entity id="itemDisabled">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -205,7 +304,7 @@
 			<trait id="default-value">
 				<value>false</value>
 			</trait>
-		</entity>
+		</entity>		
 		<entity id="value">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -219,9 +318,21 @@
 	</entity>
 	<entity id="selectItems" type="tag">	
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="binding"/>
+			</value>
+		</trait>			
 	</entity>
 	<entity id="subview" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+			</value>
+		</trait>			
 		<entity id="rendered">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -232,6 +343,12 @@
 	</entity>
 	<entity id="validateDoubleRange" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="minimum"/>
+				<section id="maximum"/>
+			</value>
+		</trait>			
 		<entity id="maximum">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -249,6 +366,12 @@
 	</entity>
 	<entity id="validateLength" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="minimum"/>
+				<section id="maximum"/>
+			</value>
+		</trait>			
 		<entity id="maximum">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -268,6 +391,12 @@
 	</entity>
 	<entity id="validateLongRange" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="minimum"/>
+				<section id="maximum"/>
+			</value>
+		</trait>		
 		<entity id="maximum">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -285,6 +414,11 @@
 	</entity>
 	<entity id="validator" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="validatorId"/>
+			</value>
+		</trait>		
 		<entity id="validatorId">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -298,6 +432,11 @@
 	</entity>
 	<entity id="valueChangeListener" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="type"/>
+			</value>
+		</trait>		
 		<entity id="type">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -311,6 +450,11 @@
 	</entity>
 	<entity id="verbatim" type="tag">
 		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="escape"/>
+			</value>
+		</trait>		
 		<entity id="escape">
 			<trait id="attribute-value-runtime-type">
 				<value>
@@ -322,7 +466,19 @@
 			</trait>
 		</entity>
 	</entity>
-	<entity id="view" type="tag"><include-entity-group id="common-core-attributes"/></entity>
+	<entity id="view" type="tag">
+		<include-entity-group id="common-core-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="locale"/>
+			</value>
+		</trait>		
+		<entity id="locale">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.LocaleType	</value>
+			</trait>
+		</entity>	
+	</entity>
 
 	<entityGroup id="common-core-attributes" type="tag">
 		<entity id="binding">
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_core_dti.xml b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core_dti.xml
similarity index 92%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_core_dti.xml
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core_dti.xml
index 66297c3..975d153 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_core_dti.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core_dti.xml
@@ -90,10 +90,10 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="span"/>
 					</operation>
-					<operation id="CopyChildrenOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.CopyChildrenOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					minHeight="10"
@@ -109,9 +109,7 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CustomTransformOperation">
-						<parameter value="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.LoadBundleOperation"/>
-					</operation>
+					<operation id="org.eclipse.jst.pagedesigner.jsf.ui.LoadBundleOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					nonVisual="true"
@@ -274,10 +272,10 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="span"/>
 					</operation>
-					<operation id="CopyChildrenOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.CopyChildrenOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					minHeight="10"
@@ -293,10 +291,10 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="div"/>
 					</operation>
-					<operation id="CopyChildrenOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.CopyChildrenOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					needBorderDecorator="true"
diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core_pi.properties b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core_pi.properties
new file mode 100644
index 0000000..4ea823a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core_pi.properties
@@ -0,0 +1 @@
+JSFCORE.display-label=JSF Core
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_core.xml b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core_pi.xml
similarity index 87%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_core.xml
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core_pi.xml
index 805e11d..227a40e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_core.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_core_pi.xml
@@ -38,7 +38,7 @@
 	</trait>
 
 	<trait id="display-label">
-		<value>JSF Core</value>
+		<value>%JSFCORE.display-label</value>
 	</trait>
 	
 	<entity id="actionListener" type="tag">
@@ -48,11 +48,6 @@
 		<trait id="large-icon">
 			<value>large/JSF_ACTIONLISTENER.gif</value>
 		</trait>
-		<trait id="tag-create">
-			<value xsi:type="pi:TagCreationInfo">
-				<attribute id="type" />
-			</value>
-		</trait>
 	</entity>
 	<entity id="attribute" type="tag">
 		<trait id="small-icon">
@@ -61,12 +56,6 @@
 		<trait id="large-icon">
 			<value>large/JSF_ATTRIBUTE.gif</value>
 		</trait>
-		<trait id="tag-create">
-			<value xsi:type="pi:TagCreationInfo">
-				<attribute id="type" />
-				<attribute id="value"/>
-			</value>
-		</trait>
 	</entity>	
 	<entity id="convertDateTime" type="tag">
 		<trait id="small-icon">
@@ -91,11 +80,6 @@
 		<trait id="large-icon">
 			<value>large/JSF_CONVERTER.gif</value>
 		</trait>
-		<trait id="tag-create">
-			<value xsi:type="pi:TagCreationInfo">
-				<attribute id="converterId" />
-			</value>
-		</trait>
 	</entity>
 	<entity id="facet" type="tag">
 		<trait id="small-icon">
@@ -104,11 +88,6 @@
 		<trait id="large-icon">
 			<value>large/JSF_FACET.gif</value>
 		</trait>
-		<trait id="tag-create">
-			<value xsi:type="pi:TagCreationInfo">
-				<attribute id="name" />
-			</value>
-		</trait>
 	</entity>
 	<entity id="loadBundle" type="tag">
 		<trait id="small-icon">
@@ -117,12 +96,6 @@
 		<trait id="large-icon">
 			<value>large/JSF_LOADBUNDLE.gif</value>
 		</trait>
-		<trait id="tag-create">
-			<value xsi:type="pi:TagCreationInfo">
-				<attribute id="basename" />
-				<attribute id="var" />
-			</value>
-		</trait>
 	</entity>
 	<entity id="param" type="tag">
 		<trait id="small-icon">
@@ -130,7 +103,7 @@
 		</trait>
 		<trait id="large-icon">
 			<value>large/JSF_PARAM.gif</value>
-		</trait>	
+		</trait>
 	</entity>
 	<entity id="selectItem" type="tag">
 		<trait id="small-icon">
diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html.properties b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html.properties
index d96dce0..c06d783 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html.properties
@@ -17,26 +17,18 @@
 selectOneRadio.layout.displayed-values.pageDirection=pageDirection (list is laid out vertically)
 selectOneRadio.layout.displayed-values.lineDirection=lineDirection (list is laid out horizontally)
 
-any.dir.displayed-values.ltr=ltr (left-to-right)
-any.dir.displayed-values.rtl=rtl (right-to-left)
-
-any.frame.displayed-values.none=none (no sides, default value)
-any.frame.displayed-values.above=above (top side only)
-any.frame.displayed-values.below=below (bottom side only)
-any.frame.displayed-values.hsides=hsides (top and bottom sides only)
-any.frame.displayed-values.vsides=vsides (right and left sides only)
-any.frame.displayed-values.lhs=lhs (left hand side only)
-any.frame.displayed-values.rhs=rhs (right hand side only)
-any.frame.displayed-values.box=box (all four sides)
-any.frame.displayed-values.border=border (all four sides)
-
-any.rules.displayed-values.none=none (no rules, default value)
-any.rules.displayed-values.groups=groups (between row groups)
-any.rules.displayed-values.rows=rows (between rows only)
-any.rules.displayed-values.cols=cols (between columns only)
-any.rules.displayed-values.all=all (between all rows and columns)
-
-any.shape.displayed-values.default=default (entire region)
-any.shape.displayed-values.rect=rect (rectangular region)
-any.shape.displayed-values.circle=circle (circular region)
-any.shape.displayed-values.poly=poly (polygonal region)
+property.category.event=Event
+property.category.language=Language
+property.category.html=HTML
+property.category.css=CSS
+property.category.jsf=JSF
+property.category.general=General
+property.category.accessibility=Accessibility
+property.category.visualProperty=VisualProperty
+property.category.browser.specific=Browser Specific
+property.category.core=Core
+property.category.content=Content
+property.category.data.binding=Data Binding
+property.category.dynamic=Dynamic
+property.category.file=File
+property.category.image=Image
diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html.xml b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html.xml
index e72b8c0..bab8d50 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html.xml
@@ -5,11 +5,36 @@
 	xmlns:md="http://org.eclipse.jst.jsf.common.metadata/metadata.ecore"
 	xmlns:mdt="http://org.eclipse.jst.jsf.common.metadata/metadataTraitTypes.ecore"
 	xmlns:cnst="http://org.eclipse.jst.jsf.core/constraints.ecore"  
+	xmlns:qe="http://org.eclipse.jsf.pagedesigner/QuickEditTabSections.ecore"
 	id="http://java.sun.com/jsf/html"
 	type="tagFile">
 	
+	<entity id="column" type="tag">
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+			</value>
+		</trait>		
+	</entity>
 	<entity id="commandButton" type="tag">	
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="action"/>
+				<section id="actionListener"/>
+				<section id="type"/>
+				<section id="style"/>
+				<section id="section.general.commandButton.listener" type="SECTION"/>
+			</value>
+		</trait>
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -42,10 +67,36 @@
 			<trait id="default-value">
 				<value>submit</value>
 			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>
+		<entity id="image">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.WebPathType</value>
+			</trait>		
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
 		</entity>
 	</entity>
 	<entity id="commandLink" type="tag">		
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="action"/>
+				<section id="actionListener"/>
+				<section id="style"/>	
+				<section id="section.general.commandLink.listener" type="SECTION"/>			
+			</value>
+		</trait>
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -66,8 +117,34 @@
 		</trait>
 	</entity>
 	<entity id="dataTable" type="tag">
-		<include-entity-group id="common-attributes"/>
-				<entity id="var">
+		<include-entity-group id="jsf-table-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="var"/>
+				<section id="width"/>
+				<section id="border"/>
+				<section id="bgcolor"/>
+				<section id="style"/>	
+				<section id="section.general.dataTable.columns" type="SECTION"/>		
+			</value>
+		</trait>
+		<entity id="bgcolor">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ColorType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>
+		<entity id="var">
 			<trait id="contributes-value-binding">
 				<value>true</value>
 			</trait>
@@ -77,15 +154,63 @@
 			<trait id="value-binding-symbol-factory">
 				<value>org.eclipse.jst.jsf.designtime.core.loadBundle</value>
 			</trait>
+			<trait id="category"><value>%property.category.jsf</value></trait>			
 		</entity>
 	</entity>
-	<entity id="form" type="tag"><include-entity-group id="common-attributes"/></entity>
+	<entity id="form" type="tag">
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<include-entity-group id="form-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="style"/>			
+			</value>
+		</trait>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="action"/>
+				<section id="actionListener"/>
+				<section id="style"/>				
+			</value>
+		</trait>		
+	</entity>
 	<entity id="graphicImage" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="url"/>
+				<section id="binding"/>
+				<section id="style"/>			
+			</value>
+		</trait>
 	</entity>
 	<entity id="inputHidden" type="tag">
-		<include-entity-group id="common-attributes"/>
-				<trait id="containment-constraint">
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>	
+				<!--  <section id="section.general.inputHidden.type" type="SECTION"/>	-->
+			</value>
+		</trait>
+		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
 					<algorithm>xpath</algorithm>
@@ -109,7 +234,21 @@
 		</entity>
 	</entity>
 	<entity id="inputSecret" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="style"/>	
+				<!-- <section id="section.general.inputSecret.type" type="SECTION"/> -->
+				<section id="section.general.inputText.others" type="SECTION"/>				
+			</value>
+		</trait>		
 		<entity id="value">
 			<trait id="attribute-value-runtime-type">
 				<value>org.eclipse.jst.jsf.core.attributevalues.ValueType</value>
@@ -120,7 +259,21 @@
 		</entity>	
 	</entity>
 	<entity id="inputText" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="style"/>	
+				<!--  <section id="section.general.inputText.type" type="SECTION"/> -->
+				<section id="section.general.inputText.others" type="SECTION"/>							
+			</value>
+		</trait>
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -145,7 +298,21 @@
 		</entity>	
 	</entity>
 	<entity id="inputTextarea" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="style"/>		
+				<!-- <section id="section.general.inputTextarea.type" type="SECTION"/> -->
+				<section id="section.general.inputTextarea.others" type="SECTION"/>	
+			</value>
+		</trait>		
 		<entity id="value">
 			<trait id="attribute-value-runtime-type">
 				<value>org.eclipse.jst.jsf.core.attributevalues.ValueType</value>
@@ -155,9 +322,33 @@
 			</trait>
 		</entity>	
 	</entity>
-	<entity id="message" type="tag"><include-entity-group id="common-attributes"/></entity>
+	<entity id="message" type="tag">
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="for-entity"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="for"/>			
+			</value>
+		</trait>
+	</entity>
 	<entity id="messages" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="layout"/>
+				<section id="style"/>			
+			</value>
+		</trait>		
 		<entity id="layout">
 			<trait id="attribute-value-runtime-type">
 				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
@@ -179,14 +370,111 @@
 			</trait>				
 		</entity>	
 	</entity>
-	<entity id="outputFormat" type="tag"><include-entity-group id="common-attributes"/></entity>
-	<entity id="outputLabel" type="tag"><include-entity-group id="common-attributes"/></entity>
-	<entity id="outputLink" type="tag"><include-entity-group id="common-attributes"/></entity>
-	<entity id="outputText" type="tag"><include-entity-group id="common-attributes"/></entity>
-	<entity id="panelGrid" type="tag"><include-entity-group id="common-attributes"/></entity>
-	<entity id="panelGroup" type="tag"><include-entity-group id="common-attributes"/></entity>
+	<entity id="outputFormat" type="tag">
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="style"/>		
+				<section id="section.general.outputFormat.params" type="SECTION"/>	
+			</value>
+		</trait>		
+	</entity>
+	<entity id="outputLabel" type="tag">		
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<include-entity-group id="for-entity"/>		
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="for"/>
+				<section id="style"/>			
+			</value>
+		</trait>		
+	</entity>
+	<entity id="outputLink" type="tag">
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="style"/>			
+			</value>
+		</trait>		
+	</entity>
+	<entity id="outputText" type="tag">
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="binding"/>
+				<section id="style"/>	
+				<section id="section.general.outputText.converter" type="SECTION"/>	
+			</value>
+		</trait>		
+	</entity>
+	<entity id="panelGrid" type="tag">
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="jsf-table-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="columns"/>
+				<section id="border"/>
+				<section id="style"/>			
+			</value>
+		</trait>		
+	</entity>
+	<entity id="panelGroup" type="tag">
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>		
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="style"/>			
+			</value>
+		</trait>		
+	</entity>
 	<entity id="selectBooleanCheckbox" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="style"/>			
+			</value>
+		</trait>		
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -211,7 +499,21 @@
 		</entity>
 	</entity>
 	<entity id="selectManyCheckbox" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="layout"/>
+				<section id="style"/>	
+				<section id="section.general.selectManyCheckbox.choices" type="SECTION"/>			
+			</value>
+		</trait>
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -248,7 +550,21 @@
 		</entity>		
 	</entity>
 	<entity id="selectManyListbox" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="size"/>
+				<section id="style"/>	
+				<section id="section.general.selectManyListbox.choices" type="SECTION"/>		
+			</value>
+		</trait>		
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -265,7 +581,20 @@
 		</trait>
 	</entity>
 	<entity id="selectManyMenu" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>		
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="style"/>	
+				<section id="section.general.selectManyMenu.choices" type="SECTION"/>		
+			</value>
+		</trait>
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -282,7 +611,21 @@
 		</trait>
 	</entity>
 	<entity id="selectOneListbox" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="size"/>
+				<section id="style"/>			
+				<section id="section.general.selectOneListbox.choices" type="SECTION"/>
+			</value>
+		</trait>
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -307,7 +650,20 @@
 		</entity>
 	</entity>
 	<entity id="selectOneMenu" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="style"/>	
+				<section id="section.general.selectOneMenu.choices" type="SECTION"/>		
+			</value>
+		</trait>
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -332,7 +688,21 @@
 		</entity>
 	</entity>
 	<entity id="selectOneRadio" type="tag">
-		<include-entity-group id="common-attributes"/>
+		<include-entity-group id="basic-jsf-html-attributes"/>
+		<include-entity-group id="common-jsf-html-attributes"/>
+		<include-entity-group id="common-html-attributes" uri="HTML"/>
+		<include-entity-group id="common-language-attributes" uri="HTML"/>
+		<include-entity-group id="common-core-attributes" uri="HTML"/>
+		<include-entity-group id="common-event-attributes" uri="HTML"/>
+		<trait id="quick-edit-tab">
+			<value xsi:type="qe:QuickEditTabSections">
+				<section id="id"/>
+				<section id="value"/>
+				<section id="layout"/>
+				<section id="style"/>
+				<section id="section.general.selectOneRadio.choices" type="SECTION"/>			
+			</value>
+		</trait>
 		<trait id="containment-constraint">
 			<value xsi:type="cnst:ContainsTagConstraint">
 				<set-generator>
@@ -377,8 +747,106 @@
 			</trait>				
 		</entity>			
 	</entity>
-	<entity id="column" type="tag"><include-entity-group id="common-attributes"/></entity>
-	<entityGroup id="common-attributes">
+	<entityGroup id="basic-jsf-html-attributes">
+		<entity id="id">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ComponentIDType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>			
+		</entity>
+		<entity id="binding">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ComponentBindingType</value>
+			</trait>
+			<trait id="runtime-return-type">
+				<value>javax.faces.component.UIComponent</value>
+			</trait>	
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>					
+		</entity>	
+		<entity id="converter">			
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.FacesConfigConverterIDType</value>
+			</trait>			
+			<trait id="config-type">
+				<value>javax.faces.convert.Converter</value>
+			</trait>	
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>		
+		<entity id="rendered">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>				
+		</entity>	
+		<entity id="required">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>		
+		<entity id="styleClass">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.pagedesigner.attributevalues.CSSClassType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>				
+		</entity>
+		<entity id="value">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.ValueBindingType</value>
+			</trait>
+			<trait id="runtime-return-type">
+				<value>java.lang.String</value>
+			</trait>			
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>	
+		</entity>
+		<entity id="valueChangeListener">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.MethodBindingType</value>
+			</trait>
+			<trait id="runtime-return-type">
+				<value>void</value>
+			</trait>			
+			<trait id="runtime-param-types">
+				<value>javax.faces.event.ValueChangeEvent</value>
+			</trait>	
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>	
+		</entity>	
+		<entity id="validator">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.MethodBindingType</value>
+			</trait>	
+			<trait id="runtime-return-type">
+				<value>void</value>
+			</trait>			
+			<trait id="runtime-param-types">
+				<value xsi:type="mdt:ListOfValues">
+					<item>javax.faces.context.FacesContext</item>
+					<item>javax.faces.component.UIComponent</item>
+					<item>java.lang.Object</item>		
+				</value>						
+			</trait>	
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>			
+		</entity>	
+	</entityGroup>
+	<entityGroup id="common-jsf-html-attributes">
 		<!-- This group will be refactored -->
 		<entity id="action">
 			<trait id="attribute-value-runtime-type">
@@ -386,7 +854,10 @@
 			</trait>
 			<trait id="runtime-return-type">
 				<value>java.lang.String</value>
-			</trait>				
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>							
 		</entity>
 		<entity id="actionListener">
 			<trait id="attribute-value-runtime-type">
@@ -397,47 +868,19 @@
 			</trait>			
 			<trait id="runtime-param-types">
 				<value>javax.faces.event.ActionEvent</value>
-			</trait>			
-		</entity>
-		<entity id="binding">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.ComponentBindingType</value>
+			</trait>	
+			<trait id="category">
+				<value>%property.category.jsf</value>
 			</trait>
-			<trait id="runtime-return-type">
-				<value>javax.faces.component.UIComponent</value>
-			</trait>					
-		</entity>		
-		<entity id="border">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
-			</trait>
-			<trait id="valid-minimum"><value>0</value></trait>
-		</entity>
-		<entity id="cellpadding">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
-			</trait>
-			<trait id="valid-minimum"><value>0</value></trait>
-		</entity>
-		<entity id="cellspacing">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
-			</trait>
-			<trait id="valid-minimum"><value>0</value></trait>
 		</entity>
 		<entity id="cols">
 			<trait id="attribute-value-runtime-type">
 				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
 			</trait>
 			<trait id="valid-minimum"><value>0</value></trait>
-		</entity>
-		<entity id="converter">			
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.FacesConfigConverterIDType</value>
+			<trait id="category">
+				<value>%property.category.jsf</value>
 			</trait>			
-			<trait id="config-type">
-				<value>javax.faces.convert.Converter</value>
-			</trait>				
 		</entity>
 		<entity id="escape">
 			<trait id="attribute-value-runtime-type">
@@ -446,7 +889,214 @@
 			<trait id="default-value">
 				<value>true</value>
 			</trait>			
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>			
 		</entity>
+		<entity id="globalOnly">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+			<trait id="default-value">
+				<value>false</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>			
+		</entity>
+		<entity id="immediate">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>				
+		</entity>
+		<entity id="readonly">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+			<trait id="default-value">
+				<value>false</value>
+			</trait>			
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>			
+		</entity>		
+		<entity id="redisplay">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>				
+		</entity>
+
+		<entity id="showDetail">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			</trait>
+			<trait id="default-value">
+				<value>true</value>
+			</trait>		
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>			
+		</entity>
+		<entity id="dalign">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="valid-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>right</item>					
+					<item>left</item>
+					<item>center</item>
+					<item>justify</item>					
+				</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>	
+		<entity id="ialign">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="valid-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>bottom</item>
+					<item>middle</item>
+					<item>top</item>
+					<item>right</item>
+					<item>left</item>					
+				</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>			
+		<entity id="linktype">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.LinkType</value>
+			</trait>
+			<trait id="valid-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>index</item>
+					<item>subsection</item>
+					<item>bookmark</item>
+					<item>start</item>
+					<item>next</item>					
+					<item>stylesheet</item>
+					<item>chapter</item>
+					<item>help</item>
+					<item>alternate</item>
+					<item>appendix</item>	
+					<item>contents</item>
+					<item>section</item>					
+					<item>prev</item>
+					<item>previous</item>
+					<item>glossary</item>
+					<item>copyright</item>				
+				</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>
+		<entity id="media">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="valid-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>tv</item>
+					<item>braille</item>
+					<item>tty</item>
+					<item>print</item>
+					<item>all</item>					
+					<item>projection</item>
+					<item>handheld</item>
+					<item>screen</item>
+					<item>aural</item>
+				</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>	
+		<entity id="scope">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>
+			<trait id="valid-values">
+				<value xsi:type="mdt:ListOfValues">
+					<item>row</item>
+					<item>col</item>
+					<item>rowgroup</item>
+					<item>colgroup</item>				
+				</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>	
+	</entityGroup>
+	<entityGroup id="jsf-table-attributes">
+		<entity id="bgcolor">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
+			</trait>	
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>		
+		</entity>	
+		<entity id="border">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+			</trait>
+			<trait id="valid-minimum"><value>0</value></trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>
+		<entity id="cellpadding">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+			</trait>
+			<trait id="valid-minimum"><value>0</value></trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>
+		<entity id="cellspacing">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+			</trait>
+			<trait id="valid-minimum"><value>0</value></trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>
+		<entity id="columns">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+			</trait>
+			<trait id="valid-minimum">
+				<value>0</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>
+		<entity id="columnClasses">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.pagedesigner.attributevalues.CSSClassType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>		
 		<entity id="first">
 			<trait id="attribute-value-runtime-type">
 				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
@@ -454,7 +1104,18 @@
 			<trait id="valid-minimum">
 				<value>0</value>
 			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
 		</entity>
+		<entity id="footerClass">
+			<trait id="attribute-value-runtime-type">
+				<value>org.eclipse.jst.pagedesigner.attributevalues.CSSClassType</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
+		</entity>	
 		<entity id="frame">
 			<trait id="attribute-value-runtime-type">
 				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
@@ -487,64 +1148,27 @@
 			</trait>
 			<trait id="default-value">
 				<value>none</value>
+			</trait>
+			<trait id="category">
+				<value>%property.category.jsf</value>
 			</trait>			
-		</entity>
-		<entity id="globalOnly">
+		</entity>			
+		<entity id="headerClass">
 			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+				<value>org.eclipse.jst.pagedesigner.attributevalues.CSSClassType</value>
 			</trait>
-			<trait id="default-value">
-				<value>false</value>
-			</trait>			
-		</entity>
-		<entity id="height">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
-			</trait>
-			<trait id="valid-minimum"><value>0</value></trait>
-		</entity>
-		<entity id="id">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.ComponentIDType</value>
+			<trait id="category">
+				<value>%property.category.jsf</value>
 			</trait>
 		</entity>
-		<entity id="immediate">
+		<entity id="rowClasses">
 			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+				<value>org.eclipse.jst.pagedesigner.attributevalues.CSSClassType</value>
 			</trait>
-		</entity>
-		<entity id="ismap">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
+			<trait id="category">
+				<value>%property.category.jsf</value>
 			</trait>
 		</entity>
-		<entity id="maxlength">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
-			</trait>
-			<trait id="valid-minimum"><value>0</value></trait>
-		</entity>
-		<entity id="readonly">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
-			</trait>
-		</entity>
-		<entity id="redisplay">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
-			</trait>
-		</entity>
-		<entity id="rendered">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
-			</trait>
-		</entity>
-		<entity id="rows">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
-			</trait>
-			<trait id="valid-minimum"><value>0</value></trait>
-		</entity>
 		<entity id="rules">
 			<trait id="attribute-value-runtime-type">
 				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
@@ -569,39 +1193,10 @@
 			</trait>
 			<trait id="default-value">
 				<value>none</value>
-			</trait>			
-		</entity>
-		<entity id="shape">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
 			</trait>
-			<trait id="valid-values">
-				<value xsi:type="mdt:ListOfValues">
-					<item>default</item>
-					<item>rect</item>
-					<item>circle</item>
-					<item>poly</item>	
-				</value>			
-			</trait>
-			<trait id="displayed-values">
-				<value xsi:type="mdt:ListOfValues">
-					<item>%any.shape.displayed-values.default</item>
-					<item>%any.shape.displayed-values.rect</item>
-					<item>%any.shape.displayed-values.circle</item>
-					<item>%any.shape.displayed-values.poly</item>		
-				</value>		
-			</trait>
-			<trait id="default-value">
-				<value>default</value>
-			</trait>		
-		</entity>
-		<entity id="showDetail">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.BooleanType</value>
-			</trait>
-			<trait id="default-value">
-				<value>true</value>
-			</trait>				
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>							
 		</entity>
 		<entity id="showSummary">
 			<trait id="attribute-value-runtime-type">
@@ -610,76 +1205,27 @@
 			<trait id="default-value">
 				<value>false</value>
 			</trait>
-		</entity>
-		<entity id="size">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+			<trait id="category">
+				<value>%property.category.jsf</value>
 			</trait>
-			<trait id="valid-minimum"><value>0</value></trait>
 		</entity>
-		<entity id="tabindex">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
-			</trait>
-			<trait id="valid-minimum"><value>0</value></trait>
-			<trait id="valid-maximum"><value>32767</value></trait>
-		</entity>
-		<entity id="validator">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.MethodBindingType</value>
-			</trait>	
-			<trait id="runtime-return-type">
-				<value>void</value>
-			</trait>			
-			<trait id="runtime-param-types">
-				<value xsi:type="mdt:ListOfValues">
-					<item>javax.faces.context.FacesContext</item>
-					<item>javax.faces.component.UIComponent</item>
-					<item>java.lang.Object</item>		
-				</value>						
-			</trait>	
-		</entity>
-		<entity id="value">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.ValueBindingType</value>
-			</trait>
-			<trait id="runtime-return-type">
-				<value>java.lang.String</value>
-			</trait>				
-		</entity>
-		<entity id="valueChangeListener">
-			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.MethodBindingType</value>
-			</trait>
-			<trait id="runtime-return-type">
-				<value>void</value>
-			</trait>			
-			<trait id="runtime-param-types">
-				<value>javax.faces.event.ValueChangeEvent</value>
-			</trait>			
-		</entity>
-		<entity id="dir">
+		<entity id="summary">
 			<trait id="attribute-value-runtime-type">
 				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
 			</trait>
-			<trait id="valid-values">
-				<value xsi:type="mdt:ListOfValues">
-					<item>ltr</item>
-					<item>rtl</item>
-				</value>
+			<trait id="category">
+				<value>%property.category.jsf</value>
 			</trait>
-			<trait id="displayed-values">
-				<value xsi:type="mdt:ListOfValues">
-					<item>%any.dir.displayed-values.ltr</item>
-					<item>%any.dir.displayed-values.rtl</item>
-				</value>
-			</trait>			
 		</entity>
-		<entity id="width">
+	</entityGroup>
+	<entityGroup id="for-entity">
+		<entity id="for">
 			<trait id="attribute-value-runtime-type">
-				<value>org.eclipse.jst.jsf.core.attributevalues.IntegerType</value>
+				<value>org.eclipse.jst.jsf.core.attributevalues.StringType</value>
 			</trait>
-			<trait name="valid-minimum"><value>0</value></trait>	
+			<trait id="category">
+				<value>%property.category.jsf</value>
+			</trait>
 		</entity>
 	</entityGroup>
 </md:metadatamodel>
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_html_dti.xml b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html_dti.xml
similarity index 61%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_html_dti.xml
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html_dti.xml
index ba46243..d7bb4cf 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_html_dti.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html_dti.xml
@@ -10,9 +10,7 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CustomTransformOperation">
-						<parameter value="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.ColumnOperation"/>
-					</operation>
+					<operation id="org.eclipse.jst.pagedesigner.jsf.ui.ColumnOperation"/>										
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					multiLevel="true"
@@ -25,36 +23,36 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="input"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
 					<!-- if image attribute exists -->
-					<operation id="IfOperation">
+					<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 						<parameter value="@image"/>
-						<operation id="CreateAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 							<parameter value="type"/>
 							<parameter value="image"/>
 						</operation>
-						<operation id="RenameAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 							<parameter value="image"/>
 							<parameter value="src"/>
 						</operation>
 					</operation>
 					<!-- if image attribute does not exist -->
-					<operation id="IfNotOperation">
+					<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 						<parameter value="@image"/>
 						<!-- create default type attribute (submit) -->
-						<operation id="CreateAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 							<parameter value="type"/>
 							<parameter value="submit"/>
 						</operation>
 						<!-- override default if type attribute is set (e.g. reset) -->
-						<operation id="CopyAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.CopyAttributeOperation">
 							<parameter value="type"/>
 						</operation>
 					</operation>
@@ -75,22 +73,22 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="a"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="CreateAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 						<parameter value="href"/>
 						<parameter value="#"/>
 					</operation>
-					<operation id="ConvertAttributeToTextOperation">
+					<operation id="org.eclipse.jst.pagedesigner.ConvertAttributeToTextOperation">
 						<parameter value="value"/>
 					</operation>
-					<operation id="CopyChildrenOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.CopyChildrenOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					multiLevel="true"
@@ -107,9 +105,7 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CustomTransformOperation">
-						<parameter value="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.DataTableOperation"/>
-					</operation>
+					<operation id="org.eclipse.jst.pagedesigner.jsf.ui.DataTableOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					multiLevel="true"
@@ -124,15 +120,15 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="form"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="CopyChildrenOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.CopyChildrenOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					needBorderDecorator="true"
@@ -145,15 +141,15 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="img"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="url"/>
 						<parameter value="src"/>
 					</operation>
@@ -161,7 +157,7 @@
 						if both "value" and "url" source attributes exist,
 						"value" overrides "url" as destination "src" attribute
 					-->
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="value"/>
 						<parameter value="src"/>
 					</operation>
@@ -198,15 +194,15 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="input"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="CreateAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 						<parameter value="type"/>
 						<parameter value="password"/>
 					</operation>
@@ -227,15 +223,15 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="input"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="CreateAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 						<parameter value="type"/>
 						<parameter value="text"/>
 					</operation>
@@ -256,15 +252,15 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="textarea"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="ConvertAttributeToTextOperation">
+					<operation id="org.eclipse.jst.pagedesigner.ConvertAttributeToTextOperation">
 						<parameter value="value"/>
 					</operation>
 				</tag-convert-info>
@@ -314,15 +310,15 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="span"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="ConvertAttributeToTextOperation">
+					<operation id="org.eclipse.jst.pagedesigner.ConvertAttributeToTextOperation">
 						<parameter value="value"/>
 					</operation>
 				</tag-convert-info>
@@ -343,15 +339,15 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="label"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="ConvertAttributeToTextOperation">
+					<operation id="org.eclipse.jst.pagedesigner.ConvertAttributeToTextOperation">
 						<parameter value="value"/>
 					</operation>
 				</tag-convert-info>
@@ -372,23 +368,23 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="a"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="CreateAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 						<parameter value="href"/>
 						<parameter value="#"/>
 					</operation>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="value"/>
 						<parameter value="href"/>
 					</operation>
-					<operation id="CopyChildrenOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.CopyChildrenOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					multiLevel="true"
@@ -402,15 +398,15 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="span"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="ConvertAttributeToTextOperation">
+					<operation id="org.eclipse.jst.pagedesigner.ConvertAttributeToTextOperation">
 						<parameter value="value"/>
 					</operation>
 				</tag-convert-info>
@@ -431,9 +427,7 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CustomTransformOperation">
-						<parameter value="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.PanelGridOperation"/>
-					</operation>
+					<operation id="org.eclipse.jst.pagedesigner.jsf.ui.PanelGridOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					multiLevel="true"
@@ -448,15 +442,15 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="div"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="CopyChildrenOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.CopyChildrenOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					multiLevel="true"
@@ -470,22 +464,22 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="input"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="CreateAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 						<parameter value="type"/>
 						<parameter value="checkbox"/>
 					</operation>
 					<!-- if value attribute exists and is "true" -->
-					<operation id="IfOperation">
+					<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 						<parameter value="self::node()[@value='true']"/>
-						<operation id="CreateAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 							<parameter value="checked"/>
 							<parameter value="checked"/>
 						</operation>
@@ -503,9 +497,7 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CustomTransformOperation">
-						<parameter value="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.SelectManyCheckboxOperation"/>
-					</operation>
+					<operation id="org.eclipse.jst.pagedesigner.jsf.ui.SelectManyCheckboxOperation"/>						
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					multiLevel="true"
@@ -520,75 +512,75 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="select"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="id"/>
 						<parameter value="name"/>
 					</operation>
 					<!-- multiple select allowed -->
-					<operation id="CreateAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 						<parameter value="multiple"/>
 						<parameter value="multiple"/>
 					</operation>
 					<!-- if no "size" attribute -->
-					<operation id="IfNotOperation">
+					<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 						<parameter value="@size"/>
-						<operation id="CreateAttributeFromXPathOperation">
+						<operation id="org.eclipse.jst.pagedesigner.CreateAttributeFromXPathOperation">
 							<parameter value="size"/>
 							<parameter value="count(selectItem)"/>
 						</operation>
 					</operation>
 					<!-- iterate over "selectItem" children -->
-					<operation id="IterateOverElementsOperation">
+					<operation id="org.eclipse.jst.pagedesigner.IterateOverElementsOperation">
 						<parameter value="selectItem"/>
-						<operation id="AppendChildElementOperation">
+						<operation id="org.eclipse.jst.pagedesigner.AppendChildElementOperation">
 							<parameter value="option"/>
 						</operation>
-						<operation id="CopyAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.CopyAttributeOperation">
 							<parameter value="itemValue"/>
 						</operation>
-						<operation id="RenameAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 							<parameter value="itemValue"/>
 							<parameter value="value"/>
 						</operation>
-						<operation id="IfOperation">
+						<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 							<parameter value="@itemLabel"/>
-							<operation id="AppendChildTextFromXPathOperation">
+							<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 								<parameter value="@itemLabel"/>
 							</operation>
 						</operation>
-						<operation id="IfNotOperation">
+						<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 							<parameter value="@itemLabel"/>
-							<operation id="IfOperation">
+							<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 								<parameter value="@value"/>
-								<operation id="AppendChildTextFromXPathOperation">
+								<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 									<parameter value="@value"/>
 								</operation>
 							</operation>
-							<operation id="IfNotOperation">
+							<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 								<parameter value="@value"/>
-								<operation id="IfOperation">
+								<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 									<parameter value="@itemValue"/>
-									<operation id="AppendChildTextFromXPathOperation">
+									<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 										<parameter value="@itemValue"/>
 									</operation>
 								</operation>
-								<operation id="IfNotOperation">
+								<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 									<parameter value="@itemValue"/>
-									<operation id="AppendChildTextOperation">
+									<operation id="org.eclipse.jst.pagedesigner.AppendChildTextOperation">
 										<parameter value="selectItem"/>
 									</operation>
 								</operation>
 							</operation>
 						</operation>
-						<operation id="MakeParentElementCurrentOperation"/>
+						<operation id="org.eclipse.jst.pagedesigner.MakeParentElementCurrentOperation"/>
 					</operation>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
@@ -603,72 +595,72 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="select"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
 					<operation id="RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="id"/>
 						<parameter value="name"/>
 					</operation>
 					<!-- multiple select allowed -->
-					<operation id="CreateAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 						<parameter value="multiple"/>
 						<parameter value="multiple"/>
 					</operation>
 					<!-- size fixed at 1 -->
-					<operation id="CreateAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 						<parameter value="size"/>
 						<parameter value="1"/>
 					</operation>
 					<!-- iterate over "selectItem" children -->
-					<operation id="IterateOverElementsOperation">
+					<operation id="org.eclipse.jst.pagedesigner.IterateOverElementsOperation">
 						<parameter value="selectItem"/>
-						<operation id="AppendChildElementOperation">
+						<operation id="org.eclipse.jst.pagedesigner.AppendChildElementOperation">
 							<parameter value="option"/>
 						</operation>
-						<operation id="CopyAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.CopyAttributeOperation">
 							<parameter value="itemValue"/>
 						</operation>
-						<operation id="RenameAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 							<parameter value="itemValue"/>
 							<parameter value="value"/>
 						</operation>
-						<operation id="IfOperation">
+						<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 							<parameter value="@itemLabel"/>
-							<operation id="AppendChildTextFromXPathOperation">
+							<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 								<parameter value="@itemLabel"/>
 							</operation>
 						</operation>
-						<operation id="IfNotOperation">
+						<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 							<parameter value="@itemLabel"/>
-							<operation id="IfOperation">
+							<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 								<parameter value="@value"/>
-								<operation id="AppendChildTextFromXPathOperation">
+								<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 									<parameter value="@value"/>
 								</operation>
 							</operation>
-							<operation id="IfNotOperation">
+							<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 								<parameter value="@value"/>
-								<operation id="IfOperation">
+								<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 									<parameter value="@itemValue"/>
-									<operation id="AppendChildTextFromXPathOperation">
+									<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 										<parameter value="@itemValue"/>
 									</operation>
 								</operation>
-								<operation id="IfNotOperation">
+								<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 									<parameter value="@itemValue"/>
-									<operation id="AppendChildTextOperation">
+									<operation id="org.eclipse.jst.pagedesigner.AppendChildTextOperation">
 										<parameter value="selectItem"/>
 									</operation>
 								</operation>
 							</operation>
 						</operation>
-						<operation id="MakeParentElementCurrentOperation"/>
+						<operation id="org.eclipse.jst.pagedesigner.MakeParentElementCurrentOperation"/>
 					</operation>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
@@ -683,70 +675,70 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="select"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="id"/>
 						<parameter value="name"/>
 					</operation>
 					<!-- if no "size" attribute -->
-					<operation id="IfNotOperation">
+					<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 						<parameter value="@size"/>
-						<operation id="CreateAttributeFromXPathOperation">
+						<operation id="org.eclipse.jst.pagedesigner.CreateAttributeFromXPathOperation">
 							<parameter value="size"/>
 							<parameter value="count(selectItem)"/>
 						</operation>
 					</operation>
 					<!-- iterate over "selectItem" children -->
-					<operation id="IterateOverElementsOperation">
+					<operation id="org.eclipse.jst.pagedesigner.IterateOverElementsOperation">
 						<parameter value="selectItem"/>
-						<operation id="AppendChildElementOperation">
+						<operation id="org.eclipse.jst.pagedesigner.AppendChildElementOperation">
 							<parameter value="option"/>
 						</operation>
-						<operation id="CopyAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.CopyAttributeOperation">
 							<parameter value="itemValue"/>
 						</operation>
-						<operation id="RenameAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 							<parameter value="itemValue"/>
 							<parameter value="value"/>
 						</operation>
-						<operation id="IfOperation">
+						<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 							<parameter value="@itemLabel"/>
-							<operation id="AppendChildTextFromXPathOperation">
+							<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 								<parameter value="@itemLabel"/>
 							</operation>
 						</operation>
-						<operation id="IfNotOperation">
+						<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 							<parameter value="@itemLabel"/>
-							<operation id="IfOperation">
+							<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 								<parameter value="@value"/>
-								<operation id="AppendChildTextFromXPathOperation">
+								<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 									<parameter value="@value"/>
 								</operation>
 							</operation>
-							<operation id="IfNotOperation">
+							<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 								<parameter value="@value"/>
-								<operation id="IfOperation">
+								<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 									<parameter value="@itemValue"/>
-									<operation id="AppendChildTextFromXPathOperation">
+									<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 										<parameter value="@itemValue"/>
 									</operation>
 								</operation>
-								<operation id="IfNotOperation">
+								<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 									<parameter value="@itemValue"/>
-									<operation id="AppendChildTextOperation">
+									<operation id="org.eclipse.jst.pagedesigner.AppendChildTextOperation">
 										<parameter value="selectItem"/>
 									</operation>
 								</operation>
 							</operation>
 						</operation>
-						<operation id="MakeParentElementCurrentOperation"/>
+						<operation id="org.eclipse.jst.pagedesigner.MakeParentElementCurrentOperation"/>
 					</operation>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
@@ -761,67 +753,67 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CreateElementOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateElementOperation">
 						<parameter value="select"/>
 					</operation>
-					<operation id="CopyAllAttributesOperation"/>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CopyAllAttributesOperation"/>
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="styleClass"/>
 						<parameter value="class"/>
 					</operation>
-					<operation id="RenameAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 						<parameter value="id"/>
 						<parameter value="name"/>
 					</operation>
 					<!-- size fixed at 1 -->
-					<operation id="CreateAttributeOperation">
+					<operation id="org.eclipse.jst.pagedesigner.CreateAttributeOperation">
 						<parameter value="size"/>
 						<parameter value="1"/>
 					</operation>
 					<!-- iterate over "selectItem" children -->
-					<operation id="IterateOverElementsOperation">
+					<operation id="org.eclipse.jst.pagedesigner.IterateOverElementsOperation">
 						<parameter value="selectItem"/>
-						<operation id="AppendChildElementOperation">
+						<operation id="org.eclipse.jst.pagedesigner.AppendChildElementOperation">
 							<parameter value="option"/>
 						</operation>
-						<operation id="CopyAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.CopyAttributeOperation">
 							<parameter value="itemValue"/>
 						</operation>
-						<operation id="RenameAttributeOperation">
+						<operation id="org.eclipse.jst.pagedesigner.RenameAttributeOperation">
 							<parameter value="itemValue"/>
 							<parameter value="value"/>
 						</operation>
-						<operation id="IfOperation">
+						<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 							<parameter value="@itemLabel"/>
-							<operation id="AppendChildTextFromXPathOperation">
+							<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 								<parameter value="@itemLabel"/>
 							</operation>
 						</operation>
-						<operation id="IfNotOperation">
+						<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 							<parameter value="@itemLabel"/>
-							<operation id="IfOperation">
+							<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 								<parameter value="@value"/>
-								<operation id="AppendChildTextFromXPathOperation">
+								<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 									<parameter value="@value"/>
 								</operation>
 							</operation>
-							<operation id="IfNotOperation">
+							<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 								<parameter value="@value"/>
-								<operation id="IfOperation">
+								<operation id="org.eclipse.jst.pagedesigner.IfOperation">
 									<parameter value="@itemValue"/>
-									<operation id="AppendChildTextFromXPathOperation">
+									<operation id="org.eclipse.jst.pagedesigner.AppendChildTextFromXPathOperation">
 										<parameter value="@itemValue"/>
 									</operation>
 								</operation>
-								<operation id="IfNotOperation">
+								<operation id="org.eclipse.jst.pagedesigner.IfNotOperation">
 									<parameter value="@itemValue"/>
-									<operation id="AppendChildTextOperation">
+									<operation id="org.eclipse.jst.pagedesigner.AppendChildTextOperation">
 										<parameter value="selectItem"/>
 									</operation>
 								</operation>
 							</operation>
 						</operation>
-						<operation id="MakeParentElementCurrentOperation"/>
+						<operation id="org.eclipse.jst.pagedesigner.MakeParentElementCurrentOperation"/>
 					</operation>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
@@ -836,9 +828,7 @@
 		<trait id="dt-info">
 			<value xsi:type="dti:DTInfo">
 				<tag-convert-info>
-					<operation id="CustomTransformOperation">
-						<parameter value="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.SelectOneRadioOperation"/>
-					</operation>
+					<operation id="org.eclipse.jst.pagedesigner.jsf.ui.SelectOneRadioOperation"/>
 				</tag-convert-info>
 				<tag-decorate-info id="vpd-decorate-design"
 					multiLevel="true"
diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html_pi.properties b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html_pi.properties
new file mode 100644
index 0000000..72a6e38
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html_pi.properties
@@ -0,0 +1,26 @@
+JSFHTML.display-label=JSF HTML
+commandButton.display-label=Command Button
+commandLink.display-label=Command Link
+dataTable.display-label=Data Table
+form.display-label=Form
+graphicImage.display-label=Graphic Image
+inputHidden.display-label=Hidden Input
+inputSecret.display-label=Secret Input
+inputText.display-label=Text Input
+inputTextarea.display-label=Textarea Input
+message.display-label=Message
+messages.display-label=Messages
+outputFormat.display-label=Output Format
+outputLabel.display-label=Output Label
+outputLink.display-label=Output Link
+outputText.display-label=Output Text
+panelGrid.display-label=Panel Grid
+panelGroup.display-label=Panel Group
+selectBooleanCheckbox.display-label=Select Boolean Checkbox
+selectManyCheckbox.display-label=Select Many Checkbox
+selectManyListbox.display-label=Select Many Listbox
+selectManyMenu.display-label=Select Many Menu
+selectOneListbox.display-label=Select One Listbox
+selectOneMenu.display-label=Select One Menu
+selectOneRadio.display-label=Select One Radio
+column.display-label=Column
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_html.xml b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html_pi.xml
similarity index 86%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_html.xml
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html_pi.xml
index d801b36..d4b216e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/metadata/jsf_html.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsf_html_pi.xml
@@ -46,12 +46,12 @@
 	</trait>
 
 	<trait id="display-label">
-		<value>JSF HTML</value>
+		<value>%JSFHTML.display-label</value>
 	</trait>
 		
 	<entity id="commandButton" type="tag">	
 		<trait id="display-label">
-			<value>Command Button</value>
+			<value>%commandButton.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_COMMANDBUTTON.gif</value>
@@ -65,7 +65,7 @@
 	</entity>
 	<entity id="commandLink" type="tag">		
 		<trait id="display-label">
-			<value>Command Link</value>
+			<value>%commandLink.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_COMMANDLINK.gif</value>
@@ -87,7 +87,7 @@
 	</entity>
 	<entity id="dataTable" type="tag">
 		<trait id="display-label">
-			<value>Data Table</value>
+			<value>%dataTable.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_DATATABLE.gif</value>
@@ -121,7 +121,7 @@
 	</entity>
 	<entity id="form" type="tag">
 		<trait id="display-label">
-			<value>Form</value>
+			<value>%form.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_FORM.gif</value>
@@ -133,7 +133,7 @@
 
 	<entity id="graphicImage" type="tag">
 		<trait id="display-label">
-			<value>Graphic Image</value>
+			<value>%graphicImage.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_GRAPHICIMAGE.gif</value>
@@ -144,7 +144,7 @@
 	</entity>
 	<entity id="inputHidden" type="tag">
 		<trait id="display-label">
-			<value>Hidden Input</value>
+			<value>%inputHidden.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_INPUTHIDDEN.gif</value>
@@ -158,7 +158,7 @@
 	</entity>
 	<entity id="inputSecret" type="tag">
 		<trait id="display-label">
-			<value>Secret Input</value>
+			<value>%inputSecret.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_INPUTSECRET.gif</value>
@@ -172,7 +172,7 @@
 	</entity>
 	<entity id="inputText" type="tag">
 		<trait id="display-label">
-			<value>Text Input</value>
+			<value>%inputText.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_INPUTTEXT.gif</value>
@@ -186,7 +186,7 @@
 	</entity>
 	<entity id="inputTextarea" type="tag">
 		<trait id="display-label">
-			<value>Textarea Input</value>
+			<value>%inputTextarea.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_INPUTTEXTAREA.gif</value>
@@ -200,7 +200,7 @@
 	</entity>
 	<entity id="message" type="tag">
 		<trait id="display-label">
-			<value>Message</value>
+			<value>%message.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_MESSAGE.gif</value>
@@ -208,15 +208,10 @@
 		<trait id="large-icon">
 			<value>large/JSF_MESSAGE.gif</value>
 		</trait>
-		<trait id="tag-create">
-			<value xsi:type="pi:TagCreationInfo">
-				<attribute id="for" />
-			</value>
-		</trait>	
 	</entity>
 	<entity id="messages" type="tag">
 		<trait id="display-label">
-			<value>Messages</value>
+			<value>%messages.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_MESSAGES.gif</value>
@@ -227,7 +222,7 @@
 	</entity>
 	<entity id="outputFormat" type="tag">
 		<trait id="display-label">
-			<value>Output Format</value>
+			<value>%outputFormat.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_OUTPUTFORMAT.gif</value>
@@ -235,10 +230,20 @@
 		<trait id="large-icon">
 			<value>large/JSF_OUTPUTFORMAT.gif</value>
 		</trait>	
+		<trait id="tag-create">
+			<value xsi:type="pi:TagCreationInfo">
+				<template><![CDATA[
+					<param value=""
+						_uri_="http://java.sun.com/jsf/core" />
+					]]>
+				</template>
+				<attribute id="value" value="outputFormat" />
+			</value>			
+		</trait>
 	</entity>
 	<entity id="outputLabel" type="tag">		
 		<trait id="display-label">
-			<value>Output Label</value>
+			<value>%outputLabel.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_OUTPUTLABEL.gif</value>
@@ -246,15 +251,15 @@
 		<trait id="large-icon">
 			<value>large/JSF_OUTPUTLABEL.gif</value>
 		</trait>		
-		<trait id="tag-create">
-			<value xsi:type="pi:TagCreationInfo">
-				<attribute id="for" />
-			</value>
-		</trait>
+ 		<trait id="tag-create">
+ 			<value xsi:type="pi:TagCreationInfo">
+				<attribute id="value" value="outputLabel" />
+ 			</value>
+ 		</trait>
 	</entity>
 	<entity id="outputLink" type="tag">
 		<trait id="display-label">
-			<value>Output Link</value>
+			<value>%outputLink.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_OUTPUTLINK.gif</value>
@@ -265,7 +270,7 @@
 		<trait id="tag-create">
 			<value xsi:type="pi:TagCreationInfo">
 				<template><![CDATA[
-				<outputText value="OutputLink"
+				<outputText value="outputLink"
 					_$uri$="http://java.sun.com/jsf/html" />
 				]]></template>
 
@@ -274,7 +279,7 @@
 	</entity>
 	<entity id="outputText" type="tag">
 		<trait id="display-label">
-			<value>Output Text</value>
+			<value>%outputText.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_OUTPUTTEXT.gif</value>
@@ -282,10 +287,15 @@
 		<trait id="large-icon">
 			<value>large/JSF_OUTPUTTEXT.gif</value>
 		</trait>			
+		<trait id="tag-create">
+			<value xsi:type="pi:TagCreationInfo">
+				<attribute id="value" value="outputText" />
+			</value>
+		</trait>
 	</entity>
 	<entity id="panelGrid" type="tag">
 		<trait id="display-label">
-			<value>Panel Grid</value>
+			<value>%panelGrid.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_PANELGRID.gif</value>
@@ -312,7 +322,7 @@
 	</entity>
 	<entity id="panelGroup" type="tag">
 		<trait id="display-label">
-			<value>Panel Group</value>
+			<value>%panelGroup.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_PANELGROUP.gif</value>
@@ -323,7 +333,7 @@
 	</entity>
 	<entity id="selectBooleanCheckbox" type="tag">
 		<trait id="display-label">
-			<value>Select Boolean Checkbox</value>
+			<value>%selectBooleanCheckbox.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_SELECTBOOLEANCHECKBOX.gif</value>
@@ -337,7 +347,7 @@
 	</entity>
 	<entity id="selectManyCheckbox" type="tag">
 		<trait id="display-label">
-			<value>Select Many Checkbox</value>
+			<value>%selectManyCheckbox.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_SELECTMANYCHECKBOX.gif</value>
@@ -351,7 +361,7 @@
 	</entity>
 	<entity id="selectManyListbox" type="tag">
 		<trait id="display-label">
-			<value>Select Many Listbox</value>
+			<value>%selectManyListbox.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_SELECTMANYLISTBOX.gif</value>
@@ -365,7 +375,7 @@
 	</entity>
 	<entity id="selectManyMenu" type="tag">
 		<trait id="display-label">
-			<value>Select Many Menu</value>
+			<value>%selectManyMenu.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_SELECTMANYMENU.gif</value>
@@ -379,7 +389,7 @@
 	</entity>
 	<entity id="selectOneListbox" type="tag">
 		<trait id="display-label">
-			<value>Select One Listbox</value>
+			<value>%selectOneListbox.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_SELECTONELISTBOX.gif</value>
@@ -393,7 +403,7 @@
 	</entity>
 	<entity id="selectOneMenu" type="tag">
 		<trait id="display-label">
-			<value>Select One Menu</value>
+			<value>%selectOneMenu.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_SELECTONEMENU.gif</value>
@@ -407,7 +417,7 @@
 	</entity>
 	<entity id="selectOneRadio" type="tag">
 		<trait id="display-label">
-			<value>Select One Radio</value>
+			<value>%selectOneRadio.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_SELECTONERADIO.gif</value>
@@ -421,7 +431,7 @@
 	</entity>
 	<entity id="column" type="tag">
 		<trait id="display-label">
-			<value>Column</value>
+			<value>%column.display-label</value>
 		</trait>
 		<trait id="small-icon">
 			<value>small/JSF_COLUMN.gif</value>
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/metadata/jsp11.properties b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsp11.properties
similarity index 100%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/metadata/jsp11.properties
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsp11.properties
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/metadata/jsp11.xml b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsp11.xml
similarity index 99%
rename from jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/metadata/jsp11.xml
rename to jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsp11.xml
index df0690e..1cd7345 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/metadata/jsp11.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/metadata/jsp11.xml
@@ -29,7 +29,7 @@
 	</trait>
 
 	<trait id="images-base-path">
-		<value>icons/palette/JSP</value>
+		<value>$nl$/icons/palette/JSP</value>
 	</trait>
 
 	<trait id="display-label">
diff --git a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/plugin.xml b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/plugin.xml
index 8f62de9..f428469 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/plugin.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.standard.tagsupport/plugin.xml
@@ -4,12 +4,30 @@
    <extension
          point="org.eclipse.jst.jsf.common.standardMetaDataFiles">
       <standardMetaDataFile
+          location="$nl$/metadata/html.xml"
+          uri="HTML"/>            
+      <standardMetaDataFile
+          location="$nl$/metadata/jsp11.xml"
+          uri="JSP11"/>         
+      <standardMetaDataFile
             location="/metadata/jsf_html.xml"
             uri="http://java.sun.com/jsf/html"/>
       <standardMetaDataFile
+            location="/metadata/jsf_html_pi.xml"
+            uri="http://java.sun.com/jsf/html"/>  
+      <standardMetaDataFile
+            location="/metadata/jsf_html_dti.xml"
+            uri="http://java.sun.com/jsf/html"/>                       
+      <standardMetaDataFile
             location="/metadata/jsf_core.xml"
             uri="http://java.sun.com/jsf/core"/>
       <standardMetaDataFile
+            location="/metadata/jsf_core_pi.xml"
+            uri="http://java.sun.com/jsf/core"/>      
+      <standardMetaDataFile
+            location="/metadata/jsf_core_dti.xml"
+            uri="http://java.sun.com/jsf/core"/>                   
+      <standardMetaDataFile
             location="/metadata/symbolInfoMetadata.xml"
             uri="http://java.sun.com/jsf/core"/>
    </extension>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.jsf.ui/META-INF/MANIFEST.MF
index fff6e0e..5a43a49 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %plugin.name
 Bundle-SymbolicName: org.eclipse.jst.jsf.ui; singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Activator: org.eclipse.jst.jsf.ui.internal.JSFUiPlugin
 Bundle-Vendor: %plugin.provider
 Bundle-Localization: plugin
@@ -15,19 +15,25 @@
  org.eclipse.wst.common.frameworks.ui;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.jst.jsf.common;bundle-version="[1.0.0,1.1.0)",
  org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.jst.jsp.core;bundle-version="[1.1.0,1.3.0)",
  org.eclipse.wst.xml.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.xml.ui;bundle-version="[1.0.100,1.1.0)",
- org.eclipse.wst.sse.ui;bundle-version="[1.0.101,1.1.0)",
- org.eclipse.emf.ecore;bundle-version="[2.2.0,2.4.0)",
+ org.eclipse.wst.sse.ui;bundle-version="[1.0.101,1.2.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.2.0,3.0.0)",
  org.eclipse.jst.jsp.ui;bundle-version="[1.1.0,1.3.0)",
- org.eclipse.ui.forms
-Eclipse-LazyStart: true
+ org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.wst.sse.core;bundle-version="[1.0.101,1.2.0)",
+ org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.jst.jsf.common.runtime;bundle-version="[1.0.0,1.1.0)",
+ org.eclipse.jst.jsp.core,
+ org.eclipse.wst.validation;bundle-version="1.1.103"
+Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.jst.jsf.ui.internal;x-friends:="org.eclipse.jst.jsf.ui.tests",
  org.eclipse.jst.jsf.ui.internal.classpath;x-friends:="org.eclipse.jst.jsf.ui.tests",
  org.eclipse.jst.jsf.ui.internal.contentassist;x-internal:=true,
  org.eclipse.jst.jsf.ui.internal.contentassist.el;x-internal:=true,
  org.eclipse.jst.jsf.ui.internal.jsflibraryconfig;x-internal:=true,
+ org.eclipse.jst.jsf.ui.internal.jspeditor;x-internal:=true,
+ org.eclipse.jst.jsf.ui.internal.preferences;x-internal:=true,
  org.eclipse.jst.jsf.ui.internal.project.facet;x-friends:="org.eclipse.jst.jsf.ui.tests",
  org.eclipse.jst.jsf.ui.internal.validation;x-internal:=true
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/icons/sample.gif b/jsf/plugins/org.eclipse.jst.jsf.ui/icons/sample.gif
new file mode 100644
index 0000000..34fb3c9
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/icons/sample.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.properties b/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.properties
index b3c2077..27d91bb 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.properties
@@ -10,6 +10,7 @@
 ###############################################################################
 plugin.name=JavaServer Faces Tools - UI
 plugin.provider=Eclipse.org
+EL_Hyperlinkdetector_name=JSF EL Symbol
 
 jsf.library.reference=JSF Library References
 jsf.library.wizard.name=JSF Library
@@ -18,7 +19,13 @@
 preferencepage.jsfvalidation.name=Validation
 preferencepage.jsf.name=JavaServer Faces Tools
 
-newwizard.jsf.category.name=JavaServer Faces
-newwizard.jsflibrary.name=JSF Library
-newwizard.jsflibrary.description=Create a new JSF Library
-classpathContainerPage.name.0 = JSF Libraries
\ No newline at end of file
+classpathContainerPage.name.0 = JSF Libraries
+
+jsf.ui.views.category.name=JavaServer Faces
+
+jsf.ui.views.componentview.name=JSF Component Tree
+jsf.ui.views.jsftagregistry.name=Tag Registry
+
+JSFNonELAttributeValueValidator=JSF View Validator
+JSFAppConfigValidator=JSF Application Configuration Validator
+JSPSemanticsValidatorMarker=JSF Problem
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.xml b/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.xml
index aa03746..c1a2954 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.xml
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/plugin.xml
@@ -5,41 +5,23 @@
   <extension
         point="org.eclipse.ui.preferencePages">
      <page
-           category="org.eclipse.wst.sse.ui.internal.provisional.preferences/org.eclipse.jst.jsf.ui.JSFRootPage"
+           category="org.eclipse.jst.jsf.ui.JSFRootPage"
            class="org.eclipse.jst.jsf.ui.internal.classpath.JSFLibrariesPreferencePage"
            id="org.eclipse.jst.jsf.ui.jsfLibraryPage"
            name="%preferencepage.jsflibraries.name"/>
      <page
-           category="org.eclipse.wst.sse.ui.internal.provisional.preferences/org.eclipse.jst.jsf.ui.JSFRootPage"
+           category="org.eclipse.jst.jsf.ui.JSFRootPage"
            class="org.eclipse.jst.jsf.ui.internal.validation.JSFValidationPreferencePage"
            id="org.eclipse.jst.jsf.ui.JSFValidationPage"
            name="%preferencepage.jsfvalidation.name"/>
      <page
-           category="org.eclipse.wst.sse.ui.internal.provisional.preferences"
+           category="org.eclipse.wst.html.ui.preferences.web"
            class="org.eclipse.jst.jsf.ui.internal.preferences.EmptyRootPreferencePage"
            id="org.eclipse.jst.jsf.ui.JSFRootPage"
            name="%preferencepage.jsf.name">
      </page>
   </extension>
-  <extension
-        point="org.eclipse.ui.newWizards">
-     <category
-           id="org.eclipse.jst.jsf.ui.jsfcategory"
-           name="%newwizard.jsf.category.name"/>
-     <wizard
-           canFinishEarly="false"
-           category="org.eclipse.jst.jsf.ui.jsfcategory"
-           class="org.eclipse.jst.jsf.ui.internal.classpath.JSFLibraryWizard"
-           hasPages="true"
-           icon="icons/obj16/library_obj.gif"
-           id="org.eclipse.jst.jsf.ui.jsfLibraryWizard"
-           name="%newwizard.jsflibrary.name"
-           preferredPerspectives="org.eclipse.jst.j2ee.J2EEPerspective">
-        <description>
-           %newwizard.jsflibrary.description
-        </description>
-     </wizard>
-  </extension>
+
   <extension 
         point="org.eclipse.wst.common.project.facet.ui.wizardPages">
      <wizard-pages action="jst.jsf.v11.install">
@@ -61,12 +43,16 @@
 				<provisionalConfiguration 
                         type="contentassistprocessor" 
                         class="org.eclipse.jst.jsf.ui.internal.contentassist.JSFContentAssistProcessor" 
-                        target="org.eclipse.jst.jsp.JSP_DEFAULT,org.eclipse.jst.jsp.JSP_DIRECTIVE" />                         
+                        target="org.eclipse.jst.jsp.JSP_DEFAULT,org.eclipse.jst.jsp.JSP_DIRECTIVE" />
+    <documentationTextHover
+          class="org.eclipse.jst.jsf.ui.internal.jspeditor.JSFELHover"
+          target="org.eclipse.jst.jsp.SCRIPT.JSP_EL2">
+    </documentationTextHover>
     </extension> 
     <extension point="org.eclipse.wst.sse.ui.sourcevalidation">
 		<validator
 			scope="total"
-			class="org.eclipse.jst.jsf.validation.internal.JSPSemanticsValidator"
+			class="org.eclipse.jst.jsf.ui.internal.validation.JSFValidator"
 			id="org.eclipse.jst.jsf.validation.JSFAttributeValueValidator">
 			<contentTypeIdentifier
 				id="org.eclipse.jst.jsp.core.jspsource">
@@ -87,5 +73,105 @@
              name="%classpathContainerPage.name.0">
        </classpathContainerPage>
     </extension>
-    
+    <extension
+          point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectors">
+       <hyperlinkDetector
+             class="org.eclipse.jst.jsf.ui.internal.jspeditor.ELHyperlinkDetector"
+             id="org.eclipse.jst.jsf.ui.elhyperlinkdetector"
+             name="%EL_Hyperlinkdetector_name"
+             targetId="org.eclipse.jst.jsp.core.jspsource">
+       </hyperlinkDetector>
+    </extension>
+
+   <extension
+         point="org.eclipse.ui.views">
+      <category
+            name="%jsf.ui.views.category.name"
+            id="org.eclipse.jst.jsf.ui.view.category">
+      </category>
+      <view
+            name="%jsf.ui.views.componentview.name"
+            icon="icons/sample.gif"
+            category="org.eclipse.jst.jsf.ui.view.category"
+            class="org.eclipse.jst.jsf.ui.internal.component.ComponentTreeView"
+            id="org.eclipse.jst.jsf.ui.component.ComponentTreeView">
+      </view>
+      <view
+            name="%jsf.ui.views.jsftagregistry.name"
+            icon="icons/sample.gif"
+            category="org.eclipse.jst.jsf.ui.view.category"
+            class="org.eclipse.jst.jsf.ui.internal.tagregistry.TagRegistryView"
+            id="org.eclipse.jst.jsf.ui.tagregistry.TagRegistryView">
+      </view>
+   </extension>
+   
+   <extension
+        id="JSPSemanticsValidatorMarker"
+        name="%JSPSemanticsValidatorMarker"
+        point="org.eclipse.core.resources.markers">
+      <super
+            type="org.eclipse.wst.validation.problemmarker">
+      </super>
+    </extension>
+
+   <extension
+        point="org.eclipse.wst.validation.validator"
+        id="JSFNonELAttributeValueValidator"
+        name="%JSFNonELAttributeValueValidator">
+        <validator>
+            <projectNature id="org.eclipse.wst.common.modulecore.ModuleCoreNature" />
+            <projectNature id="org.eclipse.jdt.core.javanature" />
+            <enablement>
+                <and>
+                    <test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jst.java"/>
+                    <test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jst.web"/>
+                    <test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="jst.jsf"/>
+                </and>
+            </enablement> 
+            
+            <markerId
+               markerIdValue="JSPSemanticsValidatorMarker">
+            </markerId>
+            <helper 
+                class="org.eclipse.wst.validation.internal.operations.WorkbenchContext">
+            </helper>
+            <run
+                class="org.eclipse.jst.jsf.ui.internal.validation.JSFValidator"
+                incremental="true"
+                fullBuild="true"
+            />
+   <contentTypeBinding
+         contentTypeId="org.eclipse.jst.jsp.core.jspsource">
+   </contentTypeBinding>
+   <contentTypeBinding
+         contentTypeId="org.eclipse.jst.jsp.core.jspfragmentsource">
+   </contentTypeBinding>
+        </validator>
+        </extension>
+        
+    <extension
+        point="org.eclipse.wst.validation.validator"
+        id="JSFAppConfigValidator"
+        name="%JSFAppConfigValidator">
+        <validator>
+            <projectNature id="org.eclipse.wst.common.modulecore.ModuleCoreNature" />
+            <projectNature id="org.eclipse.jdt.core.javanature" />
+            <filter
+                objectClass="org.eclipse.core.resources.IFile"
+                nameFilter="faces-config.xml">
+            </filter>
+            <markerId
+               markerIdValue="JSPSemanticsValidatorMarker">
+            </markerId>
+            <helper 
+                class="org.eclipse.wst.validation.internal.operations.WorkbenchContext">
+            </helper>
+            <run
+                class="org.eclipse.jst.jsf.validation.internal.appconfig.AppConfigValidator"
+                incremental="true"
+                fullBuild="true"
+            />
+        </validator>
+    </extension>
+        
 </plugin>
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/JSFUiPlugin.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/JSFUiPlugin.java
index 8b043ad..b80b6cf 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/JSFUiPlugin.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/JSFUiPlugin.java
@@ -11,9 +11,6 @@
  *******************************************************************************/ 
 package org.eclipse.jst.jsf.ui.internal;
 
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -33,8 +30,7 @@
 	public static final String PLUGIN_ID = "org.eclipse.jst.jsf.ui"; //$NON-NLS-1$
 	//The shared instance.
 	private static JSFUiPlugin plugin;
-    private static ResourceBundle   _resourceBundle;
-    
+
 	/**
 	 * The constructor.
 	 */
@@ -77,29 +73,6 @@
 		return AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.jst.jsf.ui", path); //$NON-NLS-1$
 	}
 
-    /**
-     * Returns the string from the plugin's resource bundle, or 'key' if not
-     * found.
-     * @param key the key used to look up the string
-     * @return the resource string if one is found matching key or key is returned if it is not
-     */
-    public static String getResourceString(String key) {
-        ResourceBundle bundle = getDefault().getResourceBundle();
-        try {
-            return (bundle != null) ? bundle.getString(key) : key;
-        } catch (MissingResourceException e) {
-            return key;
-        }
-    }
-    
-    /**
-     * @return the resource bundle
-     */
-    public ResourceBundle getResourceBundle()
-    {
-        return _resourceBundle;
-    }
-    
 	/**
 	 * @return the plugin id
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
index 147df36..15592d6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/Messages.java
@@ -21,6 +21,10 @@
 public class Messages extends NLS {
 	private static final String BUNDLE_NAME = "org.eclipse.jst.jsf.ui.internal.messages"; //$NON-NLS-1$
 
+    static {
+        NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+    }
+
 	/**
 	 * see messages.properties
 	 */
@@ -372,8 +376,4 @@
      * see messages.properties
      */
     public static String JSFPreferences_RootPage_Description;
-    
-    static {
-		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibrariesPreferencePage.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibrariesPreferencePage.java
index 772939f..db72352 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibrariesPreferencePage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibrariesPreferencePage.java
@@ -56,11 +56,8 @@
  * 
  * @author Gerry Kessler - Oracle
  */
-public class JSFLibrariesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage{
-	private static final String IMPL_DESC = Messages.JSFLibrariesPreferencePage_IMPL_DESC;
-	private static final String DEFAULT_IMPL_DESC = Messages.JSFLibrariesPreferencePage_DEFAULT_IMPL_DESC;
-	private static final String MISSING = Messages.JSFLibrariesPreferencePage_MISSING_DESC;
-	
+public class JSFLibrariesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage
+{
 	private IWorkbench wb;
 
 	private TreeViewer tv;
@@ -340,19 +337,15 @@
 		return false;
 	}
 
-	private class TreeLabelProvider implements ILabelProvider {
-		Image libImg;
-		Image jarImg;
+	private static class TreeLabelProvider implements ILabelProvider {
+		private final Image libImg;
+		private final Image jarImg;
 
 		TreeLabelProvider(){
-			if (jarImg == null){
-				ImageDescriptor jarImgDesc = JSFUiPlugin.getImageDescriptor("obj16/jar_obj.gif"); //$NON-NLS-1$
-				jarImg = jarImgDesc.createImage();
-			}
-			if (libImg == null){
-				ImageDescriptor libImgDesc = JSFUiPlugin.getImageDescriptor("obj16/library_obj.gif"); //$NON-NLS-1$
-				libImg = libImgDesc.createImage();
-			}
+			ImageDescriptor jarImgDesc = JSFUiPlugin.getImageDescriptor("obj16/jar_obj.gif"); //$NON-NLS-1$
+			jarImg = jarImgDesc.createImage();
+			ImageDescriptor libImgDesc = JSFUiPlugin.getImageDescriptor("obj16/library_obj.gif"); //$NON-NLS-1$
+			libImg = libImgDesc.createImage();
 		}
 		
 		public Image getImage(Object element) {
@@ -370,9 +363,9 @@
 				labelBuf.append(lib.getLabel());
 				if (lib.isImplementation()) {
 					if (lib == JSFLibraryRegistryUtil.getInstance().getJSFLibraryRegistry().getDefaultImplementation()) {
-						labelBuf.append(DEFAULT_IMPL_DESC);
+						labelBuf.append(Messages.JSFLibrariesPreferencePage_DEFAULT_IMPL_DESC);
 					} else {
-						labelBuf.append(IMPL_DESC);
+						labelBuf.append(Messages.JSFLibrariesPreferencePage_IMPL_DESC);
 					}
 				}
 			}
@@ -380,7 +373,7 @@
 				ArchiveFile jar = (ArchiveFile)element;
 				labelBuf.append(jar.getName());
 				if (!jar.exists())
-					labelBuf.append(MISSING);
+					labelBuf.append(Messages.JSFLibrariesPreferencePage_MISSING_DESC);
 				labelBuf.append(" - ").append(((ArchiveFile)element).getSourceLocation()); //$NON-NLS-1$
 			}
 			return labelBuf.toString();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryContainerWizardPage.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryContainerWizardPage.java
index fdbe74d..950a405 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryContainerWizardPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryContainerWizardPage.java
@@ -88,8 +88,6 @@
 	private boolean   _projectHaveV1JSFLibraries; // = false;
 	private IProject  _iproject;
 
-	private static final String IMPL_DESC = Messages.JSFLibrariesPreferencePage_IMPL_DESC;
-	
 	/**
 	 * Zero arg constructor
 	 */
@@ -507,7 +505,7 @@
 		}
 	}
 	
-	private class JSFLibrariesListLabelProvider implements ILabelProvider{		
+	private static class JSFLibrariesListLabelProvider implements ILabelProvider{		
 		Image libImg;
 		public Image getImage(Object element) {
 			if (libImg == null){
@@ -521,7 +519,7 @@
 			if (element instanceof JSFLibrary) {
 				JSFLibrary lib = (JSFLibrary)element;
 				if (lib.isImplementation()) {
-					return lib.getLabel() + " " + IMPL_DESC; //$NON-NLS-1$
+					return lib.getLabel() + " " + Messages.JSFLibrariesPreferencePage_IMPL_DESC; //$NON-NLS-1$
 				}
                 return lib.getLabel();
 			}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryEditControl.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryEditControl.java
index e751dd9..c781571 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryEditControl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryEditControl.java
@@ -54,8 +54,8 @@
 /**
  * Common control for adding JSF library instances
  */
-public class JSFLibraryEditControl extends Composite implements ModifyListener, SelectionListener {
-	private static final String MISSING = Messages.JSFLibrariesPreferencePage_MISSING_DESC;
+public class JSFLibraryEditControl extends Composite implements ModifyListener, SelectionListener 
+{
 	private Text txtName;
 	private Label lblName;
 	private CCombo cboVersions;
@@ -208,7 +208,7 @@
 					ArchiveFile archive = (ArchiveFile) element;
 					labelBuf.append(archive.getName());	
 					if (!archive.exists())
-						labelBuf.append(MISSING); 
+						labelBuf.append(Messages.JSFLibrariesPreferencePage_MISSING_DESC); 
 					labelBuf.append(" - ").append(archive.getPath()); //$NON-NLS-1$
 				}
 				return labelBuf.toString();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryWizard.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryWizard.java
index bfab216..bf771b1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryWizard.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryWizard.java
@@ -48,11 +48,11 @@
 	/**
 	 * Implementation libaries to be included
 	 */
-	public static int IMPLS = 1;
+	public final static int IMPLS = 1;
 	/**
 	 * Non-Implementation libaries to be included
 	 */
-	public static int NONIMPLS = 2;
+	public final static int NONIMPLS = 2;
 	
 	private JSFLibraryEditControl jsfLibraryEditControl;
 	
@@ -64,9 +64,6 @@
 
 	private JSFLibraryWizardPage page;
 
-	private static final String DESCRIPTION = Messages.JSFLibraryWizard_DESCRIPTION;
-	private static final String IMPLS_ONLY_DESC = Messages.JSFLibraryWizard_IMPLS_ONLY_DESC;
-
 	private boolean _impls;	
 	private boolean _nonimpls;
 	
@@ -211,7 +208,7 @@
 		else {
 			curLibrary.updateValues(workingCopyLibrary);
 			try {
-				JSFLibraryRegistryUtil.rebindClasspathContainerEntries(originalID, workingCopyLibrary.getID(), false, null);
+				JSFLibraryRegistryUtil.rebindClasspathContainerEntries(originalID, workingCopyLibrary.getID(), null);
 			} catch (JavaModelException e) {
 				JSFUiPlugin.log(IStatus.ERROR, "Exception while updating JSF Library containers", e); //$NON-NLS-1$
 			}
@@ -243,7 +240,9 @@
 		 */
 		protected JSFLibraryWizardPage(String pageName) {
 			super(pageName);
-			setDescription(isImplsOnly() ? IMPLS_ONLY_DESC : DESCRIPTION);
+			setDescription(isImplsOnly() 
+			        ? Messages.JSFLibraryWizard_IMPLS_ONLY_DESC
+			        : Messages.JSFLibraryWizard_DESCRIPTION);
 			setTitle(Messages.JSFLibraryWizard_JSFLibrary);
 		}
 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryWizardPage.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryWizardPage.java
deleted file mode 100644
index f2209f9..0000000
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/classpath/JSFLibraryWizardPage.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005 Oracle Corporation.
- * 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:
- *    Gerry Kessler - initial API and implementation
- *******************************************************************************/ 
-package org.eclipse.jst.jsf.ui.internal.classpath;
-
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.jst.jsf.core.internal.jsflibraryregistry.JSFLibrary;
-import org.eclipse.jst.jsf.ui.internal.Messages;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * Dialog for creating or editing a JSF Library or Implementation.
- * <br>
- * If the selection passed in init is not null then the item will be edit mode.
- * 
- * @author Gerry Kessler - Oracle
- */
-public class JSFLibraryWizardPage extends WizardPage {
-
-	private boolean modified = false;
-	private JSFLibrary workingCopyLibrary;
-
-	private static final String DESCRIPTION = Messages.JSFLibraryWizard_DESCRIPTION;
-
-	/**
-	 * Constructor
-	 */
-	public JSFLibraryWizardPage(){
-		super("JSFLibrary"); //$NON-NLS-1$
-	}
-
-	/**
-	 * @return JSF Library working copy 
-	 */
-	public JSFLibrary getJSFLibrary() {
-		return workingCopyLibrary;
-	}
-
-	/**
-	 * Constructor
-	 * @param pageName
-	 */
-	public JSFLibraryWizardPage(String pageName) {
-		super(pageName);
-		setDescription(DESCRIPTION);//implsOnly ? IMPLS_ONLY_DESC : 
-		setTitle(Messages.JSFLibraryWizard_JSFLibrary);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
-	 */
-	public boolean isPageComplete() {
-		if (modified == false) {
-			return false;
-		}
-		return super.isPageComplete();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
-	 */
-	public void createControl(Composite parent) {
-		initializeDialogUnits(parent);
-
-		JSFLibraryEditControl editControl = new JSFLibraryEditControl(workingCopyLibrary, parent);		
-		editControl.addValidationListener(new JSFLibraryValidationListener(){
-			public void notifyValidation(JSFLibraryValidationEvent e) {
-				setErrorMessage(e.getMessage());
-				modified = true;
-				setPageComplete(getErrorMessage()==null);					
-			}			
-		});
-		setControl(editControl);
-		setPageComplete(false);
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/ComponentDetailTableProvider.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/ComponentDetailTableProvider.java
new file mode 100644
index 0000000..7b6db88
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/ComponentDetailTableProvider.java
@@ -0,0 +1,130 @@
+package org.eclipse.jst.jsf.ui.internal.component;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo.ComponentBeanProperty;
+import org.eclipse.jst.jsf.ui.internal.JSFUiPlugin;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * A table content provider for component attributes.
+ * 
+ * @author cbateman
+ * 
+ */
+public class ComponentDetailTableProvider implements IStructuredContentProvider
+{
+    private final static Object[] NO_ELEMENT = new Object[0];
+
+    public void dispose()
+    {
+        // TODO Auto-generated method stub
+
+    }
+
+    public void inputChanged(final Viewer viewer, final Object oldInput,
+            final Object newInput)
+    {
+        // TODO Auto-generated method stub
+    }
+
+    public Object[] getElements(final Object inputElement)
+    {
+        if (inputElement instanceof ComponentInfo)
+        {
+            final List<ComponentProperty> tableProperties = new ArrayList();
+            final ComponentInfo comp = (ComponentInfo) inputElement;
+
+            final Runnable r = new Runnable()
+            {
+                public void run()
+                {
+                    synchronized (comp)
+                    {
+                        for (final Iterator it = comp.getAttributeNames()
+                                .iterator(); it.hasNext();)
+                        {
+                            final String name = (String) it.next();
+                            final ComponentBeanProperty beanProp = comp.getAttribute(name);
+
+                            tableProperties.add(new ComponentProperty(name, beanProp.getValue()));
+                        }
+                    }
+                }
+            };
+
+            // if we are on the UI thread then set a timer that interrupts
+            // the bean property updater after 10 seconds to prevent deadlock
+            // on the comp synchronization monitor
+            if (Thread.currentThread() == PlatformUI.getWorkbench()
+                    .getDisplay().getThread())
+            {
+                try
+                {
+                    final Thread interruptMe = new Thread(r);
+                    interruptMe.start();
+                    interruptMe.join(10000);
+                }
+                catch (InterruptedException e)
+                {
+                    JSFUiPlugin.log(IStatus.ERROR,
+                            "Interrupted during bean eval", e);
+                }
+            }
+            // if not on the UI thread, then just run it.
+            else
+            {
+                r.run();
+            }
+
+            return tableProperties.toArray();
+        }
+
+        // otherwise, no elements
+        return NO_ELEMENT;
+    }
+
+    /**
+     * A value object for a single component name/value pair
+     * 
+     * @author cbateman
+     * 
+     */
+    public static class ComponentProperty
+    {
+        private final String _name;
+        private final Object _value;
+
+        /**
+         * @param name
+         * @param value
+         */
+        public ComponentProperty(final String name, final Object value)
+        {
+            _name = name;
+            _value = value;
+        }
+
+        /**
+         * @return the property name
+         */
+        public final String getName()
+        {
+            return _name;
+        }
+
+        /**
+         * @return the property value
+         */
+        public final Object getValue()
+        {
+            return _value;
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/ComponentTreeView.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/ComponentTreeView.java
new file mode 100644
index 0000000..c973040
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/ComponentTreeView.java
@@ -0,0 +1,390 @@
+package org.eclipse.jst.jsf.ui.internal.component;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jst.jsf.common.runtime.internal.model.decorator.Decorator;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.ResolverUtil;
+import org.eclipse.jst.jsf.designtime.DesignTimeApplicationManager;
+import org.eclipse.jst.jsf.ui.internal.component.ComponentDetailTableProvider.ComponentProperty;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.IPage;
+import org.eclipse.ui.part.MessagePage;
+import org.eclipse.ui.part.Page;
+import org.eclipse.ui.part.PageBook;
+import org.eclipse.ui.part.PageBookView;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+
+/**
+ * A basic page-based view, similar to outline, that shows the design-time
+ * component tree for a JSF view definition.
+ */
+
+public class ComponentTreeView extends PageBookView
+{
+
+    /**
+     * This is a callback that will allow us to create the viewer and initialize
+     * it.
+     */
+    @Override
+    public void createPartControl(final Composite parent)
+    {
+        super.createPartControl(parent);
+
+        // Create the help context id for the viewer's control
+        // PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(),
+        // "ComponentTreeViewerPrototype.viewer");
+        // makeActions();
+        // hookContextMenu();
+        // hookDoubleClickAction();
+        // contributeToActionBars();
+    }
+
+    // private void hookContextMenu() {
+    // MenuManager menuMgr = new MenuManager("#PopupMenu");
+    // menuMgr.setRemoveAllWhenShown(true);
+    // menuMgr.addMenuListener(new IMenuListener() {
+    // public void menuAboutToShow(IMenuManager manager) {
+    // SampleView.this.fillContextMenu(manager);
+    // }
+    // });
+    // Menu menu = menuMgr.createContextMenu(viewer.getControl());
+    // viewer.getControl().setMenu(menu);
+    // getSite().registerContextMenu(menuMgr, viewer);
+    // }
+
+    // private void contributeToActionBars() {
+    // IActionBars bars = getViewSite().getActionBars();
+    // fillLocalPullDown(bars.getMenuManager());
+    // fillLocalToolBar(bars.getToolBarManager());
+    // }
+
+    // private void fillLocalPullDown(IMenuManager manager) {
+    // manager.add(action1);
+    // manager.add(new Separator());
+    // manager.add(action2);
+    //
+
+    // private void fillContextMenu(IMenuManager manager) {
+    // manager.add(action1);
+    // manager.add(action2);
+    // manager.add(new Separator());
+    // drillDownAdapter.addNavigationActions(manager);
+    // // Other plug-ins can contribute there actions here
+    // manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+    // }
+    //
+    // private void fillLocalToolBar(IToolBarManager manager) {
+    // manager.add(action1);
+    // manager.add(action2);
+    // manager.add(new Separator());
+    // drillDownAdapter.addNavigationActions(manager);
+    // }
+
+    // private void makeActions() {
+    // action1 = new Action() {
+    // public void run() {
+    // showMessage("Action 1 executed");
+    // }
+    // };
+    // action1.setText("Action 1");
+    // action1.setToolTipText("Action 1 tooltip");
+    // action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+    // getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+    //
+    // action2 = new Action() {
+    // public void run() {
+    // showMessage("Action 2 executed");
+    // }
+    // };
+    // action2.setText("Action 2");
+    // action2.setToolTipText("Action 2 tooltip");
+    // action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
+    // getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+    // doubleClickAction = new Action() {
+    // public void run() {
+    // ISelection selection = viewer.getSelection();
+    // Object obj = ((IStructuredSelection)selection).getFirstElement();
+    // showMessage("Double-click detected on "+obj.toString());
+    // }
+    // };
+    // }
+
+    // private void hookDoubleClickAction() {
+    // viewer.addDoubleClickListener(new IDoubleClickListener() {
+    // public void doubleClick(DoubleClickEvent event) {
+    // doubleClickAction.run();
+    // }
+    // });
+    // }
+    // private void showMessage(String message) {
+    // MessageDialog.openInformation(
+    // viewer.getControl().getShell(),
+    // "Sample View",
+    // message);
+    // }
+    //
+    // /**
+    // * Passing the focus request to the viewer's control.
+    // */
+    // public void setFocus() {
+    // viewer.getControl().setFocus();
+    //
+
+    @Override
+    protected IPage createDefaultPage(final PageBook book)
+    {
+        final MessagePage page = new MessagePage();
+        initPage(page);
+        page.createControl(book);
+        page.setMessage("Nothing to display");
+        return page;
+    }
+
+    @Override
+    protected PageRec doCreatePage(final IWorkbenchPart part)
+    {
+        final ComponentPage page = new ComponentPage(getDocumentFromPart(part));
+        initPage(page);
+        page.createControl(getPageBook());
+        return new PageRec(part, page);
+    }
+
+    @Override
+    protected void doDestroyPage(final IWorkbenchPart part,
+            final PageRec pageRecord)
+    {
+        pageRecord.page.dispose();
+        pageRecord.dispose();
+    }
+
+    private IDocument getDocumentFromPart(final IWorkbenchPart part)
+    {
+        return (IDocument) part.getAdapter(IDocument.class);
+    }
+
+    /**
+     * The view shows the palette associated with the active editor.
+     * 
+     * @see PageBookView#getBootstrapPart()
+     */
+    @Override
+    protected IWorkbenchPart getBootstrapPart()
+    {
+        final IWorkbenchPage page = getSite().getPage();
+        if (page != null)
+        {
+            return page.getActiveEditor();
+        }
+        return null;
+    }
+
+    @Override
+    protected boolean isImportant(final IWorkbenchPart part)
+    {
+        final IDocument  document = getDocumentFromPart(part);
+        
+        if (document != null)
+        {
+            IFile file = ResolverUtil.getFileForDocument(document);
+            
+            if (file != null)
+            {
+                DesignTimeApplicationManager manager =
+                    DesignTimeApplicationManager.getInstance(file.getProject());
+                
+                if (manager != null)
+                {
+                    return manager.hasDTFacesContext(file);
+                }
+            }
+        }
+        
+        // fall through, then no, not important.
+        return false;
+    }
+
+    private static class ComponentPage extends Page
+    {
+        private TreeViewer _treeViewer;
+        private final IDocument _document;
+        private TableViewer _detailsViewer;
+        private Composite _splitThePane;
+
+        public ComponentPage(final IDocument document)
+        {
+            _document = document;
+        }
+
+        @Override
+        public void createControl(final Composite parent)
+        {
+            final GridData gridData = new GridData(SWT.FILL, SWT.FILL, true,
+                    true);
+
+            _splitThePane = new Composite(parent, SWT.NONE);
+            _splitThePane.setLayoutData(gridData);
+            GridLayout layout = new GridLayout(2, true);
+            _splitThePane.setLayout(layout);
+
+            _treeViewer = new TreeViewer(_splitThePane, SWT.MULTI
+                    | SWT.H_SCROLL | SWT.V_SCROLL |SWT.BORDER);
+            _treeViewer.getTree().setLayoutData(gridData);
+            _treeViewer.setContentProvider(new ComponentTreeViewProvider());
+            _treeViewer.setLabelProvider(new TreeViewLabelProvider());
+            _treeViewer.setSorter(new ComponentTreeSorter());
+
+            final DTJSFViewModel model = new DTJSFViewModel(
+                    (IStructuredDocument) _document);
+            model.init(new Runnable()
+            {
+                public void run()
+                {
+                    PlatformUI.getWorkbench().getDisplay().asyncExec(
+                            new Runnable()
+                            {
+                                public void run()
+                                {
+                                    _treeViewer.setInput(model);
+                                }
+                            });
+                }
+
+            });
+
+            _detailsViewer = new TableViewer(_splitThePane,SWT.MULTI
+                    | SWT.H_SCROLL | SWT.V_SCROLL |SWT.BORDER);
+            _detailsViewer.getTable().setLayoutData(gridData);
+            TableColumn column = new TableColumn(_detailsViewer.getTable(),
+                    SWT.NONE);
+            column.setWidth(100);
+            column = new TableColumn(_detailsViewer.getTable(), SWT.NONE);
+            column.setWidth(100);
+            _detailsViewer
+                    .setContentProvider(new ComponentDetailTableProvider());
+            _detailsViewer.setLabelProvider(new ComponentDetailLabelProvider());
+
+            // hook selection in the tree to setting the input on table
+            _treeViewer
+                    .addSelectionChangedListener(new ISelectionChangedListener()
+                    {
+                        public void selectionChanged(SelectionChangedEvent event)
+                        {
+                            IStructuredSelection selection = (IStructuredSelection) event
+                                    .getSelection();
+                            
+                            if (selection != null && selection.size()>0)
+                            _detailsViewer
+                                    .setInput(selection.getFirstElement());
+                        }
+
+                    });
+        }
+
+        @Override
+        public Control getControl()
+        {
+            return _splitThePane;
+        }
+
+        @Override
+        public void setFocus()
+        {
+            // do nothing
+        }
+
+        static class TreeViewLabelProvider extends LabelProvider
+        {
+            @Override
+            public String getText(final Object obj)
+            {
+                return obj.toString();
+            }
+
+            @Override
+            public Image getImage(final Object obj)
+            {
+                final String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
+                return PlatformUI.getWorkbench().getSharedImages().getImage(
+                        imageKey);
+            }
+        }
+
+        static class ComponentDetailLabelProvider extends LabelProvider
+                implements ITableLabelProvider
+        {
+            public Image getColumnImage(final Object element,
+                    final int columnIndex)
+            {
+                // no image
+                return null;
+            }
+
+            public String getColumnText(final Object element,
+                    final int columnIndex)
+            {
+                String columnText = getText(element);
+
+                if (element instanceof ComponentProperty)
+                {
+                    switch (columnIndex)
+                    {
+                        case 0:
+                            columnText = ((ComponentProperty) element)
+                                    .getName();
+                            break;
+
+                        case 1:
+                            final Object val = ((ComponentProperty) element)
+                                    .getValue();
+
+                            columnText = val != null ? val.toString() : "null";
+                    }
+                }
+                return columnText;
+            }
+
+        }
+    }
+
+    private static class ComponentTreeSorter extends ViewerSorter
+    {
+        
+        @Override
+        public int compare(Viewer viewer, Object e1, Object e2)
+        {
+            return 0;
+        }
+
+        @Override
+        public int category(final Object element)
+        {
+            // sort decorators first into their own category
+            if (element instanceof Decorator)
+            {
+                return 0;
+            }
+            return 1;
+        }
+
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/ComponentTreeViewProvider.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/ComponentTreeViewProvider.java
new file mode 100644
index 0000000..ad5b513
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/ComponentTreeViewProvider.java
@@ -0,0 +1,64 @@
+package org.eclipse.jst.jsf.ui.internal.component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jst.jsf.common.runtime.internal.model.component.ComponentInfo;
+
+/**
+ * A tree view adapter for a design time component tree rooted at a design time
+ * view root.
+ * 
+ * @author cbateman
+ *
+ */
+public class ComponentTreeViewProvider implements IStructuredContentProvider,
+        ITreeContentProvider 
+{
+    private final static Object[]  NO_CHILDREN = new Object[0];
+    
+    public Object[] getElements(Object inputElement) 
+    {
+        if  (inputElement instanceof DTJSFViewModel)
+        {
+            return new Object[] {((DTJSFViewModel)inputElement).getRoot()};
+        }
+        return NO_CHILDREN;
+    }
+
+    public void dispose() 
+    {
+        // nothing to dispose
+    }
+
+    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) 
+    {
+        // do nothing
+    }
+
+    public Object[] getChildren(Object parentElement) 
+    {
+        if (parentElement instanceof ComponentInfo)
+        {
+            List<Object>  children = new ArrayList<Object>();
+            children.addAll(((ComponentInfo)parentElement).getChildren());
+            children.addAll(((ComponentInfo)parentElement).getAllDecorators());
+            return children.toArray();
+        }
+        return NO_CHILDREN;
+    }
+
+    public Object getParent(Object element) 
+    {
+        // no parent
+        return null;
+    }
+
+    public boolean hasChildren(Object element) 
+    {
+        return getChildren(element).length > 0;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/DTJSFViewModel.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/DTJSFViewModel.java
new file mode 100644
index 0000000..8c9d154
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/component/DTJSFViewModel.java
@@ -0,0 +1,91 @@
+package org.eclipse.jst.jsf.ui.internal.component;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.designtime.DesignTimeApplicationManager;
+import org.eclipse.jst.jsf.designtime.context.DTFacesContext;
+import org.eclipse.jst.jsf.designtime.internal.view.DTUIViewRoot;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+
+
+/**
+ * The top-level input model for a design time component tree
+ * 
+ * @author cbateman
+ *
+ */
+public class DTJSFViewModel 
+{
+    private final IStructuredDocument           _document;
+    private final IProject                      _project;
+    private final IFile                         _file;
+    private DTUIViewRoot                        _treeRoot;
+    private final IStructuredDocumentContext    _context;
+
+    /**
+     * @param document
+     * @throws IllegalArgumentException if document cannot be used to initialize a component tree.
+     */
+    public DTJSFViewModel(final IStructuredDocument document)
+    {
+        _document = document;
+        _context =
+            IStructuredDocumentContextFactory.INSTANCE.getContext(_document, -1);
+        
+        final IWorkspaceContextResolver resolver =
+            IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(_context);
+        
+        if (resolver == null)
+        {
+            throw new IllegalArgumentException();
+        }
+        
+        _project = resolver.getProject();
+        _file = (IFile) resolver.getResource();
+        
+        if (_project == null || _file == null)
+        {
+            throw new IllegalArgumentException();
+        }
+    }
+
+    /**
+     * @return the structured document that this view model was created for.
+     */
+    public final IStructuredDocument getDocument() {
+        return _document;
+    }
+    
+    /**
+     * Acquire and initialize the component tree root for the document
+     * @param runnable 
+     */
+    public void init(final Runnable runnable)
+    {
+        final DesignTimeApplicationManager manager = 
+            DesignTimeApplicationManager.getInstance(_project);
+        
+        if (manager != null)
+        {
+            final DTFacesContext facesContext = manager.getFacesContext(_file);
+            
+            if (facesContext != null)
+            {
+                _treeRoot = facesContext.getViewRoot();
+                _treeRoot.refresh(runnable);
+            }
+        }
+    }
+    
+    /**
+     * @return the design time view root
+     */
+    public DTUIViewRoot getRoot()
+    {
+        return _treeRoot;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/contentassist/JSFContentAssistProcessor.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/contentassist/JSFContentAssistProcessor.java
index 625bf5a..6895ed2 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/contentassist/JSFContentAssistProcessor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/contentassist/JSFContentAssistProcessor.java
@@ -98,7 +98,7 @@
 							Node tagElement = attr.getOwnerElement();
 							if (tagElement != null) {
 								String uri = tlResolver.getTagURIForNodeName(tagElement);
-								if (uri != null) {									
+								if (uri != null) {
 									proposals = createProposals(context, uri, tagElement, attr);
 								}
 							}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/contentassist/el/JSFELContentAssistProcessor.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/contentassist/el/JSFELContentAssistProcessor.java
index c398843..a2579e0 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/contentassist/el/JSFELContentAssistProcessor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/contentassist/el/JSFELContentAssistProcessor.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *    Cameron Bateman/Oracle - initial API and implementation
- *    
+ *
  ********************************************************************************/
 
 package org.eclipse.jst.jsf.ui.internal.contentassist.el;
@@ -16,123 +16,109 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.contentassist.ICompletionProposal;
 import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
 import org.eclipse.jface.text.contentassist.IContextInformation;
 import org.eclipse.jface.text.contentassist.IContextInformationValidator;
-import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
-import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.ITextRegionContextResolver;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
 import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
 import org.eclipse.jst.jsf.core.internal.contentassist.el.ContentAssistParser;
 import org.eclipse.jst.jsf.core.internal.contentassist.el.ContentAssistStrategy;
-import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts;
-import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+import org.eclipse.jst.jsf.designtime.DTAppManagerUtil;
+import org.eclipse.jst.jsf.designtime.internal.view.XMLViewDefnAdapter;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException;
+import org.eclipse.jst.jsf.designtime.internal.view.XMLViewDefnAdapter.DTELExpression;
+import org.eclipse.jst.jsf.ui.internal.JSFUiPlugin;
 import org.eclipse.wst.xml.ui.internal.contentassist.ProposalComparator;
 
 /**
  * The content assist processor for JSF EL partitions on attribute values.
  * 
  * @author cbateman
- *
+ * 
  */
-public class JSFELContentAssistProcessor implements IContentAssistProcessor 
+public class JSFELContentAssistProcessor implements IContentAssistProcessor
 {
-	/**
-	 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer, int)
-	 */
-	public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer,
-			int documentPosition) 
-	{
-		final List  proposals = new ArrayList();
-		final IStructuredDocumentContext context = 
-			IStructuredDocumentContextFactory.INSTANCE.getContext(viewer, documentPosition);
-		
-		if (context != null)
-		{
-			ITextRegionContextResolver  resolver = 
-				IStructuredDocumentContextResolverFactory.INSTANCE.getTextRegionResolver(context);
-			
-			if (resolver != null)
-			{
-				final String regionType = resolver.getRegionType();
-				
-				if (regionType != null
-						&& resolver.matchesRelative(new String[] {DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE}))
-				{
-					
-					String elText = null;
-					
-					// if we are in the EL content, then get the current region text
-					if (DOMJSPRegionContexts.JSP_VBL_CONTENT.equals(regionType))
-					{
-						elText = resolver.getRegionText().trim();
-					}
-					// otherwise, we may be at the end of a content region but at
-					// the beginning of a closing brace so check to see if the previous
-					// region was a VBL_CONTENT
-					// TODO: this search algorithm may need improvement
-					else if (regionType.equals(DOMJSPRegionContexts.JSP_VBL_CLOSE))
-					{
-						IStructuredDocumentContext previousContext = 
-							resolver.getPreviousContext();
-						
-						ITextRegionContextResolver prevResolver =
-							IStructuredDocumentContextResolverFactory.INSTANCE.getTextRegionResolver(previousContext);
-						
-						if (prevResolver != null)
-						{
-                            if (DOMJSPRegionContexts.JSP_VBL_CONTENT.equals(prevResolver.getRegionType()))
-                            {
-    							resolver = prevResolver;
-    							elText = prevResolver.getRegionText().trim();
-                            }
-                            else if (DOMJSPRegionContexts.JSP_VBL_OPEN.equals(prevResolver.getRegionType()))
-                            {
-                                elText = ""; //$NON-NLS-1$
-                            }
-						}
-					}
-					
-                    
-					final ContentAssistStrategy strategy = 
-                        ContentAssistParser.getPrefix(documentPosition - resolver.getStartOffset() + 1, elText);
-                    
-					if (strategy != null)
-						proposals.addAll(strategy.getProposals(context));
-				}
-			}
-		}
-		
-        Collections.sort(proposals, new ProposalComparator());
-		return (ICompletionProposal[]) proposals.toArray(new ICompletionProposal[0]);
-	}
+    /**
+     * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer,
+     *      int)
+     */
+    public ICompletionProposal[] computeCompletionProposals(
+            final ITextViewer viewer, final int documentPosition)
+    {
+        final List<ICompletionProposal> proposals =
+                new ArrayList<ICompletionProposal>();
+        final IStructuredDocumentContext context =
+                IStructuredDocumentContextFactory.INSTANCE.getContext(viewer,
+                        documentPosition);
+        if (context != null)
+        {
+            final XMLViewDefnAdapter viewAdapter =
+                    DTAppManagerUtil.getXMLViewDefnAdapter(context);
 
+            if (viewAdapter != null)
+            {
+                try
+                {
+                    final DTELExpression elExpression =
+                            viewAdapter.getELExpression(context);
 
-	public IContextInformation[] computeContextInformation(ITextViewer viewer,
-			int offset) {
-		// no context info
-		return null;
-	}
+                    if (elExpression != null)
+                    {
+                        final ContentAssistStrategy strategy =
+                                ContentAssistParser.getPrefix(documentPosition
+                                        - elExpression.getDocumentContext()
+                                                .getDocumentPosition() + 1,
+                                        elExpression.getText());
 
-	public char[] getCompletionProposalAutoActivationCharacters() {
-		// auto activate when user hits a '.'
-		return new char[] {'.'};
-	}
+                        if (strategy != null)
+                        {
+                            proposals.addAll(strategy.getProposals(context));
+                        }
+                        Collections.sort(proposals, new ProposalComparator());
+                    }
+                }
+                catch (ViewHandlerException e)
+                {
+                    JSFUiPlugin.log(IStatus.ERROR, "During el resolution", e);
+                }
+            }
+        }
 
-	public char[] getContextInformationAutoActivationCharacters() {
-		// no auto-activation for context info
-		return null;
-	}
+        return proposals.toArray(new ICompletionProposal[0]);
+    }
 
-	public String getErrorMessage() {
-		// don't flag errors
-		return null;
-	}
+    public IContextInformation[] computeContextInformation(
+            final ITextViewer viewer, final int offset)
+    {
+        // no context info
+        return null;
+    }
 
-	public IContextInformationValidator getContextInformationValidator() {
-		// don't validate context information
-		return null;
-	}
+    public char[] getCompletionProposalAutoActivationCharacters()
+    {
+        // auto activate when user hits a '.'
+        return new char[]
+        { '.' };
+    }
+
+    public char[] getContextInformationAutoActivationCharacters()
+    {
+        // no auto-activation for context info
+        return null;
+    }
+
+    public String getErrorMessage()
+    {
+        // don't flag errors
+        return null;
+    }
+
+    public IContextInformationValidator getContextInformationValidator()
+    {
+        // don't validate context information
+        return null;
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java
index 26386cd..2bae57c 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jsflibraryconfig/JSFLibraryConfigControl.java
@@ -82,12 +82,9 @@
  * @author Justin Chen
  */
 public class JSFLibraryConfigControl extends Composite { 
-	private static final String IMPL_DESC = Messages.JSFLibrariesPreferencePage_IMPL_DESC;
-	private static final String DEFAULT_IMPL_DESC = Messages.JSFLibrariesPreferencePage_DEFAULT_IMPL_DESC;
-	private static final String MISSING = Messages.JSFLibrariesPreferencePage_MISSING_DESC;
 
-	final private int COLUMN_DEPLOY = 0;
-	final private int COLUMN_LIB_NAME = 1;
+	final static private int COLUMN_DEPLOY = 0;
+	final static private int COLUMN_LIB_NAME = 1;
 
 	private JSFLibraryConfigModel workingCopyModel = null;
 	
@@ -272,7 +269,7 @@
 			btnServerSupplied.setSelection(true);
 			btnUserSupplied.setSelection(false);
 			enableUserSupplied(false);
-		} else if (implType == IMPLEMENTATION_TYPE.CLIENT_SUPPLIED) {
+		} else if (implType == IMPLEMENTATION_TYPE.USER_SPECIFIED) {
 			btnServerSupplied.setSelection(false);
 			btnUserSupplied.setSelection(true);
 			enableUserSupplied(true);
@@ -376,8 +373,11 @@
 				public void selectionChanged(SelectionChangedEvent event) {
 					StructuredSelection ss = (StructuredSelection) event.getSelection();
 					JSFLibraryInternalReference crtSelImplLib = (JSFLibraryInternalReference) ss.getFirstElement();
-					if (crtSelImplLib != null) btnDeployJars.setEnabled(true);
-					crtSelImplLib.setToBeDeployed(btnDeployJars.getSelection());
+					if (crtSelImplLib != null)
+					{
+					    btnDeployJars.setEnabled(true);
+	                    crtSelImplLib.setToBeDeployed(btnDeployJars.getSelection());
+					}
 					workingCopyModel.setCurrentJSFImplementationLibrarySelection(crtSelImplLib);
 					model.setProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION, crtSelImplLib);
 					fireChangedEvent(event);
@@ -451,7 +451,7 @@
 	
 	private void setUserSuppliedLibrarySelection(final EventObject e) {
 		btnUserSupplied.setSelection(true);
-		model.setProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE_PROPERTY_NAME, IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE.CLIENT_SUPPLIED);
+		model.setProperty(IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE_PROPERTY_NAME, IJSFFacetInstallDataModelProperties.IMPLEMENTATION_TYPE.USER_SPECIFIED);
 		enableUserSupplied(true);	
 		fireChangedEvent(e);
 	}
@@ -777,7 +777,7 @@
 	 * 	Inner Classes for filtering.
 	 *
 	 */
-	class CheckedTableViewerFilter extends ViewerFilter {
+	private static class CheckedTableViewerFilter extends ViewerFilter {
 		public boolean select(Viewer viewer, Object parentElement, Object element) {
 			if (element instanceof JSFLibraryInternalReference) {
 				return ((JSFLibraryInternalReference)element).isSelected();
@@ -785,7 +785,7 @@
 			return false;
 		}
 	}
-	class TreeViewerFilter extends ViewerFilter {
+	private static class TreeViewerFilter extends ViewerFilter {
 
 		public boolean select(Viewer viewer, Object parentElement, Object element) {
 			if (element instanceof JSFLibraryInternalReference) {
@@ -795,7 +795,7 @@
 		}
 	}
 
-	class CompLibCTVContentProvider implements IStructuredContentProvider {
+	private static class CompLibCTVContentProvider implements IStructuredContentProvider {
 		private List jsfComplLibs = new ArrayList(0);
 		
 		public Object[] getElements(Object inputElement) {						
@@ -812,7 +812,7 @@
 			}
 		}
 	}
-	class ImplLibCVContentProvider implements IStructuredContentProvider {
+	private static class ImplLibCVContentProvider implements IStructuredContentProvider {
 		private List jsfImplLibs = new ArrayList(0);
 		
 		public Object[] getElements(Object inputElement) {
@@ -831,7 +831,7 @@
 	}
 	
 	// Label Provider
-	class SelectedCompLibCTVLabelProvider extends LabelProvider implements ITableLabelProvider {
+	private static class SelectedCompLibCTVLabelProvider extends LabelProvider implements ITableLabelProvider {
 		public String getColumnText(Object element, int columnIndex) {
 			if (element instanceof JSFLibraryInternalReference){
 				
@@ -849,7 +849,7 @@
 			return null;
 		}
 	}
-	class ImplLibCVListLabelProvider extends LabelProvider {
+	private static class ImplLibCVListLabelProvider extends LabelProvider {
 		private JSFLibrary defaultImpl = null;
 		
 		public String getText(Object element) {
@@ -875,7 +875,7 @@
 	}
 	
 	// Sorter
-	class SelectedCompLibCTVSorter extends ViewerSorter {
+	private static class SelectedCompLibCTVSorter extends ViewerSorter {
 		public int compare(Viewer viewer, Object e1, Object e2) {
 			if (e1 instanceof JSFLibraryInternalReference && 
 					e2 instanceof JSFLibraryInternalReference) {
@@ -927,19 +927,16 @@
 		
 	}
 	
-	private class TreeLabelProvider implements ILabelProvider {
-		Image libImg;
-		Image jarImg;
+	private static class TreeLabelProvider implements ILabelProvider {
+		private final Image libImg;
+		private final Image jarImg;
 
-		TreeLabelProvider(){
-			if (jarImg == null){
-				ImageDescriptor jarImgDesc = JSFUiPlugin.getImageDescriptor("obj16/jar_obj.gif"); //$NON-NLS-1$
-				jarImg = jarImgDesc.createImage();
-			}
-			if (libImg == null){
-				ImageDescriptor libImgDesc = JSFUiPlugin.getImageDescriptor("obj16/library_obj.gif"); //$NON-NLS-1$
-				libImg = libImgDesc.createImage();
-			}
+		TreeLabelProvider()
+		{
+			ImageDescriptor jarImgDesc = JSFUiPlugin.getImageDescriptor("obj16/jar_obj.gif"); //$NON-NLS-1$
+			jarImg = jarImgDesc.createImage();
+			ImageDescriptor libImgDesc = JSFUiPlugin.getImageDescriptor("obj16/library_obj.gif"); //$NON-NLS-1$
+			libImg = libImgDesc.createImage();
 		}
 		
 		public Image getImage(Object element) {
@@ -959,9 +956,9 @@
 				if (lib.isImplementation()) {
 					labelBuf.append(" "); //$NON-NLS-1$
 					if (lib == JSFLibraryRegistryUtil.getInstance().getJSFLibraryRegistry().getDefaultImplementation()) {
-						labelBuf.append(DEFAULT_IMPL_DESC); 
+						labelBuf.append(Messages.JSFLibrariesPreferencePage_DEFAULT_IMPL_DESC); 
 					} else {
-						labelBuf.append(IMPL_DESC); 
+						labelBuf.append(Messages.JSFLibrariesPreferencePage_IMPL_DESC); 
 					}
 				}
 			}
@@ -969,7 +966,7 @@
 				ArchiveFile jar = (ArchiveFile)element;
 				labelBuf.append(jar.getName());
 				if (!jar.exists())
-					labelBuf.append(MISSING);
+					labelBuf.append(Messages.JSFLibrariesPreferencePage_MISSING_DESC);
 				labelBuf.append(" - ").append(((ArchiveFile)element).getSourceLocation()); //$NON-NLS-1$
 			}
 			return labelBuf.toString();
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/BeanSuffixHyperlink.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/BeanSuffixHyperlink.java
new file mode 100644
index 0000000..300af13
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/BeanSuffixHyperlink.java
@@ -0,0 +1,107 @@
+package org.eclipse.jst.jsf.ui.internal.jspeditor;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.jst.jsf.common.util.JDTBeanProperty;
+import org.eclipse.jst.jsf.context.symbol.IBeanMethodSymbol;
+import org.eclipse.jst.jsf.context.symbol.IBeanPropertySymbol;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
+import org.eclipse.jst.jsf.context.symbol.internal.impl.JavaUtil;
+import org.eclipse.jst.jsf.ui.internal.JSFUiPlugin;
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * Hyperlink for IBeanPropertySymbol and IBeanMethodSymbol el symbols. This Class only exists
+ *  in order to defer determining the (access) method to link to until user actually clicks
+ *  on the link, since determining takes too long.
+ */
+class BeanSuffixHyperlink implements IHyperlink,ITestHyperlink {
+	private final IRegion _fRegion;
+	private final ISymbol _symbol;
+
+    /**
+     * Creates a BeanSuffixHyperlink for a symbol
+     * @param region - the region of the hyperlink
+     * @param symbol
+     */
+    public BeanSuffixHyperlink(final IRegion region, final ISymbol symbol) {
+        _fRegion = region;
+        _symbol = symbol;
+    }
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkRegion()
+	 */
+	public IRegion getHyperlinkRegion() {
+		return _fRegion;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getTypeLabel()
+	 */
+	public String getTypeLabel() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkText()
+	 */
+	public String getHyperlinkText() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#open()
+	 */
+	public void open() {
+	    final IJavaElement element = determineJavaElement();
+	    if (element != null) {
+	        try {
+	            final IEditorPart editor = JavaUI.openInEditor(element);
+	            if (editor != null) {
+	                JavaUI.revealInEditor(editor, element);
+	            }
+	        }
+	        catch (final Exception e) {
+	            JSFUiPlugin.log(IStatus.WARNING, e.getMessage(), e);
+	        }
+	    }
+	}
+
+    public IJavaElement determineJavaElement() {
+        if (_symbol instanceof IBeanPropertySymbol) {
+            return determinePropertyElement((IBeanPropertySymbol) _symbol);
+        }
+        if (_symbol instanceof IBeanMethodSymbol) {
+            return JavaUtil.findCorrespondingMethod((IBeanMethodSymbol) _symbol);
+        }
+        return null;
+    }
+
+    private IMethod determinePropertyElement(final IBeanPropertySymbol propertySymbol) {
+        final JDTBeanProperty property = JavaUtil.findCorrespondingJDTProperty(propertySymbol);
+        if (property != null) {
+            if (property.getGetter() != null) {
+                return property.getGetter();
+            }
+            if (property.getSetter() != null) {
+                return property.getSetter();
+            }
+        }
+        return null;
+    }
+
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/ELHyperlinkDetector.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/ELHyperlinkDetector.java
new file mode 100644
index 0000000..1dad1a1
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/ELHyperlinkDetector.java
@@ -0,0 +1,90 @@
+package org.eclipse.jst.jsf.ui.internal.jspeditor;
+
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.context.symbol.IBeanInstanceSymbol;
+import org.eclipse.jst.jsf.context.symbol.IBeanMethodSymbol;
+import org.eclipse.jst.jsf.context.symbol.IBeanPropertySymbol;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
+import org.eclipse.jst.jsf.core.internal.contentassist.el.SymbolInfo;
+
+/**
+ * This HyperlinkDetector creates hyperlinks for symbols in JSF EL expressions
+ * inside jsp files.
+ */
+public class ELHyperlinkDetector extends AbstractHyperlinkDetector {
+
+	public final IHyperlink[] detectHyperlinks(final ITextViewer textViewer,
+			final IRegion region, final boolean canShowMultipleHyperlinks) {
+		final IStructuredDocumentContext context = IStructuredDocumentContextFactory.INSTANCE
+				.getContext(textViewer, region.getOffset());
+		return detectHyperlinks(context, region);
+	}
+
+	/**
+	 * Broken out for testing.
+	 * @param context
+	 * @param region
+	 * @return the hyperlinks
+	 */
+	protected IHyperlink[] detectHyperlinks(
+			final IStructuredDocumentContext context, final IRegion region) {
+		final Region elRegion = JSPSourceUtil.findELRegion(context);
+		if (elRegion != null) {
+			final SymbolInfo symbolInfo = JSPSourceUtil.determineSymbolInfo(
+					context, elRegion, region.getOffset());
+			if (symbolInfo != null) {
+				IHyperlink link = null;
+				final Region linkRegion = new Region(symbolInfo
+						.getRelativeRegion().getOffset()
+						+ elRegion.getOffset(), symbolInfo.getRelativeRegion()
+						.getLength());
+				final ISymbol symbol = symbolInfo.getSymbol();
+				if (symbol instanceof IBeanInstanceSymbol) {
+					link = createBeanInstanceLink(linkRegion,
+							(IBeanInstanceSymbol) symbol);
+				} else if (symbol instanceof IBeanPropertySymbol) {
+					link = createBeanPropertyLink(linkRegion,
+							(IBeanPropertySymbol) symbol);
+				} else if (symbol instanceof IBeanMethodSymbol) {
+					link = createMethodLink(linkRegion,
+							(IBeanMethodSymbol) symbol);
+				}
+				if (link != null) {
+					return new IHyperlink[] { link };
+				}
+			}
+		}
+		return null;
+	}
+
+	private IHyperlink createBeanInstanceLink(final Region region,
+			final IBeanInstanceSymbol symbol) {
+		if (symbol.isTypeResolved()) {
+			final IType type = symbol.getJavaTypeDescriptor().getType();
+			return new JavaElementHyperlink(region, type);
+		}
+		return null;
+	}
+
+	private IHyperlink createBeanPropertyLink(final Region region,
+			final IBeanPropertySymbol symbol) {
+		// defer calculation of access method until user click on link (takes
+		// too long otherwise):
+		return new BeanSuffixHyperlink(region, symbol);
+	}
+
+	private IHyperlink createMethodLink(final Region region,
+			final IBeanMethodSymbol symbol) {
+		// defer calculation of access method until user click on link (takes
+		// too long otherwise):
+		return new BeanSuffixHyperlink(region, symbol);
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/ITestHyperlink.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/ITestHyperlink.java
new file mode 100644
index 0000000..c4a062f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/ITestHyperlink.java
@@ -0,0 +1,16 @@
+package org.eclipse.jst.jsf.ui.internal.jspeditor;
+
+import org.eclipse.jdt.core.IJavaElement;
+
+/**
+ * Test-only interface.  Not for normal use.
+ *
+ * @author cbateman
+ *
+ */
+public interface ITestHyperlink {
+	/**
+	 * @return the java element for symbol2 or null if none.
+	 */
+	public IJavaElement determineJavaElement();
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/JSFELHover.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/JSFELHover.java
new file mode 100644
index 0000000..ba634f9
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/JSFELHover.java
@@ -0,0 +1,67 @@
+package org.eclipse.jst.jsf.ui.internal.jspeditor;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.context.symbol.IDescribedInDetail;
+import org.eclipse.jst.jsf.context.symbol.ISymbol;
+import org.eclipse.jst.jsf.core.internal.contentassist.el.SymbolInfo;
+
+/** This class creates hovers for ISymbols in an el expression that have a detailedDescription.
+ */
+public class JSFELHover implements ITextHover {
+
+    private ISymbol hoveredSymbol = null;
+
+    public final String getHoverInfo(final ITextViewer textViewer, final IRegion hoverRegion) {
+    	return getHoverInfo();
+    }
+
+    /**
+     * For testing
+     *
+     * @return the hover info
+     */
+    protected String getHoverInfo()
+    {
+        // hoveredSymbol set by getHoverRegion, which is called first
+        if (hoveredSymbol instanceof IDescribedInDetail) {
+            return ((IDescribedInDetail) hoveredSymbol).getDetailedDescription();
+        }
+        return null;
+    }
+
+    public final IRegion getHoverRegion(final ITextViewer textViewer, final int documentPosition) {
+        final IStructuredDocumentContext context = IStructuredDocumentContextFactory.INSTANCE.getContext(textViewer,
+                documentPosition);
+        return getHoverRegion(context, documentPosition);
+    }
+
+    /**
+     * For testing
+     *
+     * @param context
+     * @param documentPosition
+     * @return the hover region
+     */
+    protected IRegion getHoverRegion(final IStructuredDocumentContext context, final int documentPosition)
+    {
+        hoveredSymbol = null;
+        final Region elRegion = JSPSourceUtil.findELRegion(context);
+        if (elRegion != null) {
+            final SymbolInfo symbolInfo = JSPSourceUtil.determineSymbolInfo(context, elRegion, documentPosition);
+            if (symbolInfo == null) {
+                return null;
+            }
+            final Region relativeRegion = symbolInfo.getRelativeRegion();
+            final Region symbolRegion = new Region(elRegion.getOffset()
+                    + relativeRegion.getOffset(), relativeRegion.getLength());
+            hoveredSymbol = symbolInfo.getSymbol();
+            return symbolRegion;
+        }
+        return null;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/JSPSourceUtil.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/JSPSourceUtil.java
new file mode 100644
index 0000000..8dccd71
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/JSPSourceUtil.java
@@ -0,0 +1,119 @@
+package org.eclipse.jst.jsf.ui.internal.jspeditor;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.ITextRegionContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.core.internal.contentassist.el.ContentAssistParser;
+import org.eclipse.jst.jsf.core.internal.contentassist.el.SymbolInfo;
+import org.eclipse.jst.jsf.designtime.DTAppManagerUtil;
+import org.eclipse.jst.jsf.designtime.internal.view.XMLViewDefnAdapter;
+import org.eclipse.jst.jsf.designtime.internal.view.IDTViewHandler.ViewHandlerException;
+import org.eclipse.jst.jsf.designtime.internal.view.XMLViewDefnAdapter.DTELExpression;
+import org.eclipse.jst.jsf.ui.internal.JSFUiPlugin;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+
+/**
+ * Utility class to access EL symbols in jsp file.
+ */
+public final class JSPSourceUtil
+{
+
+    private JSPSourceUtil()
+    {
+        // utility class, no instances.
+    }
+
+    /**
+     * Find the Region
+     * 
+     * @param context -
+     *            the IStructuredDocumentContext
+     * @return region of el expression, null if context doesn't point to an el
+     *         expression
+     */
+    public static Region findELRegion(final IStructuredDocumentContext context)
+    {
+        if (context != null)
+        {
+            final XMLViewDefnAdapter adapter =
+                    DTAppManagerUtil.getXMLViewDefnAdapter(context);
+            if (adapter != null)
+            {
+                DTELExpression expression;
+                try
+                {
+                    expression = adapter.getELExpression(context);
+                }
+                catch (ViewHandlerException e)
+                {
+                    JSFUiPlugin.log(IStatus.ERROR, "", e);
+                    expression = null;
+                }
+
+                if (expression != null)
+                {
+                    final ITextRegionContextResolver resolver =
+                            IStructuredDocumentContextResolverFactory.INSTANCE
+                                    .getTextRegionResolver(expression
+                                            .getDocumentContext());
+
+                    if (resolver != null)
+                    {
+                        final String regionType = resolver.getRegionType();
+
+                        if (regionType != null
+                                && resolver.matchesRelative(new String[]
+                                { DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE }))
+                        {
+                            return new Region(resolver.getStartOffset(),
+                                    resolver.getLength());
+                        }
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Determines symbol and symbol region at a given document position
+     * 
+     * @param context -
+     *            the IStructuredDocumentContext
+     * @param elRegion -
+     *            the region of the el expression to consider
+     * @param documentPosition -
+     *            the document position to get the symbol for
+     * @return SymbolInfo
+     */
+    public static SymbolInfo determineSymbolInfo(
+            final IStructuredDocumentContext context, final Region elRegion,
+            final int documentPosition)
+    {
+        if (context != null && elRegion != null)
+        {
+            try
+            {
+                String elText;
+                elText =
+                        context.getStructuredDocument().get(
+                                elRegion.getOffset(), elRegion.getLength());
+                final SymbolInfo symbolInfo =
+                        ContentAssistParser.getSymbolInfo(context,
+                                documentPosition - elRegion.getOffset() + 1,
+                                elText);
+                return symbolInfo;
+            }
+            catch (final BadLocationException e)
+            {
+                // well, so we simply have no symbol, no reason to worry (or
+                // log...)
+                return null;
+            }
+        }
+        return null;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/JavaElementHyperlink.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/JavaElementHyperlink.java
new file mode 100644
index 0000000..bd90cff
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/jspeditor/JavaElementHyperlink.java
@@ -0,0 +1,76 @@
+package org.eclipse.jst.jsf.ui.internal.jspeditor;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.jst.jsf.ui.internal.JSFUiPlugin;
+import org.eclipse.ui.IEditorPart;
+
+/**
+ * Hyperlink for a IJavaElement to the corresponding java source
+ */
+class JavaElementHyperlink implements IHyperlink, ITestHyperlink {
+	private final IRegion fRegion;
+	private final IJavaElement fElement;
+
+	/**Creates a new hyperlink for a given IJavaElement
+	 * @param region - region of the hyperlink
+	 * @param element - hyperlink links to the source of <code>element</code>
+	 */
+	public JavaElementHyperlink(final IRegion region, final IJavaElement element) {
+		fRegion = region;
+		fElement = element;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkRegion()
+	 */
+	public IRegion getHyperlinkRegion() {
+		return fRegion;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getTypeLabel()
+	 */
+	public String getTypeLabel() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkText()
+	 */
+	public String getHyperlinkText() {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.jface.text.hyperlink.IHyperlink#open()
+	 */
+	public void open() {
+		try {
+			final IEditorPart editor = JavaUI.openInEditor(fElement);
+			if (editor != null) {
+				JavaUI.revealInEditor(editor, fElement);
+			}
+		}
+		catch (final Exception e) {
+		    JSFUiPlugin.log(IStatus.WARNING, e.getMessage(), e);
+		}
+	}
+
+	public IJavaElement determineJavaElement() {
+		return fElement;
+	}
+
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java
index eabb6d3..4874def 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/project/facet/JSFFacetInstallPage.java
@@ -19,6 +19,7 @@
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.dialogs.IInputValidator;
 import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties;
 import org.eclipse.jst.jsf.core.internal.jsflibraryconfig.JSFLibraryConfigDialogSettingData;
@@ -27,11 +28,11 @@
 import org.eclipse.jst.jsf.core.internal.project.facet.IJSFFacetInstallDataModelProperties;
 import org.eclipse.jst.jsf.ui.internal.JSFUiPlugin;
 import org.eclipse.jst.jsf.ui.internal.Messages;
-import org.eclipse.jst.jsf.ui.internal.jsflibraryconfig.JSFLibraryConfigControlChangeEvent;
-import org.eclipse.jst.jsf.ui.internal.jsflibraryconfig.JSFLibraryConfigControlChangeListener;
 import org.eclipse.jst.jsf.ui.internal.jsflibraryconfig.IJSFImplLibraryCreationListener;
 import org.eclipse.jst.jsf.ui.internal.jsflibraryconfig.JSFImplLibraryCreationEvent;
 import org.eclipse.jst.jsf.ui.internal.jsflibraryconfig.JSFLibraryConfigControl;
+import org.eclipse.jst.jsf.ui.internal.jsflibraryconfig.JSFLibraryConfigControlChangeEvent;
+import org.eclipse.jst.jsf.ui.internal.jsflibraryconfig.JSFLibraryConfigControlChangeListener;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -87,6 +88,11 @@
 	private static final String SETTINGS_COMPLIB_SELECT_DEPLOY = "selectdeploycomplib"; //$NON-NLS-1$
 
 	private static final String SEPARATOR = ":"; //$NON-NLS-1$
+	
+	//Part of temporary fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=190304
+	private static final String DEFAULT_TO_CLIENT = "initialDefaultToClientSupplied";
+	private static final String DEFAULT_TO_SERVER = "initialDefaultToServerSupplied";
+
 
 	private JSFLibraryConfigControl jsfLibCfgComp = null;
 	// private String projectName = null;
@@ -96,8 +102,7 @@
 	 * Zero argument constructor
 	 */
 	public JSFFacetInstallPage() {
-		// FIXME: following WebFacetInstallPage pattern which will be fixed at
-		// somepoint
+		// FIXME: following WebFacetInstallPage pattern which will be fixed at somepoint
 		super(DataModelFactory.createDataModel(new AbstractDataModelProvider() {/*
 																				 * do
 																				 * nothing
@@ -296,6 +301,18 @@
 			deployImpl = root.get(SETTINGS_DEPLOY_IMPL);
 			
 		}
+				
+		//Part of temporary fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=190304
+		if (implType == IMPLEMENTATION_TYPE.UNKNOWN) {			
+			// if the impl type is still unknown, check if the product provided a default
+			IPreferenceStore prefs = JSFUiPlugin.getDefault().getPreferenceStore();
+			if(prefs.getBoolean(DEFAULT_TO_CLIENT)) {			
+				implType = IMPLEMENTATION_TYPE.USER_SPECIFIED;
+			}
+			else if(prefs.getBoolean(DEFAULT_TO_SERVER)) {	
+				implType = IMPLEMENTATION_TYPE.SERVER_SUPPLIED;
+			}
+		}
 
 		if (deployImpl == null || deployImpl.equals("")) { //$NON-NLS-1$
 			deployImpl = ((Boolean) model
@@ -575,7 +592,7 @@
 		IMPLEMENTATION_TYPE implType = (IMPLEMENTATION_TYPE)model.getProperty(IMPLEMENTATION_TYPE_PROPERTY_NAME);
 		if (implType == IMPLEMENTATION_TYPE.SERVER_SUPPLIED)
 			enableFinish = true;
-		else if (implType == IMPLEMENTATION_TYPE.CLIENT_SUPPLIED && 
+		else if (implType == IMPLEMENTATION_TYPE.USER_SPECIFIED && 
 				control != null && control instanceof JSFLibraryConfigControl) {
 			enableFinish = (((JSFLibraryConfigControl)control).getSelectedJSFLibImplementation() != null);
 		} //else must be unknown type and requires user interaction
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/TagRegistryView.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/TagRegistryView.java
new file mode 100644
index 0000000..3ea5568
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/TagRegistryView.java
@@ -0,0 +1,369 @@
+package org.eclipse.jst.jsf.ui.internal.tagregistry;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.action.IMenuCreator;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.ITagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.Namespace;
+import org.eclipse.jst.jsf.core.jsfappconfig.JSFAppConfigUtils;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry.TLDTagRegistry;
+import org.eclipse.jst.jsf.ui.internal.tagregistry.TaglibContentProvider.TreePlaceholder;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.ISharedImages;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.DrillDownAdapter;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This sample class demonstrates how to plug-in a new workbench view. The view
+ * shows data obtained from the model. The sample creates a dummy model on the
+ * fly, but a real implementation would connect to the model available either in
+ * this or another plug-in (e.g. the workspace). The view is connected to the
+ * model using a content provider.
+ * <p>
+ * The view uses a label provider to define how model objects should be
+ * presented in the view. Each view can present the same model objects using
+ * different labels and icons, if needed. Alternatively, a single label provider
+ * can be shared between views in order to ensure that objects of the same type
+ * are presented in the same way everywhere.
+ * <p>
+ */
+
+public class TagRegistryView extends ViewPart
+{
+    private TreeViewer       _viewer;
+    private DrillDownAdapter drillDownAdapter;
+    private Action           _selectProjectAction;
+    private Action           action2;
+    private Action           doubleClickAction;
+
+    class ViewLabelProvider extends LabelProvider
+    {
+
+        @Override
+        public String getText(final Object obj)
+        {
+            if (obj instanceof Namespace)
+            {
+                if (((Namespace) obj).getDisplayName() != null)
+                {
+                    return ((Namespace) obj).getDisplayName();
+                }
+                return ((Namespace) obj).getNSUri();
+            }
+            else if (obj instanceof ITagElement)
+            {
+                return ((ITagElement) obj).getName();
+            }
+            else if (obj instanceof TreePlaceholder)
+            {
+                return ((TreePlaceholder)obj).getText();
+            }
+            return obj.toString();
+        }
+
+        @Override
+        public Image getImage(final Object obj)
+        {
+            final String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
+            return PlatformUI.getWorkbench().getSharedImages().getImage(
+                    imageKey);
+        }
+    }
+
+    class NameSorter extends ViewerSorter
+    {
+        // do nothing
+    }
+
+    /**
+     * The constructor.
+     */
+    public TagRegistryView()
+    {
+        // do nothing
+    }
+
+    /**
+     * This is a callback that will allow us to create the viewer and initialize
+     * it.
+     */
+    @Override
+    public void createPartControl(final Composite parent)
+    {
+        _viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL
+                | SWT.V_SCROLL);
+        drillDownAdapter = new DrillDownAdapter(_viewer);
+        _viewer.setContentProvider(new TaglibContentProvider());
+        _viewer.setLabelProvider(new ViewLabelProvider());
+        _viewer.setSorter(new NameSorter());
+
+        final IProject[] projects = ResourcesPlugin.getWorkspace().getRoot()
+                .getProjects();
+
+        for (final IProject project : projects)
+        {
+            if (project.isAccessible())
+            {
+                new SetInputRunnable(project, _viewer).run();
+                break;
+            }
+        }
+
+        // Create the help context id for the viewer's control
+        PlatformUI.getWorkbench().getHelpSystem().setHelp(_viewer.getControl(),
+                "ViewHandlerPrototype.viewer");
+        makeActions();
+        hookContextMenu();
+        hookDoubleClickAction();
+        contributeToActionBars();
+    }
+
+    private void hookContextMenu()
+    {
+        final MenuManager menuMgr = new MenuManager("#PopupMenu");
+        menuMgr.setRemoveAllWhenShown(true);
+        menuMgr.addMenuListener(new IMenuListener()
+        {
+            public void menuAboutToShow(final IMenuManager manager)
+            {
+                TagRegistryView.this.fillContextMenu(manager);
+            }
+        });
+        final Menu menu = menuMgr.createContextMenu(_viewer.getControl());
+        _viewer.getControl().setMenu(menu);
+        getSite().registerContextMenu(menuMgr, _viewer);
+    }
+
+    private void contributeToActionBars()
+    {
+        final IActionBars bars = getViewSite().getActionBars();
+        fillLocalPullDown(bars.getMenuManager());
+        fillLocalToolBar(bars.getToolBarManager());
+    }
+
+    private void fillLocalPullDown(final IMenuManager manager)
+    {
+        manager.add(_selectProjectAction);
+        manager.add(new Separator());
+        manager.add(action2);
+    }
+
+    private void fillContextMenu(final IMenuManager manager)
+    {
+        manager.add(_selectProjectAction);
+        manager.add(action2);
+        manager.add(new Separator());
+        drillDownAdapter.addNavigationActions(manager);
+        // Other plug-ins can contribute there actions here
+        manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+    }
+
+    private void fillLocalToolBar(final IToolBarManager manager)
+    {
+        manager.add(_selectProjectAction);
+        manager.add(action2);
+        manager.add(new Separator());
+        drillDownAdapter.addNavigationActions(manager);
+    }
+
+    private void makeActions()
+    {
+        final IMenuCreator selectProjectCreator = new IMenuCreator()
+        {
+            private MenuManager createMenuMgr()
+            {
+                // TODO: this is inefficient but means we don't
+                // have to do the laborious process of filtering
+                // workspace changes.
+                final MenuManager dropDownMenuMgr = new MenuManager();
+
+                final IProject projects[] = ResourcesPlugin.getWorkspace()
+                        .getRoot().getProjects();
+
+                for (final IProject project : projects)
+                {
+                    if (JSFAppConfigUtils.isValidJSFProject(project))
+                    {
+                        dropDownMenuMgr.add(new Action(project.getName())
+                        {
+                            @Override
+                            public void run()
+                            {
+                                _viewer.setInput(project);
+                            }
+                        });
+                    }
+                }
+
+                return dropDownMenuMgr;
+            }
+
+            public void dispose()
+            {
+                // do nothing
+            }
+
+            public Menu getMenu(Control parent)
+            {
+                MenuManager manager = createMenuMgr();
+                return manager.createContextMenu(parent);
+            }
+
+            public Menu getMenu(Menu parent)
+            {
+                final MenuManager manager = createMenuMgr();
+                final Menu menu = new Menu(parent);
+                final IContributionItem[] items = manager.getItems();
+                for (final IContributionItem item : items)
+                {
+                    IContributionItem newItem = item;
+                    if (item instanceof ActionContributionItem)
+                    {
+                        newItem = new ActionContributionItem(
+                                ((ActionContributionItem) item).getAction());
+                    }
+                    newItem.fill(menu, -1);
+                }
+                return menu;
+            }
+
+        };
+
+        _selectProjectAction = new Action("Set project")
+        {/* do nothing */};
+        _selectProjectAction.setToolTipText("Action 1 tooltip");
+        _selectProjectAction.setImageDescriptor(PlatformUI.getWorkbench()
+                .getSharedImages().getImageDescriptor(
+                        ISharedImages.IMG_OBJS_INFO_TSK));
+        _selectProjectAction.setMenuCreator(selectProjectCreator);
+
+        action2 = new Action()
+        {
+            @Override
+            public void run()
+            {
+                final Object input = _viewer.getInput();
+
+                if (input instanceof IProject)
+                {
+                    // FaceletTagRegistry.getRegistry((IProject)
+                    // input).refresh();
+                    TLDTagRegistry.getRegistry((IProject) input).refresh(
+                            new RefreshRunnable(_viewer));
+                }
+            }
+        };
+        action2.setText("Refresh Registry");
+        action2.setToolTipText("Refresh Registry");
+        action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages()
+                .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
+        doubleClickAction = new Action()
+        {
+            @Override
+            public void run()
+            {
+                final ISelection selection = _viewer.getSelection();
+                final Object obj = ((IStructuredSelection) selection)
+                        .getFirstElement();
+                showMessage("Double-click detected on " + obj.toString());
+            }
+        };
+    }
+
+    private void hookDoubleClickAction()
+    {
+        _viewer.addDoubleClickListener(new IDoubleClickListener()
+        {
+            public void doubleClick(final DoubleClickEvent event)
+            {
+                doubleClickAction.run();
+            }
+        });
+    }
+
+    private void showMessage(final String message)
+    {
+        MessageDialog.openInformation(_viewer.getControl().getShell(),
+                "Sample View", message);
+    }
+
+    /**
+     * Passing the focus request to the viewer's control.
+     */
+    @Override
+    public void setFocus()
+    {
+        _viewer.getControl().setFocus();
+    }
+
+    private static class RefreshRunnable implements Runnable
+    {
+        private final Viewer   _viewer;
+
+        public RefreshRunnable(Viewer viewer)
+        {
+            super();
+            _viewer = viewer;
+        }
+
+        public void run()
+        {
+            PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable()
+            {
+                public void run()
+                {
+                    _viewer.refresh();
+                }
+            });
+        }
+
+    }
+
+    private static class SetInputRunnable implements Runnable
+    {
+        private final Viewer   _viewer;
+        private final IProject _project;
+
+        public SetInputRunnable(IProject project, Viewer viewer)
+        {
+            super();
+            _project = project;
+            _viewer = viewer;
+        }
+
+        public void run()
+        {
+            PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable()
+            {
+                public void run()
+                {
+                    _viewer.setInput(_project);
+                }
+            });
+        }
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/TaglibContentProvider.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/TaglibContentProvider.java
new file mode 100644
index 0000000..152f5e8
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/tagregistry/TaglibContentProvider.java
@@ -0,0 +1,341 @@
+package org.eclipse.jst.jsf.ui.internal.tagregistry;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.IJSFTagElement;
+import org.eclipse.jst.jsf.common.runtime.internal.view.model.common.Namespace;
+import org.eclipse.jst.jsf.designtime.internal.view.model.ITagRegistry;
+import org.eclipse.jst.jsf.designtime.internal.view.model.ITagRegistry.TagRegistryChangeEvent;
+import org.eclipse.jst.jsf.designtime.internal.view.model.ITagRegistry.TagRegistryChangeEvent.EventType;
+import org.eclipse.jst.jsf.designtime.internal.view.model.jsp.registry.TLDTagRegistry;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * Structured content provider for tag libraries.
+ * 
+ * @author cbateman
+ * 
+ */
+public class TaglibContentProvider implements IStructuredContentProvider,
+        ITreeContentProvider, ITagRegistry.ITagRegistryListener
+{
+    private final static Object[] NO_CHILDREN  = new Object[0];
+    private IProject              _curInput;
+    private ITagRegistry          _curTagRegistry;
+    private Viewer                _curViewer;
+    private final AtomicLong      _changeStamp = new AtomicLong(0);
+    private Map<String, Object>          _rootNamespaces;
+
+    public Object[] getElements(final Object inputElement)
+    {
+        if (inputElement instanceof IProject)
+        {
+            return _rootNamespaces.values().toArray();
+        }
+
+        return NO_CHILDREN;
+    }
+
+    public void dispose()
+    {
+        // nothing to do
+    }
+
+    public void inputChanged(final Viewer viewer, final Object oldInput,
+            final Object newInput)
+    {
+        // update our change stamp to invalid outstanding update tasks
+        _changeStamp.incrementAndGet();
+        _curViewer = viewer;
+
+        if (oldInput instanceof IProject)
+        {
+            if (_curTagRegistry != null)
+            {
+                _curTagRegistry.removeListener(this);
+            }
+        }
+
+        if (newInput instanceof IProject)
+        {
+            _curTagRegistry = TLDTagRegistry.getRegistry((IProject) newInput);
+            _curTagRegistry.addListener(this);
+            _curInput = (IProject) newInput;
+
+            _rootNamespaces = Collections
+                    .synchronizedMap(new HashMap<String, Object>());
+            _rootNamespaces.put("not a uri", new TreePlaceholder("Calculating...", null));
+
+            new UpdateNamespacesListJob(_curInput, _changeStamp.get())
+                    .schedule();
+        }
+        else
+        {
+            _curInput = null;
+            _rootNamespaces = Collections.EMPTY_MAP;
+        }
+    }
+
+    public Object[] getChildren(final Object parentElement)
+    {
+        if (parentElement instanceof IProject)
+        {
+            return _rootNamespaces.values().toArray();
+        }
+        else if (parentElement instanceof Namespace)
+        {
+            final Namespace ns = (Namespace) parentElement;
+
+            // this could be very expensive if not initialized
+            if (ns.isInitialized())
+            {
+                return ((Namespace) parentElement).getViewElements().toArray();
+            }
+
+            // fire up a job that ensures the namespace is initialized
+            // and then fires refresh again on this element
+            final Job updateNamespaceJob = new Job("Updating namespace")
+            {
+                @Override
+                protected IStatus run(final IProgressMonitor monitor)
+                {
+                    ns.getViewElements();
+                    PlatformUI.getWorkbench().getDisplay().asyncExec(
+                            new Runnable()
+                            {
+                                public void run()
+                                {
+                                    // avoid infinite recursion
+                                    if (ns.isInitialized())
+                                    {
+                                        TaglibContentProvider.this
+                                                .viewerRefresh(ns);
+                                    }
+                                    else
+                                    {
+                                        MessageDialog
+                                                .openError(
+                                                        Display
+                                                                .getCurrent()
+                                                                .getActiveShell(),
+                                                        "Error updating namespace",
+                                                        "There was a problem initializing the namespace");
+                                    }
+                                }
+                            });
+                    return Status.OK_STATUS;
+                }
+            };
+
+            updateNamespaceJob.schedule();
+
+            return new Object[]
+            { new TreePlaceholder("Calculating tags, please wait...", null) };
+        }
+        else if (parentElement instanceof IJSFTagElement)
+        {
+            return new Object[]
+            { ((IJSFTagElement) parentElement).toString() };
+        }
+
+        return NO_CHILDREN;
+    }
+
+    public Object getParent(final Object element)
+    {
+        // no support for parent traversal right now
+        return null;
+    }
+
+    public boolean hasChildren(final Object element)
+    {
+        // finding all children of a namespace can be expensive
+        if (element instanceof Namespace)
+        {
+            return ((Namespace) element).hasViewElements();
+        }
+        return getChildren(element).length > 0;
+    }
+
+    public void registryChanged(final TagRegistryChangeEvent changeEvent)
+    {
+        if (_curViewer != null)
+        {
+            _curViewer.getControl().getDisplay().asyncExec(
+                    new RegistryChangeTask(changeEvent.getType(), changeEvent
+                            .getAffectedObjects(), _changeStamp.get()));
+        }
+    }
+
+    private final class RegistryChangeTask implements Runnable
+    {
+        private final EventType                 _eventType;
+        private final long                      _timestamp;
+        private final List<? extends Namespace> _affectedObjects;
+
+        RegistryChangeTask(final TagRegistryChangeEvent.EventType eventType,
+                final List<? extends Namespace> affectedObjects,
+                final long timestamp)
+        {
+            _eventType = eventType;
+            _timestamp = timestamp;
+            _affectedObjects = affectedObjects;
+        }
+
+        public void run()
+        {
+            // if changes have been made since this task was queued, then abort
+            // since we don't know if our data is still valid
+            if (_timestamp != TaglibContentProvider.this._changeStamp.get())
+            {
+                return;
+            }
+
+            switch (_eventType)
+            {
+                case ADDED_NAMESPACE:
+                case CHANGED_NAMESPACE:
+                {
+                    for (final Namespace ns : _affectedObjects)
+                    {
+                        _rootNamespaces.put(ns.getNSUri(), ns);
+                    }
+
+                    viewerRefresh(_curInput);
+                }
+                break;
+
+                case REMOVED_NAMESPACE:
+                {
+                    for (final Namespace ns : _affectedObjects)
+                    {
+                        _rootNamespaces.remove(ns.getNSUri());
+                    }
+                    viewerRefresh(_curInput);
+                }
+                break;
+
+                case REGISTRY_DISPOSED:
+                {
+                    _curTagRegistry.removeListener(TaglibContentProvider.this);
+                    // nullify the input since the current project is no longer
+                    // valid
+                    _curViewer.setInput(null);
+                }
+            }
+        }
+    }
+
+    private void viewerRefresh(final Object parentElement)
+    {
+        if (_curViewer instanceof StructuredViewer)
+        {
+            final StructuredViewer viewer = (StructuredViewer) _curViewer;
+            viewer.refresh(parentElement);
+        }
+        else
+        {
+            _curViewer.refresh();
+        }
+    }
+
+    private class UpdateNamespacesListJob extends Job
+    {
+
+        private final long     _timestamp;
+        private final IProject _project;
+
+        public UpdateNamespacesListJob(final IProject project,
+                final long timestamp)
+        {
+            super("Updating available namespaces for project "
+                    + project.getName());
+            _project = project;
+            _timestamp = timestamp;
+        }
+
+        @Override
+        protected IStatus run(final IProgressMonitor monitor)
+        {
+            if (!_project.isAccessible())
+            {
+                return new Status(IStatus.CANCEL, "", "");
+            }
+
+            final Collection<? extends Namespace> libs = TLDTagRegistry
+                    .getRegistry(_project).getAllTagLibraries();
+            _rootNamespaces.clear();
+            
+            for (Namespace ns : libs)
+            {
+                _rootNamespaces.put(ns.getNSUri(), ns);
+            }
+            
+            PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable()
+            {
+                public void run()
+                {
+                    // only bother if the provider hasn't changed asynchronously
+                    if (_timestamp == TaglibContentProvider.this._changeStamp
+                            .get())
+                    {
+                        viewerRefresh(_curInput);
+                    }
+                }
+            });
+
+            return Status.OK_STATUS;
+        }
+    }
+
+    /**
+     * Takes the place of a real tree model object while the real object is
+     * being retrieved.
+     * 
+     */
+    public static class TreePlaceholder
+    {
+        private final String _text;
+        private final Image  _image;
+
+        TreePlaceholder(final String text, final Image image)
+        {
+            _text = text;
+            _image = image;
+        }
+
+        /**
+         * @return the placeholder text or null if none
+         */
+        public String getText()
+        {
+            return _text;
+        }
+
+        /**
+         * @return the image or null if none
+         */
+        public Image getImage()
+        {
+            return _image;
+        }
+
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/JSFValidator.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/JSFValidator.java
new file mode 100644
index 0000000..42b0ecd
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/JSFValidator.java
@@ -0,0 +1,128 @@
+package org.eclipse.jst.jsf.ui.internal.validation;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.jst.jsf.validation.internal.IJSFViewValidator;
+import org.eclipse.jst.jsf.validation.internal.JSFValidatorFactory;
+import org.eclipse.jst.jsf.validation.internal.ValidationPreferences;
+import org.eclipse.jst.jsp.core.internal.validation.JSPValidator;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.ui.internal.reconcile.validator.ISourceValidator;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+import org.eclipse.wst.validation.internal.provisional.core.IValidationContext;
+
+/**
+ * @author cbateman
+ *
+ */
+public class JSFValidator extends JSPValidator implements ISourceValidator
+{
+    // TODO: should the source validator be a separate class in jsp.ui?
+    // problem with simple split off is that preference must also be split off
+    static final boolean DEBUG;
+    static
+    {
+        final String value = Platform
+        .getDebugOption("org.eclipse.jst.jsf.ui/validation"); //$NON-NLS-1$
+        DEBUG = value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$
+    }
+
+    private IDocument    fDocument;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.wst.sse.ui.internal.reconcile.validator.ISourceValidator#connect(org.eclipse.jface.text.IDocument)
+     */
+    public void connect(final IDocument document)
+    {
+        fDocument = document;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.wst.sse.ui.internal.reconcile.validator.ISourceValidator#disconnect(org.eclipse.jface.text.IDocument)
+     */
+    public void disconnect(final IDocument document)
+    {
+        // finished
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.wst.sse.ui.internal.reconcile.validator.ISourceValidator#validate(org.eclipse.jface.text.IRegion,
+     *      org.eclipse.wst.validation.internal.provisional.core.IValidationContext,
+     *      org.eclipse.wst.validation.internal.provisional.core.IReporter)
+     */
+    public void validate(final IRegion dirtyRegion,
+            final IValidationContext helper, final IReporter reporter)
+    {
+        if (DEBUG)
+        {
+            System.out.println("exec JSPSemanticsValidator.validateRegion");
+        }
+
+        final IFile file = getFile(helper);
+
+        if (fDocument instanceof IStructuredDocument)
+        {
+            final IStructuredDocument sDoc = (IStructuredDocument) fDocument;
+            final IStructuredDocumentRegion[] regions = sDoc
+            .getStructuredDocumentRegions(dirtyRegion.getOffset(),
+                    dirtyRegion.getLength());
+            if (regions != null)
+            {
+                final IJSFViewValidator validator = JSFValidatorFactory
+                        .createDefaultXMLValidator();
+                final ValidationPreferences prefs = new ValidationPreferences(
+                        JSFCorePlugin.getDefault().getPreferenceStore());
+                prefs.load();
+
+                final ValidationReporter jsfReporter = new ValidationReporter(
+                        this, reporter, file, prefs);
+                validator.validateView(file, regions, jsfReporter);
+            }
+        }
+    }
+
+    private IFile getFile(final IValidationContext helper)
+    {
+        final String[] uris = helper.getURIs();
+        final IWorkspaceRoot wsRoot = ResourcesPlugin.getWorkspace().getRoot();
+        if (uris.length > 0)
+        {
+            return wsRoot.getFile(new Path(uris[0]));
+        }
+        return null;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.jst.jsp.core.internal.validation.JSPValidator#validateFile(org.eclipse.core.resources.IFile,
+     *      org.eclipse.wst.validation.internal.provisional.core.IReporter)
+     */
+    @Override
+    protected void validateFile(final IFile file, final IReporter reporter)
+    {
+        final IJSFViewValidator validator = JSFValidatorFactory
+                .createDefaultXMLValidator();
+        final ValidationPreferences prefs = new ValidationPreferences(
+                JSFCorePlugin.getDefault().getPreferenceStore());
+        prefs.load();
+
+        final ValidationReporter jsfReporter = new ValidationReporter(this,
+                reporter, file, prefs);
+        validator.validateView(file, jsfReporter);
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/MyLocalizedMessage.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/MyLocalizedMessage.java
new file mode 100644
index 0000000..f479a0f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/MyLocalizedMessage.java
@@ -0,0 +1,103 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Cameron Bateman/Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+
+package org.eclipse.jst.jsf.ui.internal.validation;
+
+import java.util.Locale;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
+import org.eclipse.wst.validation.internal.core.Message;
+
+/**
+ * EL customized localizable validation message
+ * @author cbateman
+ *
+ */
+class MyLocalizedMessage extends Message
+{
+	private final String _message;
+	private final int	 _errorCode;
+
+	/**
+	 * @param severity
+	 * @param messageText
+	 * @param targetObject
+	 * @param errorCode 
+	 */
+	public MyLocalizedMessage(int severity, String messageText, IResource targetObject, int errorCode) {
+		this(severity, messageText, (Object) targetObject, errorCode);
+	}
+
+	/**
+	 * @param severity
+	 * @param messageText
+	 * @param targetObject
+	 * @param errorCode 
+	 */
+	private MyLocalizedMessage(int severity, String messageText, Object targetObject, int errorCode) {
+		super(JSFCorePlugin.getDefault().getBundle().getSymbolicName(), severity, 
+                messageText);
+		_message = messageText;
+		setTargetObject(targetObject);
+		_errorCode = errorCode;
+	}
+
+	/**
+	 * @return the localized message
+	 */
+	public String getLocalizedMessage() {
+		return _message;
+	}
+
+	/**
+	 * @see org.eclipse.wst.validation.internal.core.Message#getText()
+	 */
+	public String getText() {
+		return getLocalizedMessage();
+	}
+
+	/**
+	 * @see org.eclipse.wst.validation.internal.core.Message#getText(java.lang.ClassLoader)
+	 */
+	public String getText(ClassLoader cl) {
+		return getLocalizedMessage();
+	}
+
+	/**
+	 * @see org.eclipse.wst.validation.internal.core.Message#getText(java.util.Locale)
+	 */
+	public String getText(Locale l) {
+		return getLocalizedMessage();
+	}
+
+	public String getText(Locale l, ClassLoader cl) {
+		return getLocalizedMessage();
+	}
+
+	/**
+	 * @return the error code related to this message
+	 */
+	public int getErrorCode() {
+		return _errorCode;
+	}
+
+
+	/**
+	 * @param offset
+	 * @return true if this message applies to document offset
+	 */
+	public boolean appliesTo(int offset)
+	{
+		return (offset >= getOffset() && offset < getOffset()+getLength());
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/PreferencesMessages.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/PreferencesMessages.java
index 4d5831a..9c755a1 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/PreferencesMessages.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/PreferencesMessages.java
@@ -28,6 +28,10 @@
         // Do not instantiate
     }
 
+    static {
+        NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
+    }
+
     /**
      * see messages.properties
      */
@@ -198,8 +202,8 @@
      * see messages.properties
      */
     public static String  ProblemSeveritiesConfigurationBlock_pb_incompatible_enumeration_comparison;
-    
-    static {
-        NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
-    }
+    /**
+     * see messages.properties
+     */
+    public static String ProblemSeveritiesConfigurationBlock_pb_member_is_intermediate;
 }
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ProblemSeveritiesConfigurationBlock.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ProblemSeveritiesConfigurationBlock.java
index 9ddcfbe..69b31a7 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ProblemSeveritiesConfigurationBlock.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ProblemSeveritiesConfigurationBlock.java
@@ -12,6 +12,7 @@
 package org.eclipse.jst.jsf.ui.internal.validation;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jst.jsf.core.internal.IJSFPreferenceModel;
 import org.eclipse.jst.jsf.ui.internal.JSFUiPlugin;
@@ -95,6 +96,10 @@
         getJSFCoreKey(ELValidationPreferences.BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME);
     private final static Key PREF_BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE = 
         getJSFCoreKey(ELValidationPreferences.BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE);
+    private final static Key PREF_MEMBER_IS_INTERMEDIATE =
+        getJSFCoreKey(ELValidationPreferences.MEMBER_IS_INTERMEDIATE);
+
+    private final static int EXPECTED_PREFS = 28;
     
     private PixelConverter fPixelConverter;
     
@@ -107,8 +112,9 @@
         super(prefs, project, getKeys(), container);
     }
     
-    private static Key[] getKeys() {
-        return new Key[] {
+    private static Key[] getKeys() 
+    {
+        Key[] keys = new Key[] {
                 PREF_BINARY_OP_BOTH_OPERANDS_NULL
                 , PREF_BINARY_OP_POSSIBLE_DIVISION_BY_ZERO
                 , PREF_BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION 
@@ -136,7 +142,15 @@
                 , PREF_POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS 
                 , PREF_BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME
                 , PREF_BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE
+                , PREF_MEMBER_IS_INTERMEDIATE
           };
+        
+        if (EXPECTED_PREFS != keys.length)
+        {
+            JSFUiPlugin.log(IStatus.WARNING, "Expected "+EXPECTED_PREFS+" preferences but was "+keys.length, new Throwable());
+        }
+
+        return keys;
     }
     
     /*
@@ -239,6 +253,9 @@
         label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_member_not_found; 
         addComboBox(inner, label, PREF_MEMBER_NOT_FOUND, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
 
+        label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_member_is_intermediate; 
+        addComboBox(inner, label, PREF_MEMBER_IS_INTERMEDIATE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+
         // --- type coercion problems
         
         label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_section_type_coercion_problems; 
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ScrolledPageContent.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ScrolledPageContent.java
index 74c21a8..5cc1771 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ScrolledPageContent.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ScrolledPageContent.java
@@ -14,12 +14,11 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.forms.FormColors;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.SharedScrolledComposite;
 
-import org.eclipse.jdt.internal.ui.JavaPlugin;
-
 
 /**
  * Customized SharedScrolledComposite
@@ -44,7 +43,7 @@
         
         setFont(parent.getFont());
         
-        fToolkit= JavaPlugin.getDefault().getDialogsFormToolkit();
+        initDialogsFormToolkit();
         
         setExpandHorizontal(true);
         setExpandVertical(true);
@@ -54,6 +53,16 @@
         setContent(body);
     }
     
+    private FormToolkit initDialogsFormToolkit()
+    {
+        if (fToolkit == null) {
+            FormColors colors= new FormColors(Display.getCurrent());
+            colors.setBackground(null);
+            colors.setForeground(null); 
+            fToolkit= new FormToolkit(colors);
+        }
+        return fToolkit;
+    }
     
     /**
      * @param childControl
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ValidationMessageFactory.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ValidationMessageFactory.java
new file mode 100644
index 0000000..fef3aa3
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ValidationMessageFactory.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Oracle Corporation.
+ * 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:
+ *    Cameron Bateman/Oracle - initial API and implementation
+ * 
+ ********************************************************************************/
+
+package org.eclipse.jst.jsf.ui.internal.validation;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.jst.jsf.validation.internal.ELValidationPreferences;
+import org.eclipse.jst.jsf.validation.internal.ValidationPreferences;
+import org.eclipse.wst.validation.internal.core.Message;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+
+/**
+ * Creates configured validation Message objects.
+ * 
+ * @author cbateman
+ *
+ */
+public final class ValidationMessageFactory
+{
+    /**
+     * @param diagnostic
+     * @param offset
+     * @param length
+     * @param file
+     * @param prefs
+     * @return a configured message
+     */
+    public static Message createFromDiagnostic(final Diagnostic diagnostic, final int offset, final int length, final IFile file, final ValidationPreferences prefs)
+    {
+
+        final int code = diagnostic.getCode();
+        
+        int severity = diagnostic.getSeverity();
+
+        // XXX: this is a temporary solution.  We need a way to allow 
+        // severity overrides from default that is decoupled from the
+        // factory or code value for a diagnostic
+        if (code >= 0)
+        {
+            final ELValidationPreferences elPrefs =
+                prefs.getElPrefs();
+            severity =
+                elPrefs.getDiagnosticSeverity(code);
+        }
+
+        final Message message =
+            new MyLocalizedMessage(
+                    convertSeverity(severity),
+                    diagnostic.getMessage(),
+                    file,
+                    diagnostic.getCode());
+
+        message.setOffset(offset);
+        message.setLength(length);
+
+        return message;
+    }
+
+    /**
+     * @param severity
+     * @return a Message severity equivilent to diagnostic.getSeverity()
+     */
+    private static int convertSeverity(final int severity)
+    {
+        switch (severity)
+        {
+            case Diagnostic.ERROR:
+                return IMessage.HIGH_SEVERITY;
+            case Diagnostic.WARNING:
+                return IMessage.NORMAL_SEVERITY;
+            case Diagnostic.INFO:
+                return IMessage.LOW_SEVERITY;
+            case Diagnostic.OK:
+            default:
+                // no bits set
+                return 0;
+        }
+    }
+
+    private ValidationMessageFactory()
+    {
+        // no external instantiation
+    }
+}
+
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ValidationReporter.java b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ValidationReporter.java
new file mode 100644
index 0000000..e29fae7
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/ValidationReporter.java
@@ -0,0 +1,48 @@
+package org.eclipse.jst.jsf.ui.internal.validation;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.jst.jsf.validation.internal.IJSFViewValidator;
+import org.eclipse.jst.jsf.validation.internal.ValidationPreferences;
+import org.eclipse.wst.validation.internal.provisional.core.IMessage;
+import org.eclipse.wst.validation.internal.provisional.core.IReporter;
+import org.eclipse.wst.validation.internal.provisional.core.IValidator;
+
+/*package*/class ValidationReporter implements
+        IJSFViewValidator.IValidationReporter
+{
+    private final IValidator            _validator;
+    private final IReporter             _reporter;
+    private final IFile                 _file;
+    private final ValidationPreferences _prefs;
+
+    public ValidationReporter(final IValidator validator,
+            final IReporter reporter, final IFile file,
+            final ValidationPreferences prefs)
+    {
+        _validator = validator;
+        _reporter = reporter;
+        _file = file;
+        _prefs = prefs;
+    }
+
+    public void report(final Diagnostic problem, final int start,
+            final int length)
+    {
+        final IMessage message = ValidationMessageFactory.createFromDiagnostic(
+                problem, start, length, _file, _prefs);
+
+        if ((message.getSeverity() & IMessage.ALL_MESSAGES) != 0)
+        {
+            _reporter.addMessage(_validator, message);
+        }
+    }
+
+    public void report(IMessage message)
+    {
+        if ((message.getSeverity() & IMessage.ALL_MESSAGES) != 0)
+        {
+            _reporter.addMessage(_validator, message);
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/messages.properties b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/messages.properties
index cd46b52..eaeea75 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/messages.properties
+++ b/jsf/plugins/org.eclipse.jst.jsf.ui/src/org/eclipse/jst/jsf/ui/internal/validation/messages.properties
@@ -38,6 +38,7 @@
 
 ProblemSeveritiesConfigurationBlock_pb_variable_not_found=Variable not found
 ProblemSeveritiesConfigurationBlock_pb_member_not_found=Member not found
+ProblemSeveritiesConfigurationBlock_pb_member_is_intermediate=Member is intermediate
 
 ProblemSeveritiesConfigurationBlock_pb_binary_op_numeric_coercion_error=Binary operation number coercion problems
 ProblemSeveritiesConfigurationBlock_pb_binary_op_boolean_coercion_error=Binary operation boolean coercion problems
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/.settings/org.eclipse.jdt.core.prefs b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/.settings/org.eclipse.jdt.core.prefs
index ff85cd0..a09df04 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue Apr 10 10:08:32 PDT 2007
+#Tue Oct 23 12:01:25 PDT 2007
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
@@ -65,11 +65,13 @@
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=error
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/META-INF/MANIFEST.MF
index c2f149b..bdd4dca 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.pagedesigner.jsf.ui;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Activator: org.eclipse.jst.pagedesigner.jsf.ui.JSFUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -9,7 +9,6 @@
  org.eclipse.jst.pagedesigner;bundle-version="[1.0.0,1.1.0)",
  org.eclipse.jst.pagedesigner.jsp.core;bundle-version="[1.0.0,1.1.0)",
  org.eclipse.wst.common.modulecore;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.common.ui.properties;bundle-version="[1.0.101,1.2.0)",
  org.eclipse.jst.jsf.common.ui;bundle-version="[1.0.0,1.1.0)",
  org.eclipse.jst.jsf.core;bundle-version="[1.0.0,1.1.0)",
  org.eclipse.jst.jsf.common;bundle-version="[1.0.0,1.1.0)",
@@ -19,8 +18,9 @@
  org.eclipse.gef;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)"
-Eclipse-LazyStart: true
+ org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.views.properties.tabbed;bundle-version="[3.2.0,4.0.0)"
+Bundle-ActivationPolicy: lazy
 Bundle-ManifestVersion: 2
 Export-Package: org.eclipse.jst.pagedesigner.jsf.core.dom;x-internal:=true,
  org.eclipse.jst.pagedesigner.jsf.ui;x-internal:=true,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/build.properties b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/build.properties
index de92133..0e522c2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/build.properties
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/build.properties
@@ -10,14 +10,12 @@
 ###############################################################################
 source.. = src/
 output.. = bin/
-bin.includes = plugin.xml,\
+bin.includes = .,\
+			   plugin.xml,\
                META-INF/,\
-               .,\
                configs/,\
-               icons/,\
                plugin.properties,\
-               metadata/,\
-               about.html
-jars.compile.order = .
+               about.html,\
+               icons/
 javacSource=1.5
 javacTarget=1.5
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/plugin.xml b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/plugin.xml
index 6e9b378..7c5bbc6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/plugin.xml
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/plugin.xml
@@ -1,693 +1,477 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.2"?>
 <plugin>
-   <extension
-         point="org.eclipse.jst.pagedesigner.pageDesignerExtension">
-      <tagConverterFactory class="org.eclipse.jst.pagedesigner.jsf.ui.converter.jsfcore.JSFCoreConverterFactory"/>
-	  <attributeCellEditorFactory class="org.eclipse.jst.pagedesigner.jsf.ui.celleditors.JSFAttributeCellEditorFactory"/>
-      <tagConverterFactory class="org.eclipse.jst.pagedesigner.jsf.ui.converter.jsfhtml.JSFHTMLConverterFactory"/>
-      <elementEditFactory class="org.eclipse.jst.pagedesigner.jsf.ui.elementedit.jsfhtml.JSFHTMLElementEditFactory"/>
-      <elementEditFactory class="org.eclipse.jst.pagedesigner.jsf.ui.elementedit.jsfcore.JSFCoreElementEditFactory"/>
-      <linkCreator
-            class="org.eclipse.jst.pagedesigner.jsf.ui.actions.JSFCommandLinkCreator"
-            linkIdentifier="JSF CommandLink"/>
-      <linkCreator
-            class="org.eclipse.jst.pagedesigner.jsf.ui.actions.JSFOutputLinkCreator"
-            linkIdentifier="JSF OutputLink"/>
-   </extension>
-   
-   <extension point="org.eclipse.jst.pagedesigner.popupMenuContributor">
-	<menuItemContributor class="org.eclipse.jst.pagedesigner.jsf.ui.actions.PageFlowContributor" 
-	URI="http://java.sun.com/jsf/core"/>
-	</extension> 
-   
-   <!-- page variables -->
-   <extension
-         point="org.eclipse.jst.pagedesigner.jsp.core.pageVar">
-      <taglib uri="http://java.sun.com/jsf/html">
-            
-      	<tag
-            varTypeStringIsAttr="true"
-            varNameIsAttr="true"
-            varTypeMode="EXPRESSION_COLLECTION_ITEM"
-            varTypeString="value"
-            varName="var"
-            tagName="dataTable"/>
-       </taglib>
-       <taglib uri="http://java.sun.com/jsf/core">
-       	<tag
-            varTypeStringIsAttr="true"
-            varNameIsAttr="true"
-            varTypeMode="BUNDLE"
-            varTypeString="basename"
-            varName="var"
-            tagName="loadBundle"/>
-       </taglib>
-   </extension>
 
-   <!-- element and attribute meta data -->
-   <extension
-         point="org.eclipse.jst.pagedesigner.cmRegistry">
-      <registry
-            configFile="configs/cm/jsfcore.xml"
-            uri="http://java.sun.com/jsf/core"/>
-      <registry
-            configFile="configs/cm/jsfhtml.xml"
-            uri="http://java.sun.com/jsf/html"/>
-   </extension>
-   <extension
-         point="org.eclipse.jst.pagedesigner.propertySections">
-      <propertySections>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreActionListenerSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.actionListener">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="actionListener"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreAttributeSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.attribute">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="attribute"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreConverterSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.converter">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="converter"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreFacetSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.facet">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="facet"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreLoadBundleSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.loadBundle">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="loadBundle"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreParamSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.param">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="param"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreSelectItemSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectItem">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="selectItem"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreSelectItemsSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectItems">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="selectItems"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreSubviewSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.subview">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="subview"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreValidateDoubleRangeSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.validateDoubleRange">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="validateDoubleRange"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreValidateLengthSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.validateLength">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="validateLength"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreValidateLongRangeSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.validateLongRange">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="validateLongRange"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreValidatorSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.validator">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="validator"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreValueChangeListenerSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.valueChangeListener">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="valueChangeListener"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreVerbatimSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.verbatim">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="verbatim"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreViewSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.view">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/core"
-                  tagName="view"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlColumnSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.column">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="column"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlCommandButtonSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.commandButton">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="commandButton"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.commandButton"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlActionListenerSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.commandButton.listener">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="commandButton"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlCommandLinkSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.commandLink">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="commandLink"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.commandLink"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlActionListenerSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.commandLink.listener">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="commandLink"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlDataTableSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.dataTable">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="dataTable"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.dataTable"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlDataTableColumnsSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.dataTable.columns">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="dataTable"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlFormSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.form">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="form"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlGraphicImageSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.graphicImage">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="graphicImage"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputHiddenSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputHidden">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputHidden"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.inputHidden"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputHiddenTypeSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputHidden.type">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputHidden"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputSecretSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputSecret">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputSecret"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.inputSecret"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputSecretTypeSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputSecret.type">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputSecret"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.inputSecret.type"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputOthersSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputText.others">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputSecret"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputTextSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputText">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputText"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.inputText"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputTextTypeSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputText.type">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputText"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.inputText.type"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputOthersSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputText.others">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputText"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputTextareaSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputTextarea">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputTextarea"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.inputTextarea"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputTextareaTypeSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputTextarea.type">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputTextarea"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.inputTextarea.type"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputOthersSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.inputTextarea.others">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="inputTextarea"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlMessageSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.message">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="message"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlMessagesSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.messages">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="messages"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputFormatSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.outputFormat">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="outputFormat"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.outputFormat"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputFormatParamsSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.outputFormat.params">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="outputFormat"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputLabelSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.outputLabel">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="outputLabel"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputLinkSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.outputLink">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="outputLink"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputTextSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.outputText">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="outputText"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.outputText"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputTextConverterSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.outputText.converter">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="outputText"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlPanelGridSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.panelGrid">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="panelGrid"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlPanelGroupSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.panelGroup">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="panelGroup"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectBooleanCheckboxSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectBooleanCheckbox">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectBooleanCheckbox"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectManyCheckboxSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectManyCheckbox">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectManyCheckbox"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.selectManyCheckbox"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectManyCheckbox.choices">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectManyCheckbox"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectManyListboxSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectManyListbox">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectManyListbox"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.selectManyListbox"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectManyListbox.choices">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectManyListbox"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectManyMenuSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectManyMenu">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectManyMenu"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.selectManyMenu"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectManyMenu.choices">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectManyMenu"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectOneListboxSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectOneListbox">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectOneListbox"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.selectOneListbox"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectOneListbox.choices">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectOneListbox"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectOneMenuSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectOneMenu">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectOneMenu"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.selectOneMenu"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectOneMenu.choices">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectOneMenu"/>
-         </propertySection>
-         <propertySection
-               afterSection="top"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectOneRadioSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectOneRadio">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectOneRadio"/>
-         </propertySection>
-         <propertySection
-               afterSection="section.general.selectOneRadio"
-               class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
-               tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-               id="section.general.selectOneRadio.choices">
-            <tagFilter
-                  caseSensitive="true"
-                  uri="http://java.sun.com/jsf/html"
-                  tagName="selectOneRadio"/>
-         </propertySection>
-                   <propertySection
-                afterSection="top"
-                class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreConvertDateTimeGroup"
-                tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-                id="section.general.convertDateTime">
-             <tagFilter
-                   caseSensitive="true"
-                   uri="http://java.sun.com/jsf/core"
-                   tagName="convertDateTime"/>
-          </propertySection>
-         <propertySection
-                afterSection="top"
-                class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreConvertNumberGroup"
-                tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
-                id="section.general.convertNumber">
-             <tagFilter
-                   caseSensitive="true"
-                   uri="http://java.sun.com/jsf/core"
-                   tagName="convertNumber"/>
-          </propertySection>
-      </propertySections>
-   </extension>
-   
-   <extension
-         point="org.eclipse.jst.jsf.common.standardMetaDataFiles">
-      <standardMetaDataFile
-            location="/metadata/jsf_html.xml"
-            uri="http://java.sun.com/jsf/html">
-      </standardMetaDataFile>
-      <standardMetaDataFile
-            location="/metadata/jsf_core.xml"
-            uri="http://java.sun.com/jsf/core">
-      </standardMetaDataFile>
-            <standardMetaDataFile
-            location="/metadata/jsf_core_dti.xml"
-            uri="http://java.sun.com/jsf/core">
-      </standardMetaDataFile>
-      <standardMetaDataFile
-            location="/metadata/jsf_html_dti.xml"
-            uri="http://java.sun.com/jsf/html">
-      </standardMetaDataFile>      
-   </extension>
+	<!-- page variables -->
+	<extension point="org.eclipse.jst.pagedesigner.jsp.core.pageVar">
+		<taglib uri="http://java.sun.com/jsf/html">
+
+			<tag varTypeStringIsAttr="true" varNameIsAttr="true"
+				varTypeMode="EXPRESSION_COLLECTION_ITEM" varTypeString="value"
+				varName="var" tagName="dataTable" />
+		</taglib>
+		<taglib uri="http://java.sun.com/jsf/core">
+			<tag varTypeStringIsAttr="true" varNameIsAttr="true"
+				varTypeMode="BUNDLE" varTypeString="basename" varName="var"
+				tagName="loadBundle" />
+		</taglib>
+	</extension>
+
+	<!-- element and attribute meta data -->
+	<!-- DISABLE CMREGISTRY ITEMS
+		<extension point="org.eclipse.jst.pagedesigner.cmRegistry">
+		<registry configFile="configs/cm/jsfcore.xml"
+		uri="http://java.sun.com/jsf/core" />
+		<registry configFile="configs/cm/jsfhtml.xml"
+		uri="http://java.sun.com/jsf/html" />
+		</extension>
+	-->
+
+	<extension
+		point="org.eclipse.ui.views.properties.tabbed.propertySections">
+		<propertySections
+			contributorId="org.eclipse.jst.pagedesigner.tabPropertyContributor">
+			<!-- Disable sections /delete later
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreActionListenerSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.actionListener">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="actionListener" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreAttributeSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.attribute">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="attribute" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreConverterSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.converter">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="converter" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreFacetSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.facet">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="facet" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreLoadBundleSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.loadBundle">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="loadBundle" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreParamSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.param">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="param" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreSelectItemSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectItem">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="selectItem" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreSelectItemsSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectItems">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="selectItems" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreSubviewSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.subview">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="subview" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreValidateDoubleRangeSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.validateDoubleRange">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="validateDoubleRange" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreValidateLengthSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.validateLength">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="validateLength" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreValidateLongRangeSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.validateLongRange">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="validateLongRange" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreValidatorSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.validator">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="validator" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreValueChangeListenerSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.valueChangeListener">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="valueChangeListener" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreVerbatimSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.verbatim">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="verbatim" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreViewSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.view">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/core" tagName="view" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlColumnSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.column">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="column" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlCommandButtonSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.commandButton">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="commandButton" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlCommandLinkSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.commandLink">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="commandLink" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlDataTableSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.dataTable">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="dataTable" />
+				</propertySection>			
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlFormSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.form">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="form" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlGraphicImageSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.graphicImage">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="graphicImage" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputHiddenSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputHidden">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="inputHidden" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlMessageSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.message">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="message" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlMessagesSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.messages">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="messages" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputFormatSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.outputFormat">
+				<input
+				type="org.eclipse.jst.pagedesigner.jsf.ui.Input1">
+				</input>
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="outputFormat" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputTextSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputText">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="inputText" />
+				</propertySection>			
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputLabelSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.outputLabel">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="outputLabel" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputLinkSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.outputLink">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="outputLink" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputTextSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.outputText">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="outputText" />
+				</propertySection>
+				<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputTextareaSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputTextarea">
+				</propertySection>
+				
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlPanelGridSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.panelGrid">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="panelGrid" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlPanelGroupSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.panelGroup">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="panelGroup" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectBooleanCheckboxSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectBooleanCheckbox">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="selectBooleanCheckbox" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectManyCheckboxSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectManyCheckbox">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="selectManyCheckbox" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectManyListboxSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectManyListbox">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="selectManyListbox" />
+				</propertySection>			
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectManyMenuSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectManyMenu">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="selectManyMenu" />
+				</propertySection>			
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputSecretSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputSecret">
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectOneListboxSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectOneListbox">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="selectOneListbox" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectOneMenuSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectOneMenu">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="selectOneMenu" />
+				</propertySection>
+				<propertySection afterSection="top"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectOneRadioSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectOneRadio">
+				<tagFilter caseSensitive="true"
+				uri="http://java.sun.com/jsf/html" tagName="selectOneRadio" />
+				</propertySection>	
+			-->
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreConvertDateTimeGroup"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.convertDateTime">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFCoreConvertNumberGroup"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.convertNumber">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlActionListenerSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.commandButton.listener">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlActionListenerSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.commandLink.listener">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlDataTableColumnsSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.dataTable.columns">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputHiddenTypeSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputHidden.type">
+			</propertySection>
+
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputSecretTypeSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputSecret.type">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputOthersSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputText.others">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputTextTypeSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputText.type">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputOthersSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputText.others">
+			</propertySection>
+			<propertySection
+				afterSection="section.general.inputTextarea"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputTextareaTypeSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputTextarea.type">
+			</propertySection>
+			<propertySection
+				afterSection="section.general.inputTextarea.type"
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlInputOthersSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.inputTextarea.others">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputFormatParamsSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.outputFormat.params">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlOutputTextConverterSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.outputText.converter">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectManyCheckbox.choices">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectManyListbox.choices">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectManyMenu.choices">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectOneListbox.choices">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectOneMenu.choices">
+			</propertySection>
+			<propertySection
+				class="org.eclipse.jst.pagedesigner.jsf.ui.sections.JSFHtmlSelectChoicesSection"
+				tab="org.eclipse.jst.pagedesigner.tabQuickEdit"
+				id="section.general.selectOneRadio.choices">
+			</propertySection>
+		</propertySections>
+	</extension>
+
+	<extension
+		point="org.eclipse.jst.pagedesigner.pageDesignerExtension">
+		<tagConverterFactory
+			class="org.eclipse.jst.pagedesigner.jsf.ui.converter.jsfcore.JSFCoreConverterFactory" />
+		<tagConverterFactory
+			class="org.eclipse.jst.pagedesigner.jsf.ui.converter.jsfhtml.JSFHTMLConverterFactory" />
+		<elementEditFactory
+			class="org.eclipse.jst.pagedesigner.jsf.ui.elementedit.jsfhtml.JSFHTMLElementEditFactory" />
+		<elementEditFactory
+			class="org.eclipse.jst.pagedesigner.jsf.ui.elementedit.jsfcore.JSFCoreElementEditFactory" />
+		<linkCreator
+			class="org.eclipse.jst.pagedesigner.jsf.ui.actions.JSFCommandLinkCreator"
+			linkIdentifier="JSF CommandLink" />
+		<linkCreator
+			class="org.eclipse.jst.pagedesigner.jsf.ui.actions.JSFOutputLinkCreator"
+			linkIdentifier="JSF OutputLink" />
+		<tagTransformOperation
+			class="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.ColumnOperation"
+			id="ColumnOperation">
+		</tagTransformOperation>
+		<tagTransformOperation
+			class="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.DataTableOperation"
+			id="DataTableOperation">
+		</tagTransformOperation>
+		<tagTransformOperation
+			class="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.PanelGridOperation"
+			id="PanelGridOperation">
+		</tagTransformOperation>
+		<tagTransformOperation
+			class="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.SelectManyCheckboxOperation"
+			id="SelectManyCheckboxOperation">
+		</tagTransformOperation>
+		<tagTransformOperation
+			class="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.SelectOneRadioOperation"
+			id="SelectOneRadioOperation">
+		</tagTransformOperation>
+		<tagTransformOperation
+			class="org.eclipse.jst.pagedesigner.jsf.ui.converter.operations.jsf.LoadBundleOperation"
+			id="LoadBundleOperation">
+		</tagTransformOperation>
+	</extension>
+
+	<extension
+		point="org.eclipse.jst.pagedesigner.popupMenuContributor">
+		<menuItemContributor
+			class="org.eclipse.jst.pagedesigner.jsf.ui.actions.PageFlowContributor"
+			URI="http://java.sun.com/jsf/core" />
+	</extension>
 </plugin>
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddActionListenerAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddActionListenerAction.java
index 131c134..a0d0e73 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddActionListenerAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddActionListenerAction.java
@@ -37,6 +37,6 @@
      */
     public void run()
     {
-        DialogUtil.createSubElement(getShell(), getParentElement(), ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_ACTIONLISTENER, null);
+        DialogUtil.createSubElement(getShell(), getParentElement(), ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_ACTIONLISTENER, new String[]{"type"});
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddAttributeAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddAttributeAction.java
index 2942f28..3dcdaf0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddAttributeAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddAttributeAction.java
@@ -36,7 +36,7 @@
      */
     public void run()
     {
-        DialogUtil.createSubElement(getShell(), getParentElement(), ITLDConstants.URI_JSF_CORE, "attribute", null);
+        DialogUtil.createSubElement(getShell(), getParentElement(), ITLDConstants.URI_JSF_CORE, "attribute", new String[]{"name", "value"});
 //        CommonDialogFieldGroup group = new CommonDialogFieldGroup();
 //
 //        AttributeData[] data = createAttributeData();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddSelectItemsAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddSelectItemsAction.java
index c4ae73c..5598887 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddSelectItemsAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/AddSelectItemsAction.java
@@ -12,7 +12,8 @@
 package org.eclipse.jst.pagedesigner.jsf.ui.actions;
 
 import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.pagedesigner.jsf.ui.commands.jsfhtml.AddJSFCoreChildCommand;
+import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
+import org.eclipse.jst.pagedesigner.properties.attrgroup.DialogUtil;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 
 
@@ -35,9 +36,12 @@
      * @see org.eclipse.jface.action.Action#run()
      */
     public void run()
-    {
-        AddJSFCoreChildCommand command = new AddJSFCoreChildCommand(this.getParentElement(),
-            IJSFConstants.TAG_SELECTITEMS, null);
-        command.execute();
+    { 
+//        AddJSFCoreChildCommand command = new AddJSFCoreChildCommand(this.getParentElement(),
+//            IJSFConstants.TAG_SELECTITEMS, attributes);
+//        command.execute();
+        DialogUtil.createSubElement(getShell(), getParentElement(), ITLDConstants.URI_JSF_CORE,
+                IJSFConstants.TAG_SELECTITEMS, new String[] { IJSFConstants.ATTR_ID, IJSFConstants.ATTR_BINDING, IJSFConstants.ATTR_VALUE});
+
     }
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/ExpressionAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/ExpressionAction.java
index 78f1782..3204dca 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/ExpressionAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/ExpressionAction.java
@@ -40,15 +40,7 @@
     private String          _action;
     private IProject        _project;
     private IFile           _file;
-    private int             _type;
 
-    /**
-     * @param type
-     */
-    public ExpressionAction(int type)
-    {
-        _type = type;
-    }
 
     /**
      * @param attribute
@@ -85,21 +77,7 @@
                 IPageVariablesProvider.class);
         pageVarProvider.refresh();
 
-        Object result = null;
-        if (_type == METHOD)
-        {
-//            result = VariableResolverUtils.resolveMethodBinding(_action, _project, IWebFrameworkResolver.ACTION_METHOD,                    true);
-        	result = null;
-        }
-        else
-        {
-//            result = VariableResolverUtils.resolveValueBinding(_action, _project, true);
-        	result = null;
-        }
-        if (result == null)
-        {
-            JSFUIPlugin.getAlerts().warning("Message.Warning.Title", "Message.Warning.InvalidateExpression");//$NON-NLS-1$ $NON-NLS-2$
-        }
+        JSFUIPlugin.getAlerts().warning("Message.Warning.Title", "Message.Warning.InvalidateExpression");//$NON-NLS-1$ $NON-NLS-2$
     }
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/JSFNavigationGroup.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/JSFNavigationGroup.java
index 8f2e179..4d593e3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/JSFNavigationGroup.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/JSFNavigationGroup.java
@@ -69,11 +69,11 @@
     {
         if (support.isActionSource())
         {
-            ExpressionAction action = new ExpressionAction(ExpressionAction.METHOD);
+            ExpressionAction action = new ExpressionAction();
             action.setText(JSFUIPlugin.getResourceString("ElementEdit.Submenu.JavaNavigation.Action"));//$NON-NLS-1$
-            action.setActionValue(ele.getAttribute(ICSSPropertyID.ATTR_ACTION));
             if (ele != null)
             {
+                action.setActionValue(ele.getAttribute(ICSSPropertyID.ATTR_ACTION));
                 IDOMModel model = ele.getModel();
                 action.setProject(StructuredModelUtil.getProjectFor(model));
                 action.setFile(StructuredModelUtil.getFileFor(model));
@@ -82,11 +82,11 @@
         }
         if (support.isValueHolder())
         {
-            ExpressionAction action = new ExpressionAction(ExpressionAction.VARIABLE);
+            ExpressionAction action = new ExpressionAction();
             action.setText(JSFUIPlugin.getResourceString("ElementEdit.Submenu.JavaNavigation.Value"));//$NON-NLS-1$
-            action.setActionValue(ele.getAttribute(ICSSPropertyID.ATTR_VALUE));
             if (ele != null)
             {
+                action.setActionValue(ele.getAttribute(ICSSPropertyID.ATTR_VALUE));
                 IDOMModel model = ele.getModel();
                 action.setProject(StructuredModelUtil.getProjectFor(model));
                 action.setFile(StructuredModelUtil.getFileFor(model));
@@ -95,11 +95,11 @@
         }
 
         {
-            ExpressionAction action = new ExpressionAction(ExpressionAction.VARIABLE);
+            ExpressionAction action = new ExpressionAction();
             action.setText(JSFUIPlugin.getResourceString("ElementEdit.Submenu.JavaNavigation.Binding"));//$NON-NLS-1$
-            action.setActionValue(ele.getAttribute(ICSSPropertyID.ATTR_BINDING));
             if (ele != null)
             {
+                action.setActionValue(ele.getAttribute(ICSSPropertyID.ATTR_BINDING));
                 IDOMModel model = ele.getModel();
                 action.setProject(StructuredModelUtil.getProjectFor(model));
                 action.setFile(StructuredModelUtil.getFileFor(model));
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/PageFlowContributor.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/PageFlowContributor.java
index f43db4f..293965d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/PageFlowContributor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/actions/PageFlowContributor.java
@@ -72,7 +72,7 @@
         }
     }
 
-    class PageFlowAction extends Action
+    private static class PageFlowAction extends Action
     {
         /**
          * this action's id
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/AttributeData.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/AttributeData.java
index 9cdae9b..b13fa30 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/AttributeData.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/AttributeData.java
@@ -14,6 +14,7 @@
 import java.util.HashMap;
 
 /**
+ * Information and value about a tag attribute
  * @author mengbo
  * @version 1.5
  */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/CommonDialogFieldGroup.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/CommonDialogFieldGroup.java
index 29ca67a..7959d70 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/CommonDialogFieldGroup.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/CommonDialogFieldGroup.java
@@ -26,6 +26,7 @@
 /**
  * @author mengbo
  * @version 1.5
+ * @TODO - unused now?
  */
 public class CommonDialogFieldGroup extends DialogFieldGroup
 {
@@ -58,7 +59,7 @@
             for (int i = 0; i < attributeData.length; i++)
             {
                 DialogField field = (DialogField) map.get(attributeData[i]);
-                DialogFieldFactory.prepareDialogFiledValue(field, attributeData[i]);
+                DialogFieldFactory.prepareDialogFieldValue(field, attributeData[i]);
             }
         }
     }
@@ -73,7 +74,7 @@
             for (int i = 0; i < attributeData.length; i++)
             {
                 DialogField field = (DialogField) map.get(attributeData[i]);
-                DialogFieldFactory.setDialogFiledValue(field, attributeData[i].getValue());
+                DialogFieldFactory.setDialogFieldValue(field, attributeData[i].getValue());
             }
         }
     }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/DialogFieldFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/DialogFieldFactory.java
index 0afbd8a..ab8c300 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/DialogFieldFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/attributegroup/DialogFieldFactory.java
@@ -12,20 +12,22 @@
 package org.eclipse.jst.pagedesigner.jsf.ui.attributegroup;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ClassButtonDialogField;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ComboDialogField;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.RadiosDialogField;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StringDialogField;
-import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
-import org.eclipse.jst.pagedesigner.meta.ICMRegistry;
-import org.eclipse.jst.pagedesigner.meta.IElementDescriptor;
-import org.eclipse.jst.pagedesigner.meta.IValueType;
-import org.eclipse.jst.pagedesigner.meta.internal.CMRegistry;
+import org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledProcessingFactory;
+import org.eclipse.jst.pagedesigner.meta.IAttributeRuntimeValueType;
 
 /**
  * @author mengbo
  * @version 1.5
+ * @TODO - unused now
  */
 public class DialogFieldFactory
 {
@@ -35,14 +37,20 @@
      */
     public static DialogField getDialogField(AttributeData data)
     {
-        IAttributeDescriptor descriptor = getAttributeDescriptor(data.getUri(), data.getElementName(), data.getAttributeName());
-        if(descriptor != null)
+    	Object project = data.getParamMap().get(AttributeData.Project);
+    	Entity attrEntity = null;
+    	if (project instanceof IProject){
+    		attrEntity = TaglibDomainMetaDataQueryHelper.getEntity(TaglibDomainMetaDataQueryHelper.createMetaDataModelContext((IProject)project, data.getUri()), data.getElementName()+"/"+data.getAttributeName());
+    	}
+
+        if(attrEntity != null)
         {
-            String type = descriptor.getValueType();
-            if (IValueType.CLASSNAME.equalsIgnoreCase(type))
+        	Trait t = TaglibDomainMetaDataQueryHelper.getTrait(attrEntity, MetaDataEnabledProcessingFactory.ATTRIBUTE_VALUE_RUNTIME_TYPE_PROP_NAME);
+            String type = TraitValueHelper.getValueAsString(t);
+            if (IAttributeRuntimeValueType.JAVACLASS.equals(type)) 
             {
                 ClassButtonDialogField field = new ClassButtonDialogField(null);
-                Object project = data.getParamMap().get(AttributeData.Project);
+//                Object project = data.getParamMap().get(AttributeData.Project);
                 if (project instanceof IProject)
                 {
                     field.setProject((IProject) project);
@@ -53,21 +61,14 @@
             }
         }
         return new StringDialogField();
-    }
-
-    private static IAttributeDescriptor getAttributeDescriptor(String uri, String elementName, String attributeName)
-    {
-        ICMRegistry registry = CMRegistry.getInstance();
-        IElementDescriptor elementDescriptor = registry.getElementDescriptor(uri, elementName);
-        return elementDescriptor.getAttributeDescriptor(attributeName);
-    }
-
+    }   
+    
     /**
+     * Sets the initial value of dialog field
      * @param field
      * @param value
      */
-    public static void setDialogFiledValue(DialogField field, Object value)
-    {
+    public static void setDialogFieldValue(DialogField field, Object value){
         if (field instanceof StringDialogField)
         {
             ((StringDialogField) field).setTextWithoutUpdate(value == null ? "" : value.toString());//$NON-NLS-1$
@@ -84,12 +85,23 @@
             }
         }
     }
+    
+    /**
+     * @param field
+     * @param value
+     * @deprecated - use setDialogField method
+     */
+    public static void setDialogFiledValue(DialogField field, Object value)
+    {
+    	setDialogFieldValue(field, value);
+    }
 
     /**
+     * Sets value of field into AttributeData if it was a StringDialogField
      * @param field
      * @param pair
      */
-    public static void prepareDialogFiledValue(DialogField field, AttributeData pair)
+    public static void prepareDialogFieldValue(DialogField field, AttributeData pair)
     {
         if (field instanceof StringDialogField)
         {
@@ -98,6 +110,15 @@
     }
 
     /**
+     * @param field
+     * @param pair
+     * @deprecated - use prepareDialogFieldValue
+     */
+    public static void prepareDialogFiledValue(DialogField field, AttributeData pair)
+    {
+    	prepareDialogFieldValue(field, pair);
+    }
+    /**
      * @param data
      * @return the dialog field label for data
      */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/celleditors/ConverterValidatorIdDialogField.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/celleditors/ConverterValidatorIdDialogField.java
index 07c7ce3..ef36d11 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/celleditors/ConverterValidatorIdDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/celleditors/ConverterValidatorIdDialogField.java
@@ -11,8 +11,6 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.jsf.ui.celleditors;
 
-import java.util.Arrays;
-
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ComboDialogField;
 import org.eclipse.jst.pagedesigner.properties.attrgroup.IElementContextable;
 import org.eclipse.swt.SWT;
@@ -22,6 +20,7 @@
 /**
  * @author mengbo
  * @version 1.5
+ * @deprecated
  */
 public class ConverterValidatorIdDialogField extends ComboDialogField implements IElementContextable
 {
@@ -40,25 +39,7 @@
      */
     public void setElementContext(IDOMNode ancester, IDOMElement element)
     {
-        String[] results = null;
-        if ("validator-id".equalsIgnoreCase(_elementId))
-        {
-            //results = FacesUtil.getRegisteredConverterIds(project);
-        	
-        }
-        else
-        {
-            // results = FacesUtil.getRegisteredValidatorIds(project);
-        }
-        if (results != null)
-        {
-            Arrays.sort(results);
-            setItems(results);
-        }
-        else
-        {
-            setItems(new String[0]);
-        }
+        setItems(new String[0]);
     }
 
     /**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/celleditors/JSFAttributeCellEditorFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/celleditors/JSFAttributeCellEditorFactory.java
index e9931e6..476a096 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/celleditors/JSFAttributeCellEditorFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/celleditors/JSFAttributeCellEditorFactory.java
@@ -26,6 +26,7 @@
 /**
  * @author mengbo
  * @version 1.5
+ * @deprecated
  */
 public class JSFAttributeCellEditorFactory implements IAttributeCellEditorFactory
 {
@@ -46,33 +47,15 @@
     public CellEditor createCellEditor(Composite parent, IAttributeDescriptor attr, Element element)
     {
         String type = attr.getValueType();
-        String[] results = null;
+
         if (type.equalsIgnoreCase(CONVERTERID))
         {
-        	// XXX
-            // results = FacesUtil.getRegisteredConverterIds(project);
             Map map = new HashMap();
-            if (results != null)
-            {
-                for (int i = 0; i < results.length; i++)
-                {
-                    map.put(results[i], results[i]);
-                }
-            }
             return LabeledComboBoxCellEditor.newInstance(parent, map, SWT.NONE);
         }
         else if (type.equalsIgnoreCase(VALIDATORID))
         {
-        	// XXX
-            // results = FacesUtil.getRegisteredValidatorIds(project);
             Map map = new HashMap();
-            if (results != null)
-            {
-                for (int i = 0; i < results.length; i++)
-                {
-                    map.put(results[i], results[i]);
-                }
-            }
             return LabeledComboBoxCellEditor.newInstance(parent, map, SWT.NONE);
         }
         return null;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfcore/JSFCoreConverterFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfcore/JSFCoreConverterFactory.java
index 9aa0535..d3276ae 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfcore/JSFCoreConverterFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfcore/JSFCoreConverterFactory.java
@@ -15,6 +15,10 @@
 import java.util.Set;
 
 import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory2;
 import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
 import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
 import org.eclipse.jst.pagedesigner.converter.AbstractTagConverter;
@@ -23,7 +27,7 @@
 import org.eclipse.jst.pagedesigner.converter.ITagConverter;
 import org.eclipse.jst.pagedesigner.converter.TagConverterToInlineBlock;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.internal.DTTagConverter;
-import org.eclipse.jst.pagedesigner.jsf.ui.JSFUIPlugin;
+import org.eclipse.jst.pagedesigner.editors.palette.TagImageManager;
 import org.eclipse.swt.graphics.Image;
 import org.w3c.dom.Element;
 
@@ -108,24 +112,19 @@
             if (element instanceof ITagConverter)
             {
                 final Element hostElement = ((ITagConverter)element).getHostElement();
-                final String tagName = hostElement.getLocalName();
-                return getJSFCoreSharedImage(tagName);
+                IStructuredDocumentContext context = IStructuredDocumentContextFactory2.INSTANCE.getContext(hostElement);
+                if (context != null){   
+                	IWorkspaceContextResolver wsResolver  = IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(context);
+                	if (wsResolver != null){
+                		return TagImageManager.getInstance().getSmallIconImage(wsResolver.getProject(),ITLDConstants.URI_JSF_CORE, hostElement.getLocalName());
+                	}
+                }
             }
             
             return null;
         }
     }
     
-    /**
-     * @param tagName
-     * @return
-     */
-    private static Image getJSFCoreSharedImage(String tagName)
-    {
-        Image image = JSFUIPlugin.getDefault().getImage("palette/JSFCORE/small/JSF_" + tagName.toUpperCase() + ".gif");
-        return image;
-    }
-
     /* (non-Javadoc)
      * @see org.eclipse.jst.pagedesigner.converter.IConverterFactory#getSupportedURI()
      */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfcore/LoadBundleTagConverter.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfcore/LoadBundleTagConverter.java
index 7608080..7cb56ba 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfcore/LoadBundleTagConverter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfcore/LoadBundleTagConverter.java
@@ -103,17 +103,17 @@
                 PropertyResourceBundle bundle = new PropertyResourceBundle(ins);
                 if (bundle != null)
                 {
-                    if (PreviewUtil.BUNDLE_MAP == null)
+                    if (PreviewUtil.getBUNDLE_MAP() == null)
                     {
-                        PreviewUtil.BUNDLE_MAP = new HashMap();
+                        PreviewUtil.setBUNDLE_MAP(new HashMap());
                     }
                     else
                     {
-                        PreviewUtil.BUNDLE_MAP.clear();
+                        PreviewUtil.getBUNDLE_MAP().clear();
                     }
-                    PreviewUtil.BUNDLE_MAP.put(varString, bundle);
-                    PreviewUtil.BUNDLE = bundle;
-                    PreviewUtil.VAR = varString;
+                    PreviewUtil.getBUNDLE_MAP().put(varString, bundle);
+                    PreviewUtil.setBUNDLE(bundle);
+                    PreviewUtil.setVAR(varString);
                 }
             }
         }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfhtml/JSFHTMLConverterFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfhtml/JSFHTMLConverterFactory.java
index f03337d..5bf099f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfhtml/JSFHTMLConverterFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/jsfhtml/JSFHTMLConverterFactory.java
@@ -15,13 +15,17 @@
 import java.util.Set;
 
 import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory2;
 import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
 import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
 import org.eclipse.jst.pagedesigner.converter.HiddenTagConverter;
 import org.eclipse.jst.pagedesigner.converter.IConverterFactory;
 import org.eclipse.jst.pagedesigner.converter.ITagConverter;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.internal.DTTagConverter;
-import org.eclipse.jst.pagedesigner.jsf.ui.JSFUIPlugin;
+import org.eclipse.jst.pagedesigner.editors.palette.TagImageManager;
 import org.eclipse.swt.graphics.Image;
 import org.w3c.dom.Element;
 
@@ -185,23 +189,19 @@
             if (element instanceof ITagConverter)
             {
                 final Element hostElement = ((ITagConverter)element).getHostElement();
-                final String tagName = hostElement.getLocalName();
-                return getJSFHTMLImage(tagName);
+                IStructuredDocumentContext context = IStructuredDocumentContextFactory2.INSTANCE.getContext(hostElement);
+                if (context != null){   
+                	IWorkspaceContextResolver wsResolver  = IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(context);
+                	if (wsResolver != null){
+                		return TagImageManager.getInstance().getSmallIconImage(wsResolver.getProject(),ITLDConstants.URI_JSF_HTML, hostElement.getLocalName());
+                	}
+                }
             }
             
             return null;
         }
     }
-    
-    /**
-     * @param tagName
-     * @return
-     */
-    private static Image getJSFHTMLImage(String tagName)
-    {
-        Image image = JSFUIPlugin.getDefault().getImage("palette/JSFHTML/small/JSF_" + tagName.toUpperCase() + ".gif");
-        return image;
-    }
+
 
     /* (non-Javadoc)
      * @see org.eclipse.jst.pagedesigner.converter.IConverterFactory#getSupportedURI()
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/LoadBundleOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/LoadBundleOperation.java
index af1d68d..4299133 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/LoadBundleOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/converter/operations/jsf/LoadBundleOperation.java
@@ -90,14 +90,14 @@
 											inputStream = new BufferedInputStream(inputStream);
 											PropertyResourceBundle bundle = new PropertyResourceBundle(inputStream);
 											if (bundle != null) {
-												if (PreviewUtil.BUNDLE_MAP == null) {
-													PreviewUtil.BUNDLE_MAP = new HashMap();
+												if (PreviewUtil.getBUNDLE_MAP() == null) {
+													PreviewUtil.setBUNDLE_MAP(new HashMap());
 												} else {
-													PreviewUtil.BUNDLE_MAP.clear();
+													PreviewUtil.getBUNDLE_MAP().clear();
 												}
-												PreviewUtil.BUNDLE_MAP.put(var, bundle);
-												PreviewUtil.BUNDLE = bundle;
-												PreviewUtil.VAR = var;
+												PreviewUtil.getBUNDLE_MAP().put(var, bundle);
+												PreviewUtil.setBUNDLE(bundle);
+												PreviewUtil.setVAR(var);
 											}
 										}
 									} catch(IOException ioe) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/elementedit/jsfcore/JarEntryEditorInput.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/elementedit/jsfcore/JarEntryEditorInput.java
index f6b5697..17ee5a4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/elementedit/jsfcore/JarEntryEditorInput.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/elementedit/jsfcore/JarEntryEditorInput.java
@@ -51,6 +51,15 @@
         return fJarEntryFile.equals(other.fJarEntryFile);
     }
 
+    
+    @Override
+    public int hashCode() 
+    {
+        // two editor inputs are equal if their fJarEntryFile's are
+        // equal.  Therefore use the same criteria for hashcodes
+        return fJarEntryFile.hashCode();
+    }
+
     /*
      * @see IEditorInput#getPersistable()
      */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/elementedit/jsfhtml/DataTableElementEdit.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/elementedit/jsfhtml/DataTableElementEdit.java
index 113e664..ac60adb 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/elementedit/jsfhtml/DataTableElementEdit.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/elementedit/jsfhtml/DataTableElementEdit.java
@@ -438,7 +438,7 @@
                 DnDPositionValidator validator = 
                     new DnDPositionValidator(new DropActionData(
                             ActionData.COMPONENT_MOVE, dropData));
-                validator.addRule(new OnlyColumnsAndFacetsRule(validator, validator.getActionData()));
+                validator.addRule(new OnlyColumnsAndFacetsRule(validator.getActionData()));
                 return validator;
             }
             return null;
@@ -447,12 +447,10 @@
         private static class OnlyColumnsAndFacetsRule extends DefaultPositionRule
         {
             /**
-             * @param mediator
              * @param actionData
              */
-            public OnlyColumnsAndFacetsRule(IPositionMediator mediator,
-                    ActionData actionData) {
-                super(mediator, actionData);
+            public OnlyColumnsAndFacetsRule(ActionData actionData) {
+                super(actionData);
             }
 
             public boolean isEditable(Target target) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreActionListenerSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreActionListenerSection.java
deleted file mode 100644
index 0995808..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreActionListenerSection.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreActionListenerSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreActionListenerSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_ACTIONLISTENER, 
-                new String[] {
-                	IJSFConstants.ATTR_TYPE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreAttributeSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreAttributeSection.java
deleted file mode 100644
index 2767db4..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreAttributeSection.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreAttributeSection extends AttributeGroupSection
-{    
-    /**
-     * The default constructor
-     */
-    public JSFCoreAttributeSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_ATTRIBUTE, 
-                new String[] {
-                	IJSFConstants.ATTR_NAME,
-                	IJSFConstants.ATTR_VALUE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConvertDateTimeGroup.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConvertDateTimeGroup.java
index 891975f..af64865 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConvertDateTimeGroup.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConvertDateTimeGroup.java
@@ -20,9 +20,9 @@
 import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
 import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
 import org.eclipse.jst.pagedesigner.commands.single.ChangeAttributeCommand;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
 import org.eclipse.jst.pagedesigner.meta.EditorCreator;
-import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroup;
+import org.eclipse.jst.pagedesigner.properties.internal.AttributeGroup;
 import org.eclipse.jst.pagedesigner.ui.dialogfields.DialogFieldWrapper;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 
@@ -32,7 +32,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class JSFCoreConvertDateTimeGroup extends AttributeGroup
+public class JSFCoreConvertDateTimeGroup extends AttributeGroup//AttributeGroup
 {
     private StyleComboDialogField      _typeField;
     private StyleComboDialogField      _dateStyleField;
@@ -65,48 +65,47 @@
                 IJSFConstants.ATTR_DATESTYLE, IJSFConstants.ATTR_TIMESTYLE, IJSFConstants.ATTR_PATTERN});
     }
 
-    protected DialogField createDialogField(String uri, String tag, IAttributeDescriptor attr)
-    {
-        EditorCreator creator = EditorCreator.getInstance();
-        if (attr.getAttributeName().equals(IJSFConstants.ATTR_TYPE))
+    protected DialogField createDialogField(IPropertyPageDescriptor ppd) {
+        EditorCreator creator = EditorCreator.getInstance();        
+        if (ppd.getAttributeName().equals(IJSFConstants.ATTR_TYPE))
         {
             DialogFieldWrapper wrapper = (DialogFieldWrapper) creator
-                    .createDialogFieldWithWrapper(uri, tag, attr, null);
+                    .createDialogFieldWithWrapper(getURI(), getTagName(), ppd, null);
             _typeField = (StyleComboDialogField) wrapper.getWrappedDialogField();
             return wrapper;
         }
-        else if (attr.getAttributeName().equals(IJSFConstants.ATTR_DATESTYLE))
+        else if (ppd.getAttributeName().equals(IJSFConstants.ATTR_DATESTYLE))
         {
             DialogFieldWrapper wrapper = (DialogFieldWrapper) creator
-                    .createDialogFieldWithWrapper(uri, tag, attr, null);
+            	.createDialogFieldWithWrapper(getURI(), getTagName(), ppd, null);
             _dateStyleField = (StyleComboDialogField) wrapper.getWrappedDialogField();
             _dateStyleField.setItems(DATESTYLES);
             return wrapper;
         }
-        else if (attr.getAttributeName().equals(IJSFConstants.ATTR_TIMESTYLE))
+        else if (ppd.getAttributeName().equals(IJSFConstants.ATTR_TIMESTYLE))
         {
             DialogFieldWrapper wrapper = (DialogFieldWrapper) creator
-                    .createDialogFieldWithWrapper(uri, tag, attr, null);
+            	.createDialogFieldWithWrapper(getURI(), getTagName(), ppd, null);
             _timeStyleField = (StyleComboDialogField) wrapper.getWrappedDialogField();
             _timeStyleField.setItems(TIMESTYLES);
             return wrapper;
         }
-        else if (attr.getAttributeName().equals(IJSFConstants.ATTR_PATTERN))
+        else if (ppd.getAttributeName().equals(IJSFConstants.ATTR_PATTERN))
         {
             DialogFieldWrapper wrapper = (DialogFieldWrapper) creator
-                    .createDialogFieldWithWrapper(uri, tag, attr, null);
+            	.createDialogFieldWithWrapper(getURI(), getTagName(), ppd, null);
             _patternField = (StyleComboDialogField) wrapper.getWrappedDialogField();
             return wrapper;
         }
         else
         {
             return null;
-        }
+        }    	
     }
-
-    public IDialogFieldApplyListener getDialogFieldApplyListener(String uri, String tag, IAttributeDescriptor attr)
+    
+    protected IDialogFieldApplyListener getDialogFieldApplyListener(IPropertyPageDescriptor ppd)
     {
-        String attribute = attr.getAttributeName();
+        String attribute = ppd.getAttributeName();
         if (attribute.equals(IJSFConstants.ATTR_TYPE) || attribute.equals(IJSFConstants.ATTR_DATESTYLE)
                 || attribute.equals(IJSFConstants.ATTR_TIMESTYLE))
         {
@@ -162,7 +161,8 @@
             _timeStyleField.setTextWithoutUpdate(timeStyle);
         }
 
-        String pattern = element.getAttribute(IJSFConstants.ATTR_PATTERN);
+        updatePatternItems();
+        String pattern = element.getAttribute(IJSFConstants.ATTR_PATTERN);       
         _patternField.setTextWithoutUpdate(pattern);
 
         updateFieldStatus();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConvertNumberGroup.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConvertNumberGroup.java
index 760847b..3765751 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConvertNumberGroup.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConvertNumberGroup.java
@@ -14,7 +14,6 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ComboDialogField;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldApplyListener;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StringDialogField;
@@ -22,9 +21,9 @@
 import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
 import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
 import org.eclipse.jst.pagedesigner.commands.single.ChangeAttributeCommand;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
 import org.eclipse.jst.pagedesigner.meta.EditorCreator;
-import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroup;
+import org.eclipse.jst.pagedesigner.properties.internal.AttributeGroup;
 import org.eclipse.jst.pagedesigner.ui.dialogfields.DialogFieldWrapper;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 
@@ -35,7 +34,7 @@
 {
     private StyleComboDialogField _typeField;
     private StyleComboDialogField _patternField;
-    private ComboDialogField      _currencyCodeField;
+    private StyleComboDialogField _currencyCodeField;
     private StringDialogField     _currencySymbolField;
 
     final private static String[] TYPES = { "number", "currency", "percentage", "custom" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
@@ -50,35 +49,35 @@
                 IJSFConstants.ATTR_CURRENCYCODE, IJSFConstants.ATTR_CURRENCYSYMBOL, IJSFConstants.ATTR_PATTERN});
     }
 
-    protected DialogField createDialogField(String uri, String tag, IAttributeDescriptor attr)
+    protected DialogField createDialogField(IPropertyPageDescriptor ppd)
     {
-        EditorCreator creator = EditorCreator.getInstance();
-        if (attr.getAttributeName().equals(IJSFConstants.ATTR_TYPE))
+    	EditorCreator creator = EditorCreator.getInstance();
+        if (ppd.getAttributeName().equals(IJSFConstants.ATTR_TYPE))
         {
             DialogFieldWrapper wrapper = (DialogFieldWrapper) creator
-                    .createDialogFieldWithWrapper(uri, tag, attr, null);
+            	.createDialogFieldWithWrapper(getURI(), getTagName(), ppd, null);
             _typeField = (StyleComboDialogField) wrapper.getWrappedDialogField();
                     _typeField.setItems(TYPES);
             return wrapper;
         }
-        else if (attr.getAttributeName().equals(IJSFConstants.ATTR_CURRENCYCODE))
+        else if (ppd.getAttributeName().equals(IJSFConstants.ATTR_CURRENCYCODE))
         {
             DialogFieldWrapper wrapper = (DialogFieldWrapper) creator
-                    .createDialogFieldWithWrapper(uri, tag, attr, null);
-            _currencyCodeField = (ComboDialogField) wrapper.getWrappedDialogField();
+            	.createDialogFieldWithWrapper(getURI(), getTagName(), ppd, null);
+            _currencyCodeField = (StyleComboDialogField) wrapper.getWrappedDialogField();
             return wrapper;
         }
-        else if (attr.getAttributeName().equals(IJSFConstants.ATTR_CURRENCYSYMBOL))
+        else if (ppd.getAttributeName().equals(IJSFConstants.ATTR_CURRENCYSYMBOL))
         {
             DialogFieldWrapper wrapper = (DialogFieldWrapper) creator
-                    .createDialogFieldWithWrapper(uri, tag, attr, null);
+            		.createDialogFieldWithWrapper(getURI(), getTagName(), ppd, null);
             _currencySymbolField = (StringDialogField) wrapper.getWrappedDialogField();
             return wrapper;
         }
-        else if (attr.getAttributeName().equals(IJSFConstants.ATTR_PATTERN))
+        else if (ppd.getAttributeName().equals(IJSFConstants.ATTR_PATTERN))
         {
             DialogFieldWrapper wrapper = (DialogFieldWrapper) creator
-                    .createDialogFieldWithWrapper(uri, tag, attr, null);
+            	.createDialogFieldWithWrapper(getURI(), getTagName(), ppd, null);
             _patternField = (StyleComboDialogField) wrapper.getWrappedDialogField();
             return wrapper;
         }
@@ -88,9 +87,9 @@
         }
     }
 
-    public IDialogFieldApplyListener getDialogFieldApplyListener(String uri, String tag, IAttributeDescriptor attr)
+    public IDialogFieldApplyListener getDialogFieldApplyListener(IPropertyPageDescriptor ppd)
     {
-        String attribute = attr.getAttributeName();
+        String attribute = ppd.getAttributeName();
         if (attribute.equals(IJSFConstants.ATTR_CURRENCYCODE) || attribute.equals(IJSFConstants.ATTR_CURRENCYSYMBOL)
                 || attribute.equals(IJSFConstants.ATTR_PATTERN))
         {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConverterSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConverterSection.java
deleted file mode 100644
index d4eac78..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreConverterSection.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreConverterSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreConverterSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_CONVERTER, 
-                new String[] {
-                	IJSFConstants.ATTR_CONVERTERID
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreFacetSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreFacetSection.java
deleted file mode 100644
index cb840d1..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreFacetSection.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreFacetSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreFacetSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_FACET, 
-                new String[] {
-                	IJSFConstants.ATTR_NAME
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreLoadBundleSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreLoadBundleSection.java
deleted file mode 100644
index 769060c..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreLoadBundleSection.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreLoadBundleSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreLoadBundleSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_LOADBUNDLE, 
-                new String[] {
-                	IJSFConstants.ATTR_BASENAME,
-                	IJSFConstants.ATTR_VAR
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreParamSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreParamSection.java
deleted file mode 100644
index 5794d92..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreParamSection.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreParamSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreParamSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_PARAM, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_NAME,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_BINDING
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreSelectItemSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreSelectItemSection.java
deleted file mode 100644
index e5801c9..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreSelectItemSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreSelectItemSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreSelectItemSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_SELECTITEM, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_ITEMLABEL,
-                	IJSFConstants.ATTR_ITEMVALUE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreSelectItemsSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreSelectItemsSection.java
deleted file mode 100644
index a2390c2..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreSelectItemsSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreSelectItemsSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreSelectItemsSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_SELECTITEMS, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                    IJSFConstants.ATTR_BINDING
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreSubviewSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreSubviewSection.java
deleted file mode 100644
index af1880e..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreSubviewSection.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreSubviewSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreSubviewSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_SUBVIEW, 
-                new String[] {
-                	IJSFConstants.ATTR_ID
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidateDoubleRangeSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidateDoubleRangeSection.java
deleted file mode 100644
index 747a343..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidateDoubleRangeSection.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreValidateDoubleRangeSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreValidateDoubleRangeSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_VALIDATEDOUBLERANGE, 
-                new String[] {
-                	IJSFConstants.ATTR_MINIMUM,
-                	IJSFConstants.ATTR_MAXIMUM
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidateLengthSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidateLengthSection.java
deleted file mode 100644
index 6c60c9d..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidateLengthSection.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreValidateLengthSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreValidateLengthSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_VALIDATELENGTH, 
-                new String[] {
-                	IJSFConstants.ATTR_MINIMUM,
-                	IJSFConstants.ATTR_MAXIMUM
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidateLongRangeSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidateLongRangeSection.java
deleted file mode 100644
index 7933d9c..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidateLongRangeSection.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreValidateLongRangeSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreValidateLongRangeSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_VALIDATELONGRANGE, 
-                new String[] {
-                	IJSFConstants.ATTR_MINIMUM,
-                	IJSFConstants.ATTR_MAXIMUM
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidatorSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidatorSection.java
deleted file mode 100644
index aa9d9bf..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValidatorSection.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreValidatorSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreValidatorSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_VALIDATOR, 
-                new String[] {
-                	IJSFConstants.ATTR_VALIDATORID
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValueChangeListenerSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValueChangeListenerSection.java
deleted file mode 100644
index 0db0344..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreValueChangeListenerSection.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreValueChangeListenerSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreValueChangeListenerSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_VALUECHANGELISTENER, 
-                new String[] {
-                	IJSFConstants.ATTR_TYPE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreVerbatimSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreVerbatimSection.java
deleted file mode 100644
index ec0eea5..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreVerbatimSection.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreVerbatimSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreVerbatimSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_VERBATIM, 
-                new String[] {
-                	IJSFConstants.ATTR_ESCAPE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreViewSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreViewSection.java
deleted file mode 100644
index d08a2f7..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFCoreViewSection.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFCoreViewSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFCoreViewSection()
-    {
-        super(ITLDConstants.URI_JSF_CORE, IJSFConstants.TAG_VIEW, 
-                new String[] {
-                	IJSFConstants.ATTR_LOCALE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlActionListenerSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlActionListenerSection.java
index bd40493..3e3626c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlActionListenerSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlActionListenerSection.java
@@ -45,8 +45,8 @@
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.w3c.dom.Node;
@@ -66,7 +66,7 @@
     private CCombo                _listenTypeCombo;
     private Button                _listenAddButton, _listenRemoveButton;
 
-    private class ListenerCotentLabelProvider implements IStructuredContentProvider, ITableLabelProvider
+    private class ListenerContentLabelProvider implements IStructuredContentProvider, ITableLabelProvider
     {
 
         /* (non-Javadoc)
@@ -111,10 +111,10 @@
         public String getColumnText(Object element, int columnIndex)
         {
             String result = null;
-            if (element instanceof IDOMElement)
+            if (element instanceof Node)
             {
-                IDOMElement node = (IDOMElement) element;
-                String nodeName = node.getNodeName();
+                Node node = (Node) element;
+                String nodeName = getTableNodeName(node, "type");
                 switch (columnIndex)
                 {
                     case 0:
@@ -131,7 +131,17 @@
          * @see org.eclipse.jface.viewers.IContentProvider#dispose()
          */
 
-        public void dispose()
+        private String getTableNodeName(Node node, String ... attrNames) {
+        	for (String attrName : attrNames) {
+        		Node attr = node.getAttributes().getNamedItem(attrName);
+        		if (attr != null && attr.getNodeValue()!= null && 
+        				! attr.getNodeValue().trim().equals(""))
+        			return attr.getNodeValue().trim();
+        	}
+			return node.getNodeName();
+		}
+
+		public void dispose()
         {
             // nothing to dispose
         }
@@ -169,6 +179,9 @@
         }
     }
 
+     /**
+     * Default constructor
+     */
     public JSFHtmlActionListenerSection()
     {
         super();
@@ -206,11 +219,11 @@
 
         TableColumn listenColumn = new TableColumn(_listenersTable, SWT.NONE);
         listenColumn.setText(SectionResources.getString("JSFHtmlCommandButtonSection.Listeners")); //$NON-NLS-1$
-        listenColumn.setWidth(100);
+        listenColumn.setWidth(500);
 
         _listenersViewer = new TableViewer(_listenersTable);
-        _listenersViewer.setContentProvider(new ListenerCotentLabelProvider());
-        _listenersViewer.setLabelProvider(new ListenerCotentLabelProvider());
+        _listenersViewer.setContentProvider(new ListenerContentLabelProvider());
+        _listenersViewer.setLabelProvider(new ListenerContentLabelProvider());
         _listenersViewer.addDoubleClickListener(new IDoubleClickListener()
         {
             public void doubleClick(DoubleClickEvent event)
@@ -298,7 +311,8 @@
     {
         super.setInput(part, selection);
         _element = (IDOMElement) DesignerPropertyTool.getElement(part, selection);
-        _listenersViewer.setInput(_element);
+        if (_listenersViewer != null)
+        	_listenersViewer.setInput(_element);
     }
 
     protected void notifyChanged(INodeNotifier notifier, int eventType, Object changedFeature, Object oldValue, Object newValue, int pos)
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlColumnSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlColumnSection.java
deleted file mode 100644
index 6791f46..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlColumnSection.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlColumnSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFHtmlColumnSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_COLUMN, 
-                new String[] {
-                	IJSFConstants.ATTR_ID
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlCommandButtonSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlCommandButtonSection.java
deleted file mode 100644
index 9abaf11..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlCommandButtonSection.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlCommandButtonSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFHtmlCommandButtonSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_COMMANDBUTTON, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                    IJSFConstants.ATTR_VALUE,
-                    IJSFConstants.ATTR_ACTION,
-                    IJSFConstants.ATTR_ACTIONLISTENER,
-                    IJSFConstants.ATTR_TYPE,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlCommandLinkSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlCommandLinkSection.java
deleted file mode 100644
index 320c4bf..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlCommandLinkSection.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlCommandLinkSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFHtmlCommandLinkSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_COMMANDLINK, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_ACTION,
-                    IJSFConstants.ATTR_ACTIONLISTENER,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlDataTableColumnsSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlDataTableColumnsSection.java
index d284853..92bd788 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlDataTableColumnsSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlDataTableColumnsSection.java
@@ -45,8 +45,8 @@
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.w3c.dom.Node;
@@ -62,9 +62,9 @@
     private TableViewer            _columnsViewer;
     private Button                 _addButton, _removeButton, _moveUpButton, _moveDownButton;
 
-    final private String           DEFAULT_COLUMN_NAME = "column"; //$NON-NLS-1$
-    final private String           DEFAULT_FACET_NAME  = "header"; //$NON-NLS-1$
-    final private String           DEFAULT_TEXT_NAME   = "text"; //$NON-NLS-1$
+    final static private String           DEFAULT_COLUMN_NAME = "column"; //$NON-NLS-1$
+    final static private String           DEFAULT_FACET_NAME  = "header"; //$NON-NLS-1$
+    final static private String           DEFAULT_TEXT_NAME   = "text"; //$NON-NLS-1$
 
     class ColumnCotentLabelProvider implements IStructuredContentProvider, ITableLabelProvider
     {
@@ -169,6 +169,9 @@
 
     }
 
+    /**
+     * default constructor
+     */
     public JSFHtmlDataTableColumnsSection()
     {
         super();
@@ -331,8 +334,11 @@
         }
         );
     }
-
-    public void updateButtonStatus()
+    
+    /**
+     * Update the button status
+     */
+    private void updateButtonStatus()
     {
         _removeButton.setEnabled(true);
         _moveUpButton.setEnabled(true);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlDataTableSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlDataTableSection.java
deleted file mode 100644
index 89bbeb3..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlDataTableSection.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlDataTableSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFHtmlDataTableSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_DATATABLE, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                    IJSFConstants.ATTR_VAR,
-                	IJSFConstants.ATTR_WIDTH,
-                	IJSFConstants.ATTR_BORDER,
-                	IJSFConstants.ATTR_BGCOLOR,
-                    IJSFConstants.ATTR_STYLE,
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlFormSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlFormSection.java
deleted file mode 100644
index 1fe391d..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlFormSection.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlFormSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-   public JSFHtmlFormSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_FORM, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlGraphicImageSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlGraphicImageSection.java
deleted file mode 100644
index 3475f7b..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlGraphicImageSection.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlGraphicImageSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFHtmlGraphicImageSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_GRAPHICIMAGE, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                    IJSFConstants.ATTR_VALUE,
-                    IJSFConstants.ATTR_URL,
-                    IJSFConstants.ATTR_BINDING,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputHiddenSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputHiddenSection.java
deleted file mode 100644
index 04c47b2..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputHiddenSection.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlInputHiddenSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFHtmlInputHiddenSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_INPUTHIDDEN, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputHiddenTypeSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputHiddenTypeSection.java
index e5bba5f..77c1be1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputHiddenTypeSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputHiddenTypeSection.java
@@ -25,8 +25,8 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 
 /**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputOthersSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputOthersSection.java
index 55a7efa..2da1a53 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputOthersSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputOthersSection.java
@@ -51,8 +51,8 @@
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.w3c.dom.Node;
@@ -80,7 +80,7 @@
     final private static String[] VALIDATORS_COLUMN_NAMES = { IJSFConstants.TAG_VALIDATOR, IJSFConstants.ATTR_MINIMUM,
             IJSFConstants.ATTR_MAXIMUM                    };
 
-    private class ValidateCotentLabelProvider implements IStructuredContentProvider, ITableLabelProvider
+    private class ValidateContentLabelProvider implements IStructuredContentProvider, ITableLabelProvider
     {
 
         /* (non-Javadoc)
@@ -259,12 +259,13 @@
                 default:
                     break;
             }
-            _validatorsViewer.setInput(_element);
+            _validatorsViewer.refresh();
+//            _validatorsViewer.setInput(_element);
             updateValidateButtonStatus();
         }
     }
 
-    private class ConvertCotentLabelProvider implements IStructuredContentProvider, ITableLabelProvider
+    private class ConvertContentLabelProvider implements IStructuredContentProvider, ITableLabelProvider
     {
 
         /* (non-Javadoc)
@@ -367,7 +368,7 @@
         }
     }
 
-    private class ListenerCotentLabelProvider implements IStructuredContentProvider, ITableLabelProvider
+    private class ListenerContentLabelProvider implements IStructuredContentProvider, ITableLabelProvider
     {
 
         /* (non-Javadoc)
@@ -513,11 +514,11 @@
 
         TableColumn convertColumn = new TableColumn(_convertorsTable, SWT.NONE);
         convertColumn.setText(SectionResources.getString("JSFHtmlInputTextSection.Converter")); //$NON-NLS-1$
-        convertColumn.setWidth(100);
+        convertColumn.setWidth(150);
 
         _convertorsViewer = new TableViewer(_convertorsTable);
-        _convertorsViewer.setContentProvider(new ConvertCotentLabelProvider());
-        _convertorsViewer.setLabelProvider(new ConvertCotentLabelProvider());
+        _convertorsViewer.setContentProvider(new ConvertContentLabelProvider());
+        _convertorsViewer.setLabelProvider(new ConvertContentLabelProvider());
         _convertorsViewer.addDoubleClickListener(new IDoubleClickListener()
         {
             public void doubleClick(DoubleClickEvent event)
@@ -604,11 +605,11 @@
 
         TableColumn listenColumn = new TableColumn(_listenersTable, SWT.NONE);
         listenColumn.setText(SectionResources.getString("JSFHtmlInputTextSection.Listeners")); //$NON-NLS-1$
-        listenColumn.setWidth(100);
+        listenColumn.setWidth(150);
 
         _listenersViewer = new TableViewer(_listenersTable);
-        _listenersViewer.setContentProvider(new ListenerCotentLabelProvider());
-        _listenersViewer.setLabelProvider(new ListenerCotentLabelProvider());
+        _listenersViewer.setContentProvider(new ListenerContentLabelProvider());
+        _listenersViewer.setLabelProvider(new ListenerContentLabelProvider());
         _listenersViewer.addDoubleClickListener(new IDoubleClickListener()
         {
             public void doubleClick(DoubleClickEvent event)
@@ -696,15 +697,15 @@
 
         TableColumn validateColumn = new TableColumn(_validatorsTable, SWT.NONE);
         validateColumn.setText(SectionResources.getString("JSFHtmlInputTextSection.Validators")); //$NON-NLS-1$
-        validateColumn.setWidth(50);
+        validateColumn.setWidth(150);
 
         TableColumn minColumn = new TableColumn(_validatorsTable, SWT.NONE);
         minColumn.setText(SectionResources.getString("JSFHtmlInputTextSection.Minimum")); //$NON-NLS-1$
-        minColumn.setWidth(50);
+        minColumn.setWidth(100);
 
         TableColumn maxColumn = new TableColumn(_validatorsTable, SWT.NONE);
         maxColumn.setText(SectionResources.getString("JSFHtmlInputTextSection.Maximum")); //$NON-NLS-1$
-        maxColumn.setWidth(50);
+        maxColumn.setWidth(100);
 
         _validatorsViewer = new TableViewer(_validatorsTable);
         _validatorsViewer.setColumnProperties(VALIDATORS_COLUMN_NAMES);
@@ -719,8 +720,8 @@
 
         _validatorsViewer.setCellEditors(editors);
         _validatorsViewer.setCellModifier(new ValidateCellModifier());
-        _validatorsViewer.setContentProvider(new ValidateCotentLabelProvider());
-        _validatorsViewer.setLabelProvider(new ValidateCotentLabelProvider());
+        _validatorsViewer.setContentProvider(new ValidateContentLabelProvider());
+        _validatorsViewer.setLabelProvider(new ValidateContentLabelProvider());
         _validatorsViewer.addDoubleClickListener(new IDoubleClickListener()
         {
             public void doubleClick(DoubleClickEvent event)
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputSecretSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputSecretSection.java
deleted file mode 100644
index 7f7b212..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputSecretSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlInputSecretSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor
-     */
-    public JSFHtmlInputSecretSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_INPUTSECRET, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputSecretTypeSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputSecretTypeSection.java
index e1eda9f..76b49ea 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputSecretTypeSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputSecretTypeSection.java
@@ -25,8 +25,8 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 
 /**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextSection.java
deleted file mode 100644
index 2360ee2..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlInputTextSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlInputTextSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_INPUTTEXT, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextTypeSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextTypeSection.java
index d757e07..26befdf 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextTypeSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextTypeSection.java
@@ -25,8 +25,8 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 
 /**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextareaSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextareaSection.java
deleted file mode 100644
index bb4f5c9..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextareaSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlInputTextareaSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlInputTextareaSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_INPUTTEXTAREA, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextareaTypeSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextareaTypeSection.java
index dab7f97..8c70c1a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextareaTypeSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlInputTextareaTypeSection.java
@@ -25,8 +25,8 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 
 /**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlMessageSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlMessageSection.java
deleted file mode 100644
index 8476673..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlMessageSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlMessageSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlMessageSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_MESSAGE, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_FOR,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlMessagesSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlMessagesSection.java
deleted file mode 100644
index 14cdabc..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlMessagesSection.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlMessagesSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlMessagesSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_MESSAGES, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_LAYOUT,
-                	IJSFConstants.ATTR_GLOBEONLY,
-                    IJSFConstants.ATTR_STYLE,
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputFormatParamsSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputFormatParamsSection.java
index 403fe09..1d307cf 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputFormatParamsSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputFormatParamsSection.java
@@ -51,8 +51,8 @@
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.w3c.dom.Node;
@@ -242,6 +242,9 @@
         }
     }
 
+    /**
+     * Default constructor
+     */
     public JSFHtmlOutputFormatParamsSection()
     {
         super();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputFormatSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputFormatSection.java
deleted file mode 100644
index 5011d60..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputFormatSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlOutputFormatSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlOutputFormatSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_OUTPUTFORMAT, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputLabelSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputLabelSection.java
deleted file mode 100644
index 17fb072..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputLabelSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlOutputLabelSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlOutputLabelSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_OUTPUTLABEL, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_FOR,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputLinkSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputLinkSection.java
deleted file mode 100644
index 338b7ad..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputLinkSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlOutputLinkSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlOutputLinkSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_OUTPUTLINK, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputTextConverterSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputTextConverterSection.java
index f35fb1f..718dddc 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputTextConverterSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputTextConverterSection.java
@@ -44,8 +44,8 @@
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.w3c.dom.Node;
@@ -171,6 +171,9 @@
 
     }
 
+    /**
+     * Default constructor
+     */
     public JSFHtmlOutputTextConverterSection()
     {
         super();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputTextSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputTextSection.java
deleted file mode 100644
index e46317c..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlOutputTextSection.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlOutputTextSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlOutputTextSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_OUTPUTTEXT, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                    IJSFConstants.ATTR_BINDING,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlPanelGridSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlPanelGridSection.java
deleted file mode 100644
index 1c92da3..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlPanelGridSection.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlPanelGridSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlPanelGridSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_PANELGRID, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                    IJSFConstants.ATTR_COLUMNS,
-                    IJSFConstants.ATTR_BORDER,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlPanelGroupSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlPanelGroupSection.java
deleted file mode 100644
index a997931..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlPanelGroupSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlPanelGroupSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlPanelGroupSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_PANELGROUP, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectBooleanCheckboxSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectBooleanCheckboxSection.java
deleted file mode 100644
index 28c358d..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectBooleanCheckboxSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlSelectBooleanCheckboxSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlSelectBooleanCheckboxSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_SELECTBOOLEANCHECKBOX, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectChoicesSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectChoicesSection.java
index 4eb9eeb..7f2be0e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectChoicesSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectChoicesSection.java
@@ -17,7 +17,9 @@
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.ICellModifier;
 import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ILabelProviderListener;
 import org.eclipse.jface.viewers.ISelection;
@@ -27,10 +29,12 @@
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
 import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
 import org.eclipse.jst.pagedesigner.commands.single.AddSubNodeCommand;
+import org.eclipse.jst.pagedesigner.commands.single.ChangeAttributeCommand;
 import org.eclipse.jst.pagedesigner.commands.single.InsertSubNodeCommand;
 import org.eclipse.jst.pagedesigner.commands.single.RemoveSubNodeCommand;
 import org.eclipse.jst.pagedesigner.properties.BaseCustomSection;
@@ -45,9 +49,10 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.w3c.dom.Node;
@@ -64,6 +69,7 @@
     private TableViewer           _choiceViewer;
     private CCombo                _choiceTypeCombo;
     private Button                _choiceAddButton, _choiceRemoveButton, _choiceMoveUpButton, _choiceMoveDownButton;
+    private static final String[] COLUMN_NAMES = new String[] {"choices","itemLabel", "itemValue", "id"};
 
     private class ChoiceCotentLabelProvider implements IStructuredContentProvider, ITableLabelProvider
     {
@@ -71,19 +77,19 @@
         /* (non-Javadoc)
          * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
          */
-        public Object[] getElements(Object inputElement)
+        public Object[] getElements(final Object inputElement)
         {
-            IDOMElement root = _element;
-            List result = new ArrayList();
+            final IDOMElement root = _element;
+            final List result = new ArrayList();
 
-            NodeList children = root.getChildNodes();
+            final NodeList children = root.getChildNodes();
             for (int i = 0, n = children.getLength(); i < n; i++)
             {
-                Node child = children.item(i);
+                final Node child = children.item(i);
                 if (child.getNodeType() == Node.ELEMENT_NODE)
                 {
-                    IDOMElement element = (IDOMElement) child;
-                    String nodeName = element.getNodeName();
+                    final IDOMElement element = (IDOMElement) child;
+                    final String nodeName = element.getNodeName();
                     if (nodeName.indexOf("select") != -1) //$NON-NLS-1$
                     {
                         result.add(child);
@@ -102,84 +108,96 @@
         /* (non-Javadoc)
          * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
          */
-        public void inputChanged(Viewer viewer, Object oldInput, Object newInput)
+        public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput)
         {
             // do nothing
         }
 
-        public String getColumnText(Object element, int columnIndex)
+        public String getColumnText(final Object element, final int columnIndex)
         {
             String result = null;
-            if (element instanceof IDOMElement)
+            if (element instanceof Node)
             {
-                IDOMElement node = (IDOMElement) element;
-                String nodeName = node.getNodeName();
+                final Node node = (Node) element;
+                Node attrNode = null;
+                String attrName = null;
+                if (columnIndex == 1)
+                {
+                    attrName = "itemLabel";
+                }
+                else if (columnIndex == 2)
+                {
+                    attrName = "itemValue";
+                }
+                else if (columnIndex == 3)
+                {
+                    attrName = "id";
+                }
+
                 switch (columnIndex)
                 {
                     case 0:
-                        result = nodeName;
+                        result = node.getNodeName();
                         break;
                     default:
-                        break;
+                    {
+                        attrNode = node.getAttributes().getNamedItem(attrName);
+                        if (attrNode != null)
+                        {
+                            result = attrNode.getNodeValue()!=null ? attrNode.getNodeValue() : " - ";
+                        }
+                        else
+                        {
+                            result = " - ";
+                        }
+                    }
                 }
             }
             return result != null ? result : ""; //$NON-NLS-1$
         }
 
-        /* (non-Javadoc)
-         * @see org.eclipse.jface.viewers.IContentProvider#dispose()
-         */
-
         public void dispose()
         {
             // do nothing
         }
 
-        /* (non-Javadoc)
-         * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
-         */
-        public Image getColumnImage(Object element, int columnIndex)
+        public Image getColumnImage(final Object element, final int columnIndex)
         {
             return null;
         }
 
-        /* (non-Javadoc)
-         * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
-         */
-        public void addListener(ILabelProviderListener listener)
+        public void addListener(final ILabelProviderListener listener)
         {
             // TODO: no support for listeners?
         }
 
-        /* (non-Javadoc)
-         * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
-         */
-        public boolean isLabelProperty(Object element, String property)
+        public boolean isLabelProperty(final Object element, final String property)
         {
             return false;
         }
 
-        /* (non-Javadoc)
-         * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
-         */
-        public void removeListener(ILabelProviderListener listener)
+        public void removeListener(final ILabelProviderListener listener)
         {
             // TODO: no support for listeners?
         }
     }
 
+    /**
+     * Default constructor
+     */
     public JSFHtmlSelectChoicesSection()
     {
         super();
     }
 
-    public void createControls(Composite parent, TabbedPropertySheetPage aTabbedPropertySheetPage)
+    @Override
+    public void createControls(final Composite parent, final TabbedPropertySheetPage aTabbedPropertySheetPage)
     {
         super.createControls(parent, aTabbedPropertySheetPage);
-        TabbedPropertySheetWidgetFactory factory = aTabbedPropertySheetPage.getWidgetFactory();
-        Composite top = factory.createFlatFormComposite(parent);
+        final TabbedPropertySheetWidgetFactory factory = aTabbedPropertySheetPage.getWidgetFactory();
+        final Composite top = factory.createFlatFormComposite(parent);
 
-        GridLayout layout = new GridLayout();
+        final GridLayout layout = new GridLayout();
         layout.numColumns = 4;
         top.setLayout(layout);
 
@@ -190,7 +208,7 @@
      * @param factory
      * @param other
      */
-    private void createChoicePart(TabbedPropertySheetWidgetFactory factory, Composite other)
+    private void createChoicePart(final TabbedPropertySheetWidgetFactory factory, final Composite other)
     {
         GridData data;
         _choiceTable = factory.createTable(other, SWT.FULL_SELECTION | SWT.MULTI);
@@ -202,28 +220,86 @@
         _choiceTable.setLayoutData(data);
         _choiceTable.setLinesVisible(true);
 
-        TableColumn choiceColumn = new TableColumn(_choiceTable, SWT.NONE);
+        final TableColumn choiceColumn = new TableColumn(_choiceTable, SWT.NONE);
         choiceColumn.setText(SectionResources.getString("JSFHtmlSelectManyCheckboxSection.Choices")); //$NON-NLS-1$
         choiceColumn.setWidth(100);
 
+        final TableColumn labelColumn = new TableColumn(_choiceTable, SWT.NONE);
+        labelColumn.setText("itemLabel");
+        labelColumn.setWidth(100);
+
+        final TableColumn valueColumn = new TableColumn(_choiceTable, SWT.NONE);
+        valueColumn.setText("itemValue");
+        valueColumn.setWidth(100);
+
+        final TableColumn idColumn = new TableColumn(_choiceTable, SWT.NONE);
+        idColumn.setText("id");
+        idColumn.setWidth(100);
+
         _choiceViewer = new TableViewer(_choiceTable);
+        _choiceViewer.setColumnProperties(COLUMN_NAMES );
+        final CellEditor[] editors = new CellEditor[4];
+        TextCellEditor textEditor = new TextCellEditor(_choiceTable);
+        editors[0] = textEditor;
+        textEditor = new TextCellEditor(_choiceTable);
+        editors[1] = textEditor;
+        textEditor = new TextCellEditor(_choiceTable);
+        editors[2] = textEditor;
+        textEditor = new TextCellEditor(_choiceTable);
+        editors[3] = textEditor;
+
+        _choiceViewer.setCellEditors(editors);
+        _choiceViewer.setCellModifier(new ICellModifier(){
+
+            public boolean canModify(final Object element, final String property) {
+                final IDOMElement node = (IDOMElement)element;
+                if (node.getLocalName().equals("selectItem"))
+                {
+                    return ! property.equals("choices");
+                }
+
+                return property.equals("id");
+            }
+
+            public Object getValue(final Object element, final String property) {
+                final IDOMElement node = (IDOMElement) element;
+                final String val = node.getAttribute(property) != null ? node.getAttribute(property) : "";
+                return val;
+            }
+
+            public void modify(final Object element, final String property, final Object value) {
+
+                final TableItem item = (TableItem) element;
+                final IDOMElement node = (IDOMElement) item.getData();
+                String valueString;
+                ChangeAttributeCommand c;
+
+                valueString = ((String) value).trim();
+                c = new ChangeAttributeCommand(
+                        SectionResources.getString("JSFHtmlInputTextSection.CommandLabel.ChangeAttribute"), node, property, valueString); //$NON-NLS-1$
+                c.execute();
+
+                _choiceViewer.refresh();
+            }
+
+        });
         _choiceViewer.setContentProvider(new ChoiceCotentLabelProvider());
         _choiceViewer.setLabelProvider(new ChoiceCotentLabelProvider());
         _choiceViewer.addDoubleClickListener(new IDoubleClickListener()
         {
-            public void doubleClick(DoubleClickEvent event)
+            public void doubleClick(final DoubleClickEvent event)
             {
-                IStructuredSelection selection = (IStructuredSelection) event.getSelection();
+                final IStructuredSelection selection = (IStructuredSelection) event.getSelection();
                 if (selection != null)
                 {
-                    IDOMElement node = (IDOMElement) selection.getFirstElement();
+                    final IDOMElement node = (IDOMElement) selection.getFirstElement();
                     gotoNode(node);
                 }
             }
         });
         _choiceViewer.addSelectionChangedListener(new ISelectionChangedListener()
         {
-            public void selectionChanged(SelectionChangedEvent event)
+            public void selectionChanged(final SelectionChangedEvent event)
             {
                 updateChoiceButtonStatus();
             }
@@ -241,10 +317,11 @@
         _choiceAddButton.setLayoutData(data);
         _choiceAddButton.addSelectionListener(new SelectionAdapter()
         {
-            public void widgetSelected(SelectionEvent e)
+            @Override
+            public void widgetSelected(final SelectionEvent e)
             {
-                Map attributes = new HashMap();
-                AddSubNodeCommand c = new AddSubNodeCommand(
+                final Map attributes = new HashMap();
+                final AddSubNodeCommand c = new AddSubNodeCommand(
                         SectionResources.getString("JSFHtmlSelectManyCheckboxSection.CommandLabel.AddSubTag"), _element, _choiceTypeCombo.getText(), //$NON-NLS-1$
                         ITLDConstants.URI_JSF_CORE, attributes);
                 c.execute();
@@ -258,17 +335,18 @@
         _choiceRemoveButton.setLayoutData(data);
         _choiceRemoveButton.addSelectionListener(new SelectionAdapter()
         {
-            public void widgetSelected(SelectionEvent e)
+            @Override
+            public void widgetSelected(final SelectionEvent e)
             {
-                IStructuredSelection selection = (IStructuredSelection) _choiceViewer.getSelection();
+                final IStructuredSelection selection = (IStructuredSelection) _choiceViewer.getSelection();
                 if (selection != null)
                 {
-                    for (Iterator i = selection.iterator(); i.hasNext();)
+                    for (final Iterator i = selection.iterator(); i.hasNext();)
                     {
-                        IDOMElement node = (IDOMElement) i.next();
-                        RemoveSubNodeCommand c = new RemoveSubNodeCommand(
+                        final IDOMElement node = (IDOMElement) i.next();
+                        final RemoveSubNodeCommand c = new RemoveSubNodeCommand(
                                 SectionResources
-                                        .getString("JSFHtmlSelectManyCheckboxSection.CommandLabel.RemoveSubTag"), _element, node); //$NON-NLS-1$
+                                .getString("JSFHtmlSelectManyCheckboxSection.CommandLabel.RemoveSubTag"), _element, node); //$NON-NLS-1$
                         c.execute();
                     }
                     _choiceViewer.refresh();
@@ -282,15 +360,16 @@
         _choiceMoveUpButton.setLayoutData(data);
         _choiceMoveUpButton.addSelectionListener(new SelectionAdapter()
         {
-            public void widgetSelected(SelectionEvent e)
+            @Override
+            public void widgetSelected(final SelectionEvent e)
             {
-                int index = _choiceTable.getSelectionIndex();
-                IDOMElement child = (IDOMElement) _choiceTable.getItem(index).getData();
-                IDOMElement refchild = (IDOMElement) _choiceTable.getItem(index - 1).getData();
-                RemoveSubNodeCommand remove = new RemoveSubNodeCommand(SectionResources
+                final int index = _choiceTable.getSelectionIndex();
+                final IDOMElement child = (IDOMElement) _choiceTable.getItem(index).getData();
+                final IDOMElement refchild = (IDOMElement) _choiceTable.getItem(index - 1).getData();
+                final RemoveSubNodeCommand remove = new RemoveSubNodeCommand(SectionResources
                         .getString("JSFHtmlSelectManyCheckboxSection.CommandLabel.RemoveSubTag"), _element, child); //$NON-NLS-1$
                 remove.execute();
-                InsertSubNodeCommand insert = new InsertSubNodeCommand(
+                final InsertSubNodeCommand insert = new InsertSubNodeCommand(
                         SectionResources.getString("JSFHtmlSelectManyCheckboxSection.CommandLabel.InsertSubTag"), _element, child, refchild); //$NON-NLS-1$
                 insert.execute();
                 _choiceViewer.refresh();
@@ -304,15 +383,16 @@
         _choiceMoveDownButton.setLayoutData(data);
         _choiceMoveDownButton.addSelectionListener(new SelectionAdapter()
         {
-            public void widgetSelected(SelectionEvent e)
+            @Override
+            public void widgetSelected(final SelectionEvent e)
             {
-                int index = _choiceTable.getSelectionIndex();
-                IDOMElement child = (IDOMElement) _choiceTable.getItem(index).getData();
-                IDOMElement refchild = (IDOMElement) _choiceTable.getItem(index + 1).getData();
-                RemoveSubNodeCommand remove = new RemoveSubNodeCommand(SectionResources
+                final int index = _choiceTable.getSelectionIndex();
+                final IDOMElement child = (IDOMElement) _choiceTable.getItem(index).getData();
+                final IDOMElement refchild = (IDOMElement) _choiceTable.getItem(index + 1).getData();
+                final RemoveSubNodeCommand remove = new RemoveSubNodeCommand(SectionResources
                         .getString("JSFHtmlSelectManyCheckboxSection.CommandLabel.RemoveSubTag"), _element, refchild); //$NON-NLS-1$
                 remove.execute();
-                InsertSubNodeCommand insert = new InsertSubNodeCommand(
+                final InsertSubNodeCommand insert = new InsertSubNodeCommand(
                         SectionResources.getString("JSFHtmlSelectManyCheckboxSection.CommandLabel.InsertSubTag"), _element, refchild, child); //$NON-NLS-1$
                 insert.execute();
                 _choiceViewer.refresh();
@@ -327,7 +407,7 @@
         _choiceRemoveButton.setEnabled(true);
         _choiceMoveUpButton.setEnabled(true);
         _choiceMoveDownButton.setEnabled(true);
-        ISelection selection = _choiceViewer.getSelection();
+        final ISelection selection = _choiceViewer.getSelection();
         if (selection.isEmpty())
         {
             _choiceRemoveButton.setEnabled(false);
@@ -355,7 +435,8 @@
         }
     }
 
-    public void setInput(IWorkbenchPart part, ISelection selection)
+    @Override
+    public void setInput(final IWorkbenchPart part, final ISelection selection)
     {
         super.setInput(part, selection);
 
@@ -363,8 +444,9 @@
         updateChoiceButtonStatus();
     }
 
-    protected void notifyChanged(INodeNotifier notifier, int eventType, Object changedFeature, Object oldValue,
-            Object newValue, int pos)
+    @Override
+    protected void notifyChanged(final INodeNotifier notifier, final int eventType, final Object changedFeature, final Object oldValue,
+            final Object newValue, final int pos)
     {
         if (_choiceViewer != null && !_choiceViewer.getControl().isDisposed())
         {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectManyCheckboxSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectManyCheckboxSection.java
deleted file mode 100644
index add7c7e..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectManyCheckboxSection.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlSelectManyCheckboxSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlSelectManyCheckboxSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_SELECTMANYCHECKBOX, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                    IJSFConstants.ATTR_LAYOUT,
-                	IJSFConstants.ATTR_STYLE,
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectManyListboxSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectManyListboxSection.java
deleted file mode 100644
index 8ab6d1c..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectManyListboxSection.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlSelectManyListboxSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlSelectManyListboxSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_SELECTMANYLISTBOX, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_SIZE,
-                    IJSFConstants.ATTR_STYLE,
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectManyMenuSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectManyMenuSection.java
deleted file mode 100644
index be99523..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectManyMenuSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlSelectManyMenuSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlSelectManyMenuSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_SELECTMANYMENU, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectOneListboxSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectOneListboxSection.java
deleted file mode 100644
index 47ae386..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectOneListboxSection.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlSelectOneListboxSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlSelectOneListboxSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_SELECTONELISTBOX, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                    IJSFConstants.ATTR_SIZE,
-                	IJSFConstants.ATTR_STYLE,
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectOneMenuSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectOneMenuSection.java
deleted file mode 100644
index 1d4965e..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectOneMenuSection.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlSelectOneMenuSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlSelectOneMenuSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_SELECTONEMENU, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                	IJSFConstants.ATTR_STYLE
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectOneRadioSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectOneRadioSection.java
deleted file mode 100644
index d6b8362..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsf.ui/src/org/eclipse/jst/pagedesigner/jsf/ui/sections/JSFHtmlSelectOneRadioSection.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- * Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.jsf.ui.sections;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-
-/**
- * @author mengbo
- */
-public class JSFHtmlSelectOneRadioSection extends AttributeGroupSection
-{
-    /**
-     * The default constructor 
-     */
-    public JSFHtmlSelectOneRadioSection()
-    {
-        super(ITLDConstants.URI_JSF_HTML, IJSFConstants.TAG_SELECTONERADIO, 
-                new String[] {
-                	IJSFConstants.ATTR_ID,
-                	IJSFConstants.ATTR_VALUE,
-                    IJSFConstants.ATTR_LAYOUT,
-                	IJSFConstants.ATTR_STYLE,
-                });
-    }
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/META-INF/MANIFEST.MF
index 5bee6c5..ea07686 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.pagedesigner.jsp.core;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.jst.pagedesigner.jsp.core.JSPCorePlugin
 Bundle-Vendor: %providerName
@@ -16,11 +16,10 @@
  javax.servlet;bundle-version="[2.4.0,3.0.0)",
  javax.servlet.jsp;bundle-version="[2.0.0,3.0.0)",
  org.apache.commons.el;bundle-version="[1.0.0,2.0.0)"
-Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
 Bundle-ManifestVersion: 2
 Export-Package: org.eclipse.jst.pagedesigner.jsp.core;x-internal:=true,
  org.eclipse.jst.pagedesigner.jsp.core.el;x-internal:=true,
- org.eclipse.jst.pagedesigner.jsp.core.internal.metadata;x-internal:=true,
  org.eclipse.jst.pagedesigner.jsp.core.internal.pagevar;x-internal:=true,
  org.eclipse.jst.pagedesigner.jsp.core.pagevar;x-internal:=true,
  org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter;x-internal:=true,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/build.properties b/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/build.properties
index 806d43f..f912bf1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/build.properties
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/build.properties
@@ -13,11 +13,8 @@
 bin.includes = plugin.xml,\
                META-INF/,\
                .,\
-               lib/,\
                schema/,\
                about.html,\
-               plugin.properties,\
-               metadata/,\
-               icons/
+               plugin.properties\                         
 javacSource=1.5
 javacTarget=1.5
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/plugin.xml b/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/plugin.xml
index 797f39e..57f4510 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/plugin.xml
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner.jsp.core/plugin.xml
@@ -2,31 +2,4 @@
 <?eclipse version="3.0"?>
 <plugin>
    <extension-point id="pageVar" name="page variable" schema="schema/pageVar.exsd"/>
-   <extension
-       point="org.eclipse.jst.jsf.common.standardMetaDataFiles">
-    <standardMetaDataFile
-          location="/metadata/jsp11.xml"
-          uri="JSP11">
-    </standardMetaDataFile>
-   </extension>
-   <extension
-         point="org.eclipse.jst.jsf.common.domainSourceModelTypeTranslators">
-    <domainSourceModelTypeTranslator
-          domainSourceModelTypeId="TaglibContentModelHandler"
-          translatorClass="org.eclipse.jst.pagedesigner.jsp.core.internal.metadata.JSPContentModelMetaDataTranslator">
-    </domainSourceModelTypeTranslator>
-    <domainSourceModelTypeTranslator
-          domainSourceModelTypeId="TaglibContentModelHandler"
-          translatorClass="org.eclipse.jst.pagedesigner.jsp.core.internal.metadata.TaglibMetaDataTLDTranslator">
-    </domainSourceModelTypeTranslator>    
-   </extension>
-   <extension
-         point="org.eclipse.jst.jsf.common.domainSourceModelTypes">
-      <domainSourceModelTypes
-            domainId="TagLibraryDomain"
-            domainSourceModelTypeId="TaglibContentModelHandler"
-            locator="org.eclipse.jst.pagedesigner.jsp.core.internal.metadata.TaglibMetaDataLocator"
-            ordinal="0">
-      </domainSourceModelTypes>
-   </extension>
 </plugin>
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/.settings/org.eclipse.jdt.core.prefs b/jsf/plugins/org.eclipse.jst.pagedesigner/.settings/org.eclipse.jdt.core.prefs
index 180cc29..fc050cb 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/.settings/org.eclipse.jdt.core.prefs
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue Apr 10 12:17:37 PDT 2007
+#Fri Dec 14 11:18:54 PST 2007
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
@@ -27,7 +27,7 @@
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
-org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
+org.eclipse.jdt.core.compiler.problem.invalidJavadoc=error
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=disabled
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=disabled
@@ -53,6 +53,7 @@
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
@@ -65,13 +66,16 @@
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=error
 org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.5
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/META-INF/MANIFEST.MF b/jsf/plugins/org.eclipse.jst.pagedesigner/META-INF/MANIFEST.MF
index 114dbc9..2393d2c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/META-INF/MANIFEST.MF
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/META-INF/MANIFEST.MF
@@ -1,25 +1,24 @@
 Manifest-Version: 1.0
 Bundle-SymbolicName: org.eclipse.jst.pagedesigner;singleton:=true
 Bundle-Name: %pluginName
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.1.qualifier
 Bundle-Activator: org.eclipse.jst.pagedesigner.PDPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.emf.ecore;bundle-version="[2.2.0,2.4.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.2.0,3.0.0)",
  org.eclipse.gef;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui.workbench.texteditor;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.wst.common.ui;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.wst.common.uriresolver;bundle-version="[1.1.0,1.2.0)",
- org.eclipse.wst.sse.ui;bundle-version="[1.0.101,1.1.0)",
+ org.eclipse.wst.sse.ui;bundle-version="[1.0.101,1.2.0)",
  org.eclipse.jst.j2ee;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.jst.jsp.core;bundle-version="[1.1.0,1.3.0)",
  org.eclipse.jst.jsp.ui;bundle-version="[1.1.0,1.3.0)",
  org.eclipse.jst.j2ee.web;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.jst.pagedesigner.jsp.core;bundle-version="[1.0.0,1.1.0)",
- org.eclipse.wst.common.ui.properties;bundle-version="[1.0.101,1.2.0)",
  org.eclipse.jst.jsf.common.ui;bundle-version="[1.0.0,1.1.0)",
  org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.ui;bundle-version="[3.2.0,4.0.0)",
@@ -34,22 +33,11 @@
  org.eclipse.wst.sse.core;bundle-version="[1.1.0,1.2.0)",
  javax.servlet;bundle-version="[2.4.0,3.0.0)",
  org.apache.commons.el;bundle-version="[1.0.0,2.0.0)",
- javax.servlet.jsp;bundle-version="[2.0.0,3.0.0)"
-Eclipse-LazyStart: true
+ javax.servlet.jsp;bundle-version="[2.0.0,3.0.0)",
+ org.eclipse.ui.views.properties.tabbed;bundle-version="[3.2.0,4.0.0)"
+Bundle-ActivationPolicy: lazy
 Bundle-ManifestVersion: 2
-Export-Package: org.eclipse.jst.pagedesigner;
-  uses:="org.eclipse.swt.graphics,
-   org.osgi.framework,
-   org.eclipse.wst.sse.core.internal.provisional,
-   org.eclipse.core.resources,
-   org.eclipse.ui,
-   org.eclipse.jst.jsf.common.ui.internal.guiutils,
-   org.eclipse.jst.jsf.common.ui.internal.logging,
-   org.eclipse.jface.preference,
-   org.eclipse.ui.plugin,
-   org.eclipse.jface.resource,
-   org.eclipse.swt.widgets,
-   org.eclipse.core.runtime",
+Export-Package: org.eclipse.jst.pagedesigner;x-internal:=true,
  org.eclipse.jst.pagedesigner.actions.container;x-internal:=true,
  org.eclipse.jst.pagedesigner.actions.link;x-internal:=true,
  org.eclipse.jst.pagedesigner.actions.menuextension;x-internal:=true,
@@ -63,14 +51,7 @@
  org.eclipse.jst.pagedesigner.commands.nav;x-internal:=true,
  org.eclipse.jst.pagedesigner.commands.range;x-internal:=true,
  org.eclipse.jst.pagedesigner.commands.single;x-internal:=true,
- org.eclipse.jst.pagedesigner.converter;
-  uses:="org.eclipse.jface.viewers,
-   org.eclipse.swt.graphics,
-   org.w3c.dom,
-   org.eclipse.wst.sse.core.internal.provisional,
-   org.eclipse.jst.pagedesigner.css2.style,
-   org.eclipse.wst.xml.core.internal.provisional.document,
-   org.eclipse.jst.jsf.common.ui.internal.logging",
+ org.eclipse.jst.pagedesigner.converter;x-friends:="org.eclipse.jst.pagedesigner.tests",
  org.eclipse.jst.pagedesigner.converter.html;x-internal:=true,
  org.eclipse.jst.pagedesigner.converter.jsp;x-internal:=true,
  org.eclipse.jst.pagedesigner.css2;x-internal:=true,
@@ -90,18 +71,12 @@
  org.eclipse.jst.pagedesigner.dnd.internal;x-internal:=true,
  org.eclipse.jst.pagedesigner.dom;x-internal:=true,
  org.eclipse.jst.pagedesigner.dom.html;x-internal:=true,
- org.eclipse.jst.pagedesigner.dtmanager;
-  uses:="org.eclipse.jst.jsf.common.metadata,
-   org.w3c.dom,
-   org.eclipse.core.resources,
-   org.eclipse.jst.pagedesigner.dtmanager.dtinfo,
-   org.eclipse.jst.pagedesigner.converter,
-   org.eclipse.wst.xml.core.internal.provisional.document",
- org.eclipse.jst.pagedesigner.dtmanager.converter;uses:="org.w3c.dom,org.eclipse.jst.pagedesigner.converter",
+ org.eclipse.jst.pagedesigner.dtmanager;x-friends:="org.eclipse.jst.pagedesigner.tests",
+ org.eclipse.jst.pagedesigner.dtmanager.converter;x-friends:="org.eclipse.jst.pagedesigner.tests",
  org.eclipse.jst.pagedesigner.dtmanager.converter.internal;x-friends:="org.eclipse.jst.pagedesigner.jsf.ui",
- org.eclipse.jst.pagedesigner.dtmanager.converter.operations;uses:="org.eclipse.jst.jsf.common.metadata,org.w3c.dom,org.eclipse.jst.pagedesigner.dtmanager.converter",
- org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;x-internal:=true,
- org.eclipse.jst.pagedesigner.dtmanager.dtinfo;uses:="org.eclipse.emf.common.util,org.eclipse.emf.ecore",
+ org.eclipse.jst.pagedesigner.dtmanager.converter.operations,
+ org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;x-friends:="org.eclipse.jst.pagedesigner.tests",
+ org.eclipse.jst.pagedesigner.dtmanager.dtinfo;x-friends:="org.eclipse.jst.pagedesigner.tests",
  org.eclipse.jst.pagedesigner.dtmanager.dtinfo.internal.impl;x-internal:=true,
  org.eclipse.jst.pagedesigner.dtmanager.dtinfo.internal.util;x-internal:=true,
  org.eclipse.jst.pagedesigner.editors;x-internal:=true,
@@ -109,33 +84,36 @@
  org.eclipse.jst.pagedesigner.editors.pagedesigner;x-internal:=true,
  org.eclipse.jst.pagedesigner.editors.palette;x-internal:=true,
  org.eclipse.jst.pagedesigner.editors.palette.impl;x-internal:=true,
- org.eclipse.jst.pagedesigner.editors.palette.internal.metadata;x-internal:=true,
  org.eclipse.jst.pagedesigner.editors.palette.paletteinfos;x-friends:="org.eclipse.jst.jsf.metadata.tests",
  org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl;x-internal:=true,
  org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.util;x-internal:=true,
+ org.eclipse.jst.pagedesigner.editors.properties,
+ org.eclipse.jst.pagedesigner.editors.properties.internal;x-internal:=true,
+ org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections,
+ org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl;x-internal:=true,
+ org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.util;x-internal:=true,
  org.eclipse.jst.pagedesigner.editpolicies;x-internal:=true,
  org.eclipse.jst.pagedesigner.elementedit;x-internal:=true,
  org.eclipse.jst.pagedesigner.elementedit.html;x-internal:=true,
  org.eclipse.jst.pagedesigner.elementedit.jsp;x-internal:=true,
- org.eclipse.jst.pagedesigner.extensionpoint;
-  uses:="org.eclipse.jface.viewers,
-   org.eclipse.wst.sse.core.internal.provisional,
-   org.eclipse.jface.action,
-   org.eclipse.swt.widgets",
+ org.eclipse.jst.pagedesigner.extensionpoint;x-internal:=true,
  org.eclipse.jst.pagedesigner.figurehandler;x-internal:=true,
  org.eclipse.jst.pagedesigner.itemcreation;x-internal:=true,
+ org.eclipse.jst.pagedesigner.itemcreation.command;x-internal:=true,
+ org.eclipse.jst.pagedesigner.itemcreation.customizer;x-internal:=true,
  org.eclipse.jst.pagedesigner.itemcreation.internal;x-internal:=true,
  org.eclipse.jst.pagedesigner.meta;x-internal:=true,
  org.eclipse.jst.pagedesigner.meta.internal;x-internal:=true,
  org.eclipse.jst.pagedesigner.parts;x-internal:=true,
  org.eclipse.jst.pagedesigner.preview;x-internal:=true,
- org.eclipse.jst.pagedesigner.properties;x-internal:=true,
- org.eclipse.jst.pagedesigner.properties.attrgroup;x-internal:=true,
- org.eclipse.jst.pagedesigner.properties.celleditors;x-internal:=true,
- org.eclipse.jst.pagedesigner.properties.internal;x-internal:=true,
+ org.eclipse.jst.pagedesigner.properties;x-friends:="org.eclipse.jst.pagedesigner.tests",
+ org.eclipse.jst.pagedesigner.properties.attrgroup;x-friends:="org.eclipse.jst.pagedesigner.tests",
+ org.eclipse.jst.pagedesigner.properties.celleditors;x-friends:="org.eclipse.jst.pagedesigner.tests",
+ org.eclipse.jst.pagedesigner.properties.internal;x-friends:="org.eclipse.jst.pagedesigner.tests",
  org.eclipse.jst.pagedesigner.range;x-internal:=true,
  org.eclipse.jst.pagedesigner.requests;x-internal:=true,
  org.eclipse.jst.pagedesigner.tableedit;x-internal:=true,
+ org.eclipse.jst.pagedesigner.taglibprocessing,
  org.eclipse.jst.pagedesigner.tools;x-internal:=true,
  org.eclipse.jst.pagedesigner.ui.common;x-internal:=true,
  org.eclipse.jst.pagedesigner.ui.common.sash;x-internal:=true,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/build.properties b/jsf/plugins/org.eclipse.jst.pagedesigner/build.properties
index 762bee3..dff6b7a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/build.properties
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/build.properties
@@ -13,13 +13,11 @@
 output.. = bin/
 bin.includes = .,\
                META-INF/,\
-               configs/,\
                icons/,\
                plugin.properties,\
                plugin.xml,\
                schema/,\
                about.html,\
-               default.properties,\
-               metadata/
+               default.properties
 javacSource=1.5
 javacTarget=1.5
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/html.properties b/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/html.properties
deleted file mode 100644
index c762a49..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/html.properties
+++ /dev/null
@@ -1,156 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2006 Oracle Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     Oracle Corporation - initial API and implementation
-###############################################################################
-Attribute.Label.abbr=Abbr
-Attribute.Label.accept=Accept
-Attribute.Label.accesskey=Accesskey
-Attribute.Label.action=Action
-Attribute.Label.align=Align
-Attribute.Label.alink=Alink
-Attribute.Label.alt=Alt
-Attribute.Label.archive=Archive
-Attribute.Label.autostart=Autostart
-Attribute.Label.axis=Axis
-Attribute.Label.background=Background
-Attribute.Label.balance=Balance
-Attribute.Label.bgcolor=Bgcolor
-Attribute.Label.border=Border
-Attribute.Label.bordercolor=Bordercolor
-Attribute.Label.bordercolordark=Bordercolordark
-Attribute.Label.bordercolorlight=Bordercolorlight
-Attribute.Label.bottommargin=Bottommargin
-Attribute.Label.cellpadding=Cellpadding
-Attribute.Label.cellspacing=Cellspacing
-Attribute.Label.checked=Checked
-Attribute.Label.cite=Cite
-Attribute.Label.class=Class
-Attribute.Label.classid=Classid
-Attribute.Label.clear=Clear
-Attribute.Label.code=Code
-Attribute.Label.codebase=Codebase
-Attribute.Label.codetype=Codetype
-Attribute.Label.color=Color
-Attribute.Label.cols=Cols
-Attribute.Label.colspan=Colspan
-Attribute.Label.compact=Compact
-Attribute.Label.content=Content
-Attribute.Label.controls=Controls
-Attribute.Label.coords=Coords
-Attribute.Label.data=Data
-Attribute.Label.datapagesize=Datapagesize
-Attribute.Label.datetime=Datetime
-Attribute.Label.declare=Declare
-Attribute.Label.defer=Defer
-Attribute.Label.delay=Delay
-Attribute.Label.dir=Dir
-Attribute.Label.disabled=Disabled
-Attribute.Label.dynsrc=Dynsrc
-Attribute.Label.enctype=Enctype
-Attribute.Label.face=Face
-Attribute.Label.for=For
-Attribute.Label.frame=Frame
-Attribute.Label.frameborder=Frameborder
-Attribute.Label.framespacing=Framespacing
-Attribute.Label.headers=Headers
-Attribute.Label.height=Height
-Attribute.Label.hidden=Hidden
-Attribute.Label.href=Href
-Attribute.Label.hreflang=Hreflang
-Attribute.Label.hspace=Hspace
-Attribute.Label.http-equiv=http-equiv
-Attribute.Label.id=ID
-Attribute.Label.ismap=Ismap
-Attribute.Label.label=Label
-Attribute.Label.lang=Lang
-Attribute.Label.language=Language
-Attribute.Label.leftmargin=Leftmargin
-Attribute.Label.link=Link
-Attribute.Label.longdesc=Longdesc
-Attribute.Label.loop=Loop
-Attribute.Label.lowsrc=Lowsrc
-Attribute.Label.marginheight=Marginheight
-Attribute.Label.marginwidth=Marginwidth
-Attribute.Label.maxlength=Maxlength
-Attribute.Label.mayscript=Mayscript
-Attribute.Label.media=Media
-Attribute.Label.method=Method
-Attribute.Label.multiple=Multiple
-Attribute.Label.name=Name
-Attribute.Label.noresize=Noresize
-Attribute.Label.noshade=Noshade
-Attribute.Label.nowrap=Nowrap
-Attribute.Label.onblur=Onblur
-Attribute.Label.onchange=Onchange
-Attribute.Label.onclick=Onclick
-Attribute.Label.ondblclick=Ondblclick
-Attribute.Label.onfocus=Onfocus
-Attribute.Label.onkeydown=Onkeydown
-Attribute.Label.onkeypress=Onkeypress
-Attribute.Label.onkeyup=Onkeyup
-Attribute.Label.onload=Onload
-Attribute.Label.onmousedown=Onmousedown
-Attribute.Label.onmousemove=Onmousemove
-Attribute.Label.onmouseout=Onmouseout
-Attribute.Label.onmouseover=Onmouseover
-Attribute.Label.onmouseup=Onmouseup
-Attribute.Label.onreset=Onreset
-Attribute.Label.onselect=Onselect
-Attribute.Label.onsubmit=Onsubmit
-Attribute.Label.onunload=Onunload
-Attribute.Label.prompt=Prompt
-Attribute.Label.readonly=Readonly
-Attribute.Label.rel=Rel
-Attribute.Label.rev=Rev
-Attribute.Label.rightmargin=Rightmargin
-Attribute.Label.rows=Rows
-Attribute.Label.rowspan=Rowspan
-Attribute.Label.rules=Rules
-Attribute.Label.scope=Scope
-Attribute.Label.scrolling=Scrolling
-Attribute.Label.selected=Selected
-Attribute.Label.shape=Shape
-Attribute.Label.size=Size
-Attribute.Label.span=Span
-Attribute.Label.src=Src
-Attribute.Label.standby=Standby
-Attribute.Label.start=Start
-Attribute.Label.style=Style
-Attribute.Label.summary=Summary
-Attribute.Label.tabindex=Tabindex
-Attribute.Label.target=Target
-Attribute.Label.text=Text
-Attribute.Label.title=Title
-Attribute.Label.topmargin=Topmargin
-Attribute.Label.type=Type
-Attribute.Label.usemap=Usemap
-Attribute.Label.valign=Valign
-Attribute.Label.value=Value
-Attribute.Label.valuetype=Valuetype
-Attribute.Label.vlink=Vlink
-Attribute.Label.volume=Volume
-Attribute.Label.vspace=Vspace
-Attribute.Label.width=Width
-Attribute.Label.wrap=Wrap
-Attribute.Label.xmlns=Xmlns
-Category.Label.Accessibility=Accessibility
-Category.Label.VisualProperty=VisualProperty
-Category.Label.Browser.Specific=Browser Specific
-Category.Label.CSS/Accessibility=CSS/Accessibility
-Category.Label.Content=Content
-Category.Label.Data.Binding=Data Binding
-Category.Label.Dynamic=Dynamic
-Category.Label.Event=Event
-Category.Label.File=File
-Category.Label.General=General
-Category.Label.HTML4.0=HTML 4.0
-Category.Label.Image=Image
-Category.Label.Language=Language
-Category.Label.Radio/Checkbox=Radio/Checkbox
-Category.Label.Text/Password=Text/Password
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/html.xml b/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/html.xml
deleted file mode 100644
index c3a29a6..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/html.xml
+++ /dev/null
@@ -1,1559 +0,0 @@
-<?xml version="1.0" ?>
-<taglib uri="html">
-	<tag name="a">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="href" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.href" />
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-			<referedattribute ref="lang" overridename="hreflang"
-				displaylabel="%Attribute.Label.hreflang" />
-			<referedattribute ref="linktype" overridename="rel"
-				displaylabel="%Attribute.Label.rel" />
-			<referedattribute ref="linktype" overridename="rev"
-				displaylabel="%Attribute.Label.rev" />
-			<referedattribute ref="target" />
-			<attribute name="shape" type="ENUMERATED"
-				displaylabel="%Attribute.Label.shape">
-				<option key="circle" value="circle" />
-				<option key="default" value="default" />
-				<option key="rect" value="rect" default="default" />
-				<option key="poly" value="poly" />
-			</attribute>
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="accesskey"
-					displaylabel="%Attribute.Label.accesskey" />
-				<attribute name="tabindex"
-					displaylabel="%Attribute.Label.tabindex" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onblur"
-					displaylabel="%Attribute.Label.onblur" />
-				<attribute name="onfocus"
-					displaylabel="%Attribute.Label.onfocus" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="abbr">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="acronym">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="address">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="applet">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="code" displaylabel="%Attribute.Label.code" />
-			<attribute name="codebase"
-				displaylabel="%Attribute.Label.codebase" />
-			<attribute name="width" required="required"
-				displaylabel="%Attribute.Label.width" />
-			<attribute name="height" required="required"
-				displaylabel="%Attribute.Label.height" />
-			<attribute name="hspace"
-				displaylabel="%Attribute.Label.hspace" />
-			<attribute name="vspace"
-				displaylabel="%Attribute.Label.vspace" />
-			<referedattribute ref="ialign" overridename="align" />
-			<attribute name="archive"
-				displaylabel="%Attribute.Label.archive" />
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="alt"
-					displaylabel="%Attribute.Label.alt" />
-			</includeattrs>
-		</referedcategory>
-	</tag>
-	<tag name="area">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="shape" type="ENUMERATED"
-				displaylabel="%Attribute.Label.shape">
-				<option key="circle" value="circle" />
-				<option key="default" value="default" />
-				<option key="rect" value="rect" default="default" />
-				<option key="poly" value="poly" />
-			</attribute>
-			<attribute name="coords"
-				displaylabel="%Attribute.Label.coords" />
-			<attribute name="href" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.href" />
-			<referedattribute ref="target" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="alt" required="required"
-					displaylabel="%Attribute.Label.alt" />
-				<attribute name="accesskey"
-					displaylabel="%Attribute.Label.accesskey" />
-				<attribute name="tabindex"
-					displaylabel="%Attribute.Label.tabindex" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onblur"
-					displaylabel="%Attribute.Label.onblur" />
-				<attribute name="onfocus"
-					displaylabel="%Attribute.Label.onfocus" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="b">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="base">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="href" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.href" />
-			<referedattribute ref="target" />
-		</category>
-	</tag>
-	<tag name="basefont">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="size" type="ENUMERATED" required="required"
-				displaylabel="%Attribute.Label.size">
-				<option key="1" value="1" />
-				<option key="2" value="2" />
-				<option key="3" value="3" />
-				<option key="4" value="4" />
-				<option key="5" value="5" />
-				<option key="6" value="6" />
-				<option key="7" value="7" />
-			</attribute>
-			<attribute name="face" displaylabel="%Attribute.Label.face" />
-			<attribute name="color" type="COLOR"
-				displaylabel="%Attribute.Label.color" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<excludeattrs refs="class,style,title" />
-		</referedcategory>
-	</tag>
-	<tag name="bdo">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="big">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="blockquote">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="cite" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.cite" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="body">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="bgcolor" type="COLOR"
-				displaylabel="%Attribute.Label.bgcolor" />
-			<attribute name="background" type="RELATIVEPATH"
-				typeparam="suffix=jpg;gif;png"
-				displaylabel="%Attribute.Label.background" />
-			<attribute name="text" type="COLOR"
-				displaylabel="%Attribute.Label.text" />
-			<attribute name="link" type="COLOR"
-				displaylabel="%Attribute.Label.link" />
-			<attribute name="vlink" type="COLOR"
-				displaylabel="%Attribute.Label.vlink" />
-			<attribute name="alink" type="COLOR"
-				displaylabel="%Attribute.Label.alink" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onload"
-					displaylabel="%Attribute.Label.onload" />
-				<attribute name="onunload"
-					displaylabel="%Attribute.Label.onunload" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="br">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="clear" type="ENUMERATED"
-				displaylabel="%Attribute.Label.clear">
-				<option key="right" value="right" />
-				<option key="none" value="none" default="default" />
-				<option key="left" value="left" />
-				<option key="all" value="all" />
-			</attribute>
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-	</tag>
-	<tag name="button">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="value"
-				displaylabel="%Attribute.Label.value" />
-			<attribute name="type" type="ENUMERATED"
-				displaylabel="%Attribute.Label.type">
-				<option key="submit" value="submit" default="default" />
-				<option key="reset" value="reset" />
-				<option key="button" value="button" />
-			</attribute>
-			<attribute name="disabled" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.disabled" />
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="accesskey"
-					displaylabel="%Attribute.Label.accesskey" />
-				<attribute name="tabindex"
-					displaylabel="%Attribute.Label.tabindex" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onblur"
-					displaylabel="%Attribute.Label.onblur" />
-				<attribute name="onfocus"
-					displaylabel="%Attribute.Label.onfocus" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="caption">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="align" type="ENUMERATED"
-				displaylabel="%Attribute.Label.align">
-				<option key="right" value="right" />
-				<option key="top" value="top" />
-				<option key="left" value="left" />
-				<option key="bottom" value="bottom" />
-			</attribute>
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="center">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="cite">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="code">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="col">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="align" />
-			<attribute name="span" displaylabel="%Attribute.Label.span" />
-			<referedattribute ref="valign" />
-			<attribute name="width"
-				displaylabel="%Attribute.Label.width" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="colgroup">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="align" />
-			<attribute name="span" displaylabel="%Attribute.Label.span" />
-			<referedattribute ref="valign" />
-			<attribute name="width"
-				displaylabel="%Attribute.Label.width" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="dd">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="del">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="cite" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.cite" />
-			<attribute name="datetime"
-				displaylabel="%Attribute.Label.datetime" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="dfn">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="dir">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="compact" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.compact" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="div">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="dalign" overridename="align" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="dl">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="compact" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.compact" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="dt">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="em">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="fieldset">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="font">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="color" type="COLOR"
-				displaylabel="%Attribute.Label.color" />
-			<attribute name="size" type="ENUMERATED"
-				displaylabel="%Attribute.Label.size">
-				<option key="1" value="1" />
-				<option key="2" value="2" />
-				<option key="3" value="3" />
-				<option key="4" value="4" />
-				<option key="5" value="5" />
-				<option key="6" value="6" />
-				<option key="7" value="7" />
-				<option key="-1" value="-1" />
-				<option key="-2" value="-2" />
-				<option key="-3" value="-3" />
-				<option key="-4" value="-4" />
-				<option key="-5" value="-5" />
-				<option key="-6" value="-6" />
-				<option key="-7" value="-7" />
-				<option key="+1" value="+1" />
-				<option key="+2" value="+2" />
-				<option key="+3" value="+3" />
-				<option key="+4" value="+4" />
-				<option key="+5" value="+5" />
-				<option key="+6" value="+6" />
-				<option key="+7" value="+7" />
-			</attribute>
-			<attribute name="face" displaylabel="%Attribute.Label.face" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="form">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="action" required="required" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.action" />
-			<attribute name="method" type="ENUMERATED"
-				displaylabel="%Attribute.Label.method">
-				<option key="get" value="get" default="default" />
-				<option key="post" value="post" />
-			</attribute>
-			<attribute name="enctype" type="ENUMERATED"
-				displaylabel="%Attribute.Label.enctype">
-				<option key="application/x-www-form-urlencoded"
-					value="application/x-www-form-urlencoded" default="default" />
-				<option key="text/plain" value="text/plain" />
-				<option key="multipart/form-data"
-					value="multipart/form-data" />
-			</attribute>
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-			<referedattribute ref="target" />
-		</category>
-		<referedcategory ref="CSS/Accessibility"></referedcategory>
-		<referedcategory ref="Language" />
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onreset"
-					displaylabel="%Attribute.Label.onreset" />
-				<attribute name="onsubmit"
-					displaylabel="%Attribute.Label.onsubmit" />
-			</includeattrs>
-		</referedcategory>
-	</tag>
-	<tag name="frame">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="src" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.src" />
-			<attribute name="frameborder" type="ENUMERATED"
-				displaylabel="%Attribute.Label.frameborder">
-				<option key="0" value="0" />
-				<option key="1" value="1" default="default" />
-			</attribute>
-			<attribute name="scrolling" type="ENUMERATED"
-				displaylabel="%Attribute.Label.scrolling">
-				<option key="yes" value="Yes" />
-				<option key="no" value="No" />
-				<option key="auto" value="Auto" default="default" />
-			</attribute>
-			<attribute name="noresize" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.noresize" />
-			<attribute name="marginwidth"
-				displaylabel="%Attribute.Label.marginwidth" />
-			<attribute name="marginheight"
-				displaylabel="%Attribute.Label.marginheight" />
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="longdesc"
-					displaylabel="%Attribute.Label.longdesc" />
-			</includeattrs>
-		</referedcategory>
-	</tag>
-	<tag name="frameset">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="rows" displaylabel="%Attribute.Label.rows" />
-			<attribute name="cols" displaylabel="%Attribute.Label.cols" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<category name="Event" displaylabel="%Category.Label.Event">
-			<attribute name="onload"
-				displaylabel="%Attribute.Label.onload" />
-			<attribute name="onunload"
-				displaylabel="%Attribute.Label.onunload" />
-		</category>
-	</tag>
-	<tag name="h1">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="dalign" overridename="align" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="h2">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="dalign" overridename="align" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="h3">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="dalign" overridename="align" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="h4">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="dalign" overridename="align" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="h5">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="dalign" overridename="align" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="h6">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="dalign" overridename="align" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="head">
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="hr">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="align" type="ENUMERATED"
-				displaylabel="%Attribute.Label.align">
-				<option key="right" value="right" />
-				<option key="left" value="left" />
-				<option key="center" value="center" />
-			</attribute>
-			<attribute name="width"
-				displaylabel="%Attribute.Label.width" />
-			<attribute name="size" displaylabel="%Attribute.Label.size" />
-			<attribute name="noshade" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.noshade" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="html">
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="i">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="iframe">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="src" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.src" />
-			<attribute name="width"
-				displaylabel="%Attribute.Label.width" />
-			<attribute name="marginwidth"
-				displaylabel="%Attribute.Label.marginwidth" />
-			<attribute name="height"
-				displaylabel="%Attribute.Label.height" />
-			<attribute name="marginheight"
-				displaylabel="%Attribute.Label.marginheight" />
-			<referedattribute ref="ialign" overridename="align" />
-			<attribute name="scrolling" type="ENUMERATED"
-				displaylabel="%Attribute.Label.scrolling">
-				<option key="Yes" value="Yes" />
-				<option key="No" value="No" />
-				<option key="Auto" value="Auto" />
-			</attribute>
-			<attribute name="frameborder" type="ENUMERATED"
-				displaylabel="%Attribute.Label.frameborder">
-				<option key="0" value="0" />
-				<option key="1" value="1" default="default" />
-			</attribute>
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="longdesc"
-					displaylabel="%Attribute.Label.longdesc" />
-			</includeattrs>
-		</referedcategory>
-	</tag>
-	<tag name="img">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="src" type="RELATIVEPATH" required="required"
-				typeparam="suffix=jpg;gif;png" displaylabel="%Attribute.Label.src" />
-			<attribute name="width"
-				displaylabel="%Attribute.Label.width" />
-			<attribute name="height"
-				displaylabel="%Attribute.Label.height" />
-			<attribute name="hspace"
-				displaylabel="%Attribute.Label.hspace" />
-			<attribute name="vspace"
-				displaylabel="%Attribute.Label.vspace" />
-			<attribute name="border"
-				displaylabel="%Attribute.Label.border" />
-			<referedattribute ref="ialign" overridename="align" />
-			<attribute name="usemap"
-				displaylabel="%Attribute.Label.usemap" />
-			<attribute name="ismap" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.ismap" />
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="alt" required="required"
-					displaylabel="%Attribute.Label.alt" />
-				<attribute name="longdesc" type="RELATIVEPATH"
-					displaylabel="%Attribute.Label.longdesc" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="input">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="checked" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.checked" />
-			<attribute name="maxlength"
-				displaylabel="%Attribute.Label.maxlength" />
-			<attribute name="readonly" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.readonly" />
-			<attribute name="type" type="ENUMERATED"
-				displaylabel="%Attribute.Label.type">
-				<option key="password" value="Password" />
-				<option key="checkbox" value="Checkbox" />
-				<option key="text" value="Text" default="default" />
-				<option key="submit" value="Submit" />
-				<option key="hidden" value="Hidden" />
-				<option key="file" value="File" />
-				<option key="reset" value="Reset" />
-				<option key="radio" value="Radio" />
-				<option key="image" value="Image" />
-				<option key="button" value="Button" />
-			</attribute>
-			<attribute name="disabled" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.disabled" />
-			<attribute name="value"
-				displaylabel="%Attribute.Label.value" />
-			<attribute name="size" displaylabel="%Attribute.Label.size" />
-			<attribute name="accept" type="ENUMERATED"
-				displaylabel="%Attribute.Label.accept">
-				<option key="application/msword"
-					value="application/msword" />
-				<option key="image/jpeg" value="image/jpeg" />
-				<option key="image/x-MS-bmp" value="image/x-MS-bmp" />
-				<option key="image/x-portable-greymap"
-					value="image/x-portable-greymap" />
-				<option key="video/x-msvideo" value="video/x-msvideo" />
-				<option key="video/x-mpeg2" value="video/x-mpeg2" />
-				<option key="audio/x-aiff" value="audio/x-aiff" />
-				<option key="image/x-photo-cd" value="image/x-photo-cd" />
-				<option key="audio/x-waw" value="audio/x-waw" />
-				<option key="image/tiff" value="image/tiff" />
-				<option key="audio/basic" value="audio/basic" />
-				<option key="video/quicktime" value="video/quicktime" />
-				<option key="application/msexcel"
-					value="application/msexcel" />
-				<option key="image/gif" value="image/gif" />
-				<option key="audio/x-pn/realaudio"
-					value="audio/x-pn/realaudio" />
-				<option key="application/pdf" value="application/pdf" />
-				<option key="image/x-portablebitmap"
-					value="image/x-portablebitmap" />
-				<option key="application/rtf" value="application/rtf" />
-				<option key="text/html" value="text/html" />
-				<option key="image/x-portable-pixmap"
-					value="image/x-portable-pixmap" />
-				<option key="text/plain" value="text/plain" />
-				<option key="application/x-zip-compressed"
-					value="application/x-zip-compressed" />
-				<option key="audio/x-mpeg" value="audio/x-mpeg" />
-				<option key="application/postscript"
-					value="application/postscript" />
-				<option key="image/x-png" value="image/x-png" />
-				<option key="image/x-rgb" value="image/x-rgb" />
-			</attribute>
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="accesskey"
-					displaylabel="%Attribute.Label.accesskey" />
-				<attribute name="alt"
-					displaylabel="%Attribute.Label.alt" />
-				<attribute name="tabindex"
-					displaylabel="%Attribute.Label.tabindex" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onblur"
-					displaylabel="%Attribute.Label.onblur" />
-				<attribute name="onchange"
-					displaylabel="%Attribute.Label.onchange" />
-				<attribute name="onfocus"
-					displaylabel="%Attribute.Label.onfocus" />
-				<attribute name="onselect"
-					displaylabel="%Attribute.Label.onselect" />
-			</includeattrs>
-		</referedcategory>
-		<category name="Image" displaylabel="%Category.Label.Image">
-			<attribute name="src" type="RELATIVEPATH"
-				typeparam="suffix=jpg;gif;png" displaylabel="%Attribute.Label.src" />
-			<referedattribute ref="ialign" overridename="align" />
-			<attribute name="usemap"
-				displaylabel="%Attribute.Label.usemap" />
-			<attribute name="ismap" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.ismap" />
-		</category>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="ins">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="cite" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.cite" />
-			<attribute name="datetime"
-				displaylabel="%Attribute.Label.datetime" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="isindex">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="prompt"
-				displaylabel="%Attribute.Label.prompt" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="kbd">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="label">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="for" displaylabel="%Attribute.Label.for" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="accesskey"
-					displaylabel="%Attribute.Label.accesskey" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onblur"
-					displaylabel="%Attribute.Label.onblur" />
-				<attribute name="onfocus"
-					displaylabel="%Attribute.Label.onfocus" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="legend">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="align" type="ENUMERATED"
-				displaylabel="%Attribute.Label.align">
-				<option key="right" value="right" />
-				<option key="top" value="top - not supported by MSIE4" />
-				<option key="left" value="left" />
-				<option key="bottom" value="bottom" />
-			</attribute>
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="accesskey"
-					displaylabel="%Attribute.Label.accesskey" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="li">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="type" type="ENUMERATED"
-				displaylabel="%Attribute.Label.type">
-				<option key="i" value="i lower roman" />
-				<option key="I" value="I upper roman" />
-				<option key="a" value="a lower alpha" />
-				<option key="A" value="A upper alpha" />
-				<option key="1" value="1 arabic numbers" />
-				<option key="square" value="square" />
-				<option key="circle" value="circle" />
-				<option key="disc" value="disc" />
-			</attribute>
-			<attribute name="value"
-				displaylabel="%Attribute.Label.value" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="link">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="href" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.href" />
-			<referedattribute ref="linktype" overridename="rel"
-				displaylabel="%Attribute.Label.rel" />
-			<referedattribute ref="linktype" overridename="rev"
-				displaylabel="%Attribute.Label.rev" />
-			<referedattribute ref="lang" overridename="hreflang"
-				displaylabel="%Attribute.Label.hreflang" />
-			<referedattribute ref="media" />
-			<referedattribute ref="target" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="map">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="name" displaylabel="%Attribute.Label.name" required="required" />
-		</category>
-		<referedcategory ref="CSS/Accessibility"></referedcategory>
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="menu">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="compact" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.compact" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="meta">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="http-equiv"
-				displaylabel="%Attribute.Label.http-equiv" />
-			<attribute name="content" required="required"
-				displaylabel="%Attribute.Label.content" />
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-		</category>
-		<category name="CSS/Accessibility"
-			displaylabel="%Category.Label.CSS/Accessibility">
-		</category>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="noframes">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="noscript">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="object">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="usemap"
-				displaylabel="%Attribute.Label.usemap" />
-			<attribute name="standby"
-				displaylabel="%Attribute.Label.standby" />
-			<attribute name="width"
-				displaylabel="%Attribute.Label.width" />
-			<attribute name="height"
-				displaylabel="%Attribute.Label.height" />
-			<attribute name="hspace"
-				displaylabel="%Attribute.Label.hspace" />
-			<attribute name="vspace"
-				displaylabel="%Attribute.Label.vspace" />
-			<referedattribute ref="ialign" overridename="align" />
-			<attribute name="border"
-				displaylabel="%Attribute.Label.border" />
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="tabindex"
-					displaylabel="%Attribute.Label.tabindex" />
-			</includeattrs>
-		</referedcategory>
-		<category name="Content"
-			displaylabel="%Category.Label.Content">
-			<attribute name="classid" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.classid" />
-			<attribute name="codebase" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.codebase" />
-			<attribute name="codetype"
-				displaylabel="%Attribute.Label.codetype" />
-			<attribute name="data" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.data" />
-			<attribute name="archive"
-				displaylabel="%Attribute.Label.archive" />
-			<attribute name="declare" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.declare" />
-		</category>
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="ol">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="start"
-				displaylabel="%Attribute.Label.start" />
-			<attribute name="type" type="ENUMERATED"
-				displaylabel="%Attribute.Label.type">
-				<option key="i" value="i lower roman" />
-				<option key="I" value="I upper roman" />
-				<option key="a" value="a lower alpha" />
-				<option key="A" value="A upper alpha" />
-				<option key="1" value="1 arabic numbers" />
-			</attribute>
-			<attribute name="compact" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.compact" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="optgroup">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="disabled" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.disabled" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="label" required="required"
-					displaylabel="%Attribute.Label.label" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onblur"
-					displaylabel="%Attribute.Label.onblur" />
-				<attribute name="onchange"
-					displaylabel="%Attribute.Label.onchange" />
-				<attribute name="onfocus"
-					displaylabel="%Attribute.Label.onfocus" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="option">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="value"
-				displaylabel="%Attribute.Label.value" />
-			<attribute name="selected" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.selected" />
-			<attribute name="disabled" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.disabled" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="label"
-					displaylabel="%Attribute.Label.label" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onblur"
-					displaylabel="%Attribute.Label.onblur" />
-				<attribute name="onchange"
-					displaylabel="%Attribute.Label.onchange" />
-				<attribute name="onfocus"
-					displaylabel="%Attribute.Label.onfocus" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="p">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="dalign" overridename="align" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Language" />
-		<referedcategory ref="Event" />
-	</tag>
-	<tag name="param">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="value"
-				displaylabel="%Attribute.Label.value" />
-			<attribute name="valuetype" type="ENUMERATED"
-				displaylabel="%Attribute.Label.valuetype">
-				<option key="object" value="object" />
-				<option key="ref" value="ref" />
-				<option key="data" value="data" default="default" />
-			</attribute>
-			<attribute name="name" displaylabel="%Attribute.Label.name" required="required" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<excludeattrs refs="class,style,title" />
-		</referedcategory>
-	</tag>
-	<tag name="pre">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="q">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="cite" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.cite" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="s">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="samp">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="script">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="src" type="RELATIVEPATH"
-				displaylabel="%Attribute.Label.src" />
-			<attribute name="type" type="ENUMERATED" required="required"
-				displaylabel="%Attribute.Label.type">
-				<option key="text/php" value="text/php" />
-				<option key="text/tcl" value="text/tcl" />
-				<option key="text/livescript" value="text/livescript" />
-				<option key="text/vbscript" value="text/vbscript" />
-				<option key="text/jscript" value="text/jscript" />
-				<option key="text/javascript" value="text/javascript" />
-			</attribute>
-			<attribute name="defer" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.defer" />
-		</category>
-	</tag>
-	<tag name="select">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="size" displaylabel="%Attribute.Label.size" />
-			<attribute name="multiple" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.multiple" />
-			<attribute name="disabled" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.disabled" />
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="tabindex"
-					displaylabel="%Attribute.Label.tabindex" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onblur"
-					displaylabel="%Attribute.Label.onblur" />
-				<attribute name="onchange"
-					displaylabel="%Attribute.Label.onchange" />
-				<attribute name="onfocus"
-					displaylabel="%Attribute.Label.onfocus" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="small">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="span">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="strike">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="strong">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="style">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="type" type="ENUMERATED" required="required"
-				displaylabel="%Attribute.Label.type">
-				<option key="text/css" value="text/css" />
-				<option key="text/javascript" value="text/javascript" />
-			</attribute>
-			<referedattribute ref="media" />
-		</category>
-		<category name="CSS/Accessibility"
-			displaylabel="%Category.Label.CSS/Accessibility">
-			<attribute name="title"
-				displaylabel="%Attribute.Label.title" />
-		</category>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="sub">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="sup">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="table">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="width"
-				displaylabel="%Attribute.Label.width" />
-			<attribute name="border"
-				displaylabel="%Attribute.Label.border" />
-			<attribute name="align" type="ENUMERATED"
-				displaylabel="%Attribute.Label.align">
-				<option key="right" value="right" />
-				<option key="left" value="left" />
-				<option key="center" value="center" />
-			</attribute>
-			<attribute name="cellpadding"
-				displaylabel="%Attribute.Label.cellpadding" />
-			<attribute name="cellspacing"
-				displaylabel="%Attribute.Label.cellspacing" />
-			<attribute name="bgcolor" type="COLOR"
-				displaylabel="%Attribute.Label.bgcolor" />
-			<attribute name="frame" type="ENUMERATED"
-				displaylabel="%Attribute.Label.frame">
-				<option key="lhs"
-					value="Lhs - Border on the left-hand side of the table frame" />
-				<option key="above"
-					value="Above - Border on the top side of the table frame" />
-				<option key="void"
-					value="Void - Removes all outside table borders (default)" />
-				<option key="box"
-					value="Box - Border on all sides of the table frame" />
-				<option key="vsides"
-					value="Vsides - Border on the left and right sides of the table frame" />
-				<option key="below"
-					value="Below - Border on the bottom side of the table frame" />
-				<option key="border"
-					value="Border - Border on all sides of the table frame" />
-				<option key="rhs"
-					value="Rhs - Border on the right-hand side of the table frame" />
-				<option key="hsides"
-					value="Hsides - Border on the top and bottom sides of the table frame" />
-			</attribute>
-			<attribute name="rules" type="ENUMERATED"
-				displaylabel="%Attribute.Label.rules">
-				<option key="cols"
-					value="Cols - Displays vertical borders between all table columns" />
-				<option key="groups"
-					value="Groups - Displays horizontal borders between all table groups" />
-				<option key="rows"
-					value="Rows - Displays horizontal borders between all table rows" />
-				<option key="none"
-					value="None - Removes all interior table borders (default)" />
-				<option key="all"
-					value="All - Displays a border on all rows and columns" />
-			</attribute>
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="summary"
-					displaylabel="%Attribute.Label.summary" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="tbody">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="align" />
-			<referedattribute ref="valign" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="td">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="width"
-				displaylabel="%Attribute.Label.width" />
-			<attribute name="height"
-				displaylabel="%Attribute.Label.height" />
-			<attribute name="colspan"
-				displaylabel="%Attribute.Label.colspan" />
-			<attribute name="rowspan"
-				displaylabel="%Attribute.Label.rowspan" />
-			<referedattribute ref="align" />
-			<attribute name="nowrap" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.nowrap" />
-			<attribute name="bgcolor" type="COLOR"
-				displaylabel="%Attribute.Label.bgcolor" />
-			<referedattribute ref="scope" />
-			<referedattribute ref="valign" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="abbr"
-					displaylabel="%Attribute.Label.abbr" />
-				<attribute name="axis"
-					displaylabel="%Attribute.Label.axis" />
-				<attribute name="headers"
-					displaylabel="%Attribute.Label.headers" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="textarea">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="cols" required="required" displaylabel="%Attribute.Label.cols" />
-			<attribute name="rows" required="required" displaylabel="%Attribute.Label.rows" />
-			<attribute name="disabled" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.disabled" />
-			<attribute name="readonly" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.readonly" />
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="accesskey"
-					displaylabel="%Attribute.Label.accesskey" />
-				<attribute name="tabindex"
-					displaylabel="%Attribute.Label.tabindex" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event">
-			<includeattrs>
-				<attribute name="onblur"
-					displaylabel="%Attribute.Label.onblur" />
-				<attribute name="onchange"
-					displaylabel="%Attribute.Label.onchange" />
-				<attribute name="onfocus"
-					displaylabel="%Attribute.Label.onfocus" />
-				<attribute name="onselect"
-					displaylabel="%Attribute.Label.onselect" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="tfoot">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="align" />
-			<referedattribute ref="valign" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="th">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="width"
-				displaylabel="%Attribute.Label.width" />
-			<attribute name="height"
-				displaylabel="%Attribute.Label.height" />
-			<attribute name="colspan"
-				displaylabel="%Attribute.Label.colspan" />
-			<attribute name="rowspan"
-				displaylabel="%Attribute.Label.rowspan" />
-			<referedattribute ref="align" />
-			<attribute name="nowrap" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.nowrap" />
-			<attribute name="bgcolor" type="COLOR"
-				displaylabel="%Attribute.Label.bgcolor" />
-			<referedattribute ref="scope" />
-			<referedattribute ref="valign" />
-		</category>
-		<referedcategory ref="CSS/Accessibility">
-			<includeattrs>
-				<attribute name="abbr"
-					displaylabel="%Attribute.Label.abbr" />
-				<attribute name="axis"
-					displaylabel="%Attribute.Label.axis" />
-				<attribute name="headers"
-					displaylabel="%Attribute.Label.headers" />
-			</includeattrs>
-		</referedcategory>
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="thead">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="align" />
-			<referedattribute ref="valign" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="title">
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="tr">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<referedattribute ref="align" />
-			<referedattribute ref="valign" />
-			<attribute name="bgcolor" type="COLOR"
-				displaylabel="%Attribute.Label.bgcolor" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="tt">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="u">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="ul">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="type" type="ENUMERATED"
-				displaylabel="%Attribute.Label.type">
-				<option key="square" value="square" />
-				<option key="circle" value="circle" />
-				<option key="disc" value="disc" />
-			</attribute>
-			<attribute name="compact" type="NAMED-BOOLEAN"
-				displaylabel="%Attribute.Label.compact" />
-		</category>
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<tag name="var">
-		<referedcategory ref="CSS/Accessibility" />
-		<referedcategory ref="Event" />
-		<referedcategory ref="Language" />
-	</tag>
-	<definition>
-		<categories>
-			<category name="CSS/Accessibility"
-				displaylabel="%Category.Label.CSS/Accessibility">
-				<attribute name="class" type="CSSCLASS"
-					displaylabel="%Attribute.Label.class" />
-				<attribute name="id" type="CSSID"
-					displaylabel="%Attribute.Label.id" />
-				<attribute name="style" type="CSSSTYLE"
-					typeparam="style=STYLE" displaylabel="%Attribute.Label.style" />
-				<attribute name="title"
-					displaylabel="%Attribute.Label.title" />
-			</category>
-			<category name="Event"
-				displaylabel="%Category.Label.Event">
-				<attribute name="onclick" type="JAVASCRIPT"
-					displaylabel="%Attribute.Label.onclick" />
-				<attribute name="ondblclick" type="JAVASCRIPT"
-					displaylabel="%Attribute.Label.ondblclick" />
-				<attribute name="onmousedown" type="JAVASCRIPT"
-					displaylabel="%Attribute.Label.onmousedown" />
-				<attribute name="onmousemove" type="JAVASCRIPT"
-					displaylabel="%Attribute.Label.onmousemove" />
-				<attribute name="onmouseout" type="JAVASCRIPT"
-					displaylabel="%Attribute.Label.onmouseout" />
-				<attribute name="onmouseover" type="JAVASCRIPT"
-					displaylabel="%Attribute.Label.onmouseover" />
-				<attribute name="onmouseup" type="JAVASCRIPT"
-					displaylabel="%Attribute.Label.onmouseup" />
-				<attribute name="onkeydown" type="JAVASCRIPT"
-					displaylabel="%Attribute.Label.onkeydown" />
-				<attribute name="onkeypress" type="JAVASCRIPT"
-					displaylabel="%Attribute.Label.onkeypress" />
-				<attribute name="onkeyup" type="JAVASCRIPT"
-					displaylabel="%Attribute.Label.onkeyup" />
-			</category>
-			<category name="Language"
-				displaylabel="%Category.Label.Language">
-				<attribute name="dir" type="ENUMERATED"
-					displaylabel="%Attribute.Label.dir">
-					<option key="ltr" value="left-to-right" />
-					<option key="rtl" value="right-to-left" />
-				</attribute>
-				<referedattribute ref="lang" />
-			</category>
-		</categories>
-		<attributes>
-			<attribute name="align" type="ENUMERATED"
-				displaylabel="%Attribute.Label.align">
-				<option key="right" value="right" />
-				<option key="char" value="char" />
-				<option key="left" value="left" />
-				<option key="center" value="center" />
-				<option key="justify" value="justify" />
-			</attribute>
-			<attribute name="dalign" type="ENUMERATED"
-				displaylabel="%Attribute.Label.align">
-				<option key="right" value="right" />
-				<option key="left" value="left" />
-				<option key="center" value="center" />
-				<option key="justify" value="justify" />
-			</attribute>
-			<attribute name="ialign" type="ENUMERATED"
-				displaylabel="%Attribute.Label.align">
-				<option key="bottom" value="bottom" />
-				<option key="middle" value="middle" />
-				<option key="top" value="top" />
-				<option key="right" value="right" />
-				<option key="left" value="left" />
-			</attribute>
-			<attribute name="lang" type="ENUMERATED"
-				displaylabel="%Attribute.Label.lang">
-				<option key="af" value="af Afrikaans" />
-				<option key="ar" value="ar Arabic (needs subtype)" />
-				<option key="be" value="be Belarusian" />
-				<option key="bg" value="bg Bulgarian" />
-				<option key="br" value="br Breton" />
-				<option key="ca" value="ca Catalan" />
-				<option key="cs" value="cs Czech" />
-				<option key="da" value="da Danish" />
-				<option key="de" value="de German (Standard)" />
-				<option key="el" value="el Greek" />
-				<option key="en" value="en English" />
-				<option key="es" value="es Spanish (Spain)" />
-				<option key="et" value="et Estonian" />
-				<option key="eu" value="eu Basque" />
-				<option key="fa" value="fa Farsi" />
-				<option key="fi" value="fi Finnish" />
-				<option key="fo" value="fo Faeroese" />
-				<option key="fr" value="fr French (Standard)" />
-				<option key="gd" value="gd Gaelic (Scotland)" />
-				<option key="he" value="he Hebrew" />
-				<option key="hi" value="hi Hindi" />
-				<option key="hr" value="hr Croatian" />
-				<option key="hu" value="hu Hungarian" />
-				<option key="id" value="id Indonesian" />
-				<option key="is" value="is Icelandic" />
-				<option key="it" value="it Italian (Standard)" />
-				<option key="ja" value="ja Japanese" />
-				<option key="ko" value="ko Korean" />
-				<option key="lt" value="lt Lithuanian" />
-				<option key="lv" value="lv Latvian" />
-				<option key="mk" value="mk Macedonian" />
-				<option key="ms" value="ms Malaysian" />
-				<option key="mt" value="mt Maltese" />
-				<option key="nl" value="nl Dutch (Standard)" />
-				<option key="no" value="no Norwegian (Bokmal/Nynorsk)" />
-				<option key="pl" value="pl Polish" />
-				<option key="pt" value="pt Portuguese (Standard)" />
-				<option key="rm" value="rm Rhaeto-Romanic" />
-				<option key="ro" value="ro Romanian" />
-				<option key="ru" value="ru Russian" />
-				<option key="sk" value="sk Slovak" />
-				<option key="sl" value="sl Slovenian" />
-				<option key="sq" value="sq Albanian" />
-				<option key="sr" value="sr Serbian (Cyrillic/Latin)" />
-				<option key="sv" value="sv Swedish" />
-				<option key="sx" value="sx Sutu" />
-				<option key="sz" value="sz Sami (Lappish)" />
-				<option key="th" value="th Thai" />
-				<option key="tn" value="tn Setswana" />
-				<option key="tr" value="tr Turkish" />
-				<option key="ts" value="ts Tsonga" />
-				<option key="uk" value="uk Ukrainian" />
-				<option key="ur" value="ur Urdu" />
-				<option key="vi" value="vi Vietnamese" />
-				<option key="xh" value="xh Xhosa" />
-				<option key="yi" value="yi Yiddish" />
-				<option key="zh" value="zh Chinese (needs subtype)" />
-				<option key="zu" value="zu Zulu" />
-			</attribute>
-			<attribute name="linktype">
-				<option key="index" value="index" />
-				<option key="subsection" value="subsection" />
-				<option key="bookmark" value="bookmark" />
-				<option key="start" value="start" />
-				<option key="next" value="next" />
-				<option key="stylesheet" value="stylesheet" />
-				<option key="chapter" value="chapter" />
-				<option key="help" value="help" />
-				<option key="alternate" value="alternate" />
-				<option key="appendix" value="appendix" />
-				<option key="contents" value="contents" />
-				<option key="section" value="section" />
-				<option key="prev" value="prev" />
-				<option key="previous" value="previous" />
-				<option key="glossary" value="glossary" />
-				<option key="copyright" value="copyright" />
-			</attribute>
-			<attribute name="media" type="ENUMERATED"
-				displaylabel="%Attribute.Label.media">
-				<option key="tv" value="tv" />
-				<option key="braille" value="braille" />
-				<option key="tty" value="tty" />
-				<option key="print" value="print" />
-				<option key="all" value="all" />
-				<option key="projection" value="projection" />
-				<option key="handheld" value="handheld" />
-				<option key="screen" value="screen" />
-				<option key="aural" value="aural" />
-			</attribute>
-			<attribute name="scope" type="ENUMERATED"
-				displaylabel="%Attribute.Label.scope">
-				<option key="row" value="row" />
-				<option key="col" value="col" />
-				<option key="rowgroup" value="rowgroup" />
-				<option key="colgroup" value="colgroup" />
-			</attribute>
-			<attribute name="target" type="ENUMERATED"
-				displaylabel="%Attribute.Label.target">
-				<option key="_self" value="_self" />
-				<option key="_blank" value="_blank" />
-				<option key="_parent" value="_parent" />
-				<option key="_top" value="_top" />
-			</attribute>
-			<attribute name="valign" type="ENUMERATED"
-				displaylabel="%Attribute.Label.valign">
-				<option key="middle" value="middle" />
-				<option key="top" value="top" />
-				<option key="baseline" value="baseline" />
-				<option key="bottom" value="bottom" />
-			</attribute>
-		</attributes>
-	</definition>
-</taglib>
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/jsp.properties b/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/jsp.properties
deleted file mode 100644
index f07afa0..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/jsp.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2006 Oracle Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     Oracle Corporation - initial API and implementation
-###############################################################################
-Attribute.Label.align=Align
-Attribute.Label.beanName=BeanName
-Attribute.Label.class=Class
-Attribute.Label.code=Code
-Attribute.Label.codebase=Codebase
-Attribute.Label.contentType=ContentType
-Attribute.Label.flush=Flush
-Attribute.Label.file=File
-Attribute.Label.height=Height
-Attribute.Label.hspace=Hspace
-Attribute.Label.id=ID
-Attribute.Label.iepluginurl=Eepluginurl
-Attribute.Label.import=Import
-Attribute.Label.jreversion=Jreversion
-Attribute.Label.name=Name
-Attribute.Label.nspluginurl=Nspluginurl
-Attribute.Label.page=Page
-Attribute.Label.param=Param
-Attribute.Label.property=Property
-Attribute.Label.scope=Scope
-Attribute.Label.type=Type
-Attribute.Label.value=Value
-Attribute.Label.version=Version
-Attribute.Label.vspace=Vspace
-Attribute.Label.width=Width
-Attribute.Label.xmlnsjsp=xmlns:jsp
-Category.Label.General=General
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/jsp.xml b/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/jsp.xml
deleted file mode 100644
index 6736eef..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/configs/cm/jsp.xml
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" ?>
-<taglib uri="jsp">
-	<tag name="declaration" />
-	<tag name="expression" />
-	<tag name="fallback" />
-	<tag name="forward">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="page" type="RELATIVEPATH"
-				typeparam="suffix=jsp;htm;html" displaylabel="%Attribute.Label.page" />
-		</category>
-	</tag>
-	<tag name="getproperty">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-			<attribute name="property"
-				displaylabel="%Attribute.Label.property" />
-		</category>
-	</tag>
-	<tag name="include">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="page" type="RELATIVEPATH"
-				typeparam="suffix=jsp;htm;html" displaylabel="%Attribute.Label.page" />
-			<attribute name="flush" type="BOOLEAN"
-				displaylabel="%Attribute.Label.flush" />
-		</category>
-	</tag>
-	<tag name="directive.include">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="file" type="RELATIVEPATH"
-				typeparam="suffix=jsp;htm;html" displaylabel="%Attribute.Label.file" />
-		</category>
-	</tag>
-	<tag name="directive.page">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="import"
-				displaylabel="%Attribute.Label.import" />
-			<attribute name="contentType"
-				displaylabel="%Attribute.Label.contentType" />
-		</category>
-	</tag>
-	<tag name="param">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-			<attribute name="value"
-				displaylabel="%Attribute.Label.value" />
-		</category>
-	</tag>
-	<tag name="params" />
-	<tag name="plugin">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="type" type="ENUMERATED"
-				displaylabel="%Attribute.Label.type">
-				<option key="applet" value="applet" />
-				<option key="bean" value="bean" />
-			</attribute>
-			<attribute name="jreversion"
-				displaylabel="%Attribute.Label.jreversion" type="ENUMERATED">
-				<option key="1.2" value="1.2" />
-			</attribute>
-			<attribute name="nspluginurl"
-				displaylabel="%Attribute.Label.nspluginurl" />
-			<attribute name="iepluginurl"
-				displaylabel="%Attribute.Label.iepluginurl" />
-		</category>
-	</tag>
-	<tag name="root">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="version" type="ENUMERATED"
-				displaylabel="%Attribute.Label.version">
-				<option key="1.2" value="1.2" />
-				<option key="2.0" value="2.0" />
-			</attribute>
-			<attribute name="xmlns:jsp" type="ENUMERATED"
-				displaylabel="%Attribute.Label.xmlnsjsp">
-				<option key="http://java.sun.com/JSP/Page" value="http://java.sun.com/JSP/Page" />
-			</attribute>
-		</category>
-	</tag>
-	<tag name="scriptlet" />
-	<tag name="setproperty">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="name" displaylabel="%Attribute.Label.name" />
-			<attribute name="property"
-				displaylabel="%Attribute.Label.property" />
-			<attribute name="param"
-				displaylabel="%Attribute.Label.param" />
-			<attribute name="value"
-				displaylabel="%Attribute.Label.value" />
-		</category>
-	</tag>
-	<tag name="directive.taglib" />
-	<tag name="usebean">
-		<category name="General"
-			displaylabel="%Category.Label.General">
-			<attribute name="id" displaylabel="%Attribute.Label.id" />
-			<attribute name="scope" type="ENUMERATED"
-				displaylabel="%Attribute.Label.scope">
-				<option key="page" value="page" />
-				<option key="session" value="session" />
-				<option key="request" value="request" />
-				<option key="application" value="application" />
-			</attribute>
-			<attribute name="class" type="CLASSNAME"
-				displaylabel="%Attribute.Label.class" />
-			<attribute name="type" displaylabel="%Attribute.Label.type" />
-			<attribute name="beanName"
-				displaylabel="%Attribute.Label.beanName" />
-		</category>
-	</tag>
-</taglib>
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_BR.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/LineBreak.gif
similarity index 100%
copy from jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/HTML/small/HTML_BR.gif
copy to jsf/plugins/org.eclipse.jst.pagedesigner/icons/LineBreak.gif
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DECLARATION.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DECLARATION.gif
deleted file mode 100644
index 5403f72..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DECLARATION.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DIRECTIVE.INCLUDE.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DIRECTIVE.INCLUDE.gif
deleted file mode 100644
index 5926670..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DIRECTIVE.INCLUDE.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DIRECTIVE.PAGE.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DIRECTIVE.PAGE.gif
deleted file mode 100644
index e21e763..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DIRECTIVE.PAGE.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DIRECTIVE.TAGLIB.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DIRECTIVE.TAGLIB.gif
deleted file mode 100644
index 723a10d..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_DIRECTIVE.TAGLIB.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_EXPRESSION.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_EXPRESSION.gif
deleted file mode 100644
index 53a23e1..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_EXPRESSION.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_FALLBACK.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_FALLBACK.gif
deleted file mode 100644
index 2507aac..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_FALLBACK.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_FORWARD.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_FORWARD.gif
deleted file mode 100644
index 7747595..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_FORWARD.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_GETPROPERTY.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_GETPROPERTY.gif
deleted file mode 100644
index 4d11f8d..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_GETPROPERTY.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_INCLUDE.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_INCLUDE.gif
deleted file mode 100644
index 88e62b4..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_INCLUDE.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_PARAM.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_PARAM.gif
deleted file mode 100644
index 79e07c2..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_PARAM.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_PARAMS.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_PARAMS.gif
deleted file mode 100644
index 9f517ae..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_PARAMS.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_PLUGIN.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_PLUGIN.gif
deleted file mode 100644
index 2ba7b4b..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_PLUGIN.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_ROOT.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_ROOT.gif
deleted file mode 100644
index 922b61d..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_ROOT.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_SCRIPTLET.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_SCRIPTLET.gif
deleted file mode 100644
index a1d2e61..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_SCRIPTLET.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_SETPROPERTY.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_SETPROPERTY.gif
deleted file mode 100644
index 4d11f8d..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_SETPROPERTY.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_TEXT.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_TEXT.gif
deleted file mode 100644
index 4cc147e..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_TEXT.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_USEBEAN.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_USEBEAN.gif
deleted file mode 100644
index 9d54e8b..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/large/JSP_USEBEAN.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DECLARATION.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DECLARATION.gif
deleted file mode 100644
index 35f48ef..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DECLARATION.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DIRECTIVE.INCLUDE.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DIRECTIVE.INCLUDE.gif
deleted file mode 100644
index 1ef9c8f..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DIRECTIVE.INCLUDE.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DIRECTIVE.PAGE.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DIRECTIVE.PAGE.gif
deleted file mode 100644
index 37c1e7c..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DIRECTIVE.PAGE.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DIRECTIVE.TAGLIB.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DIRECTIVE.TAGLIB.gif
deleted file mode 100644
index 33ef3d8..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_DIRECTIVE.TAGLIB.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_EXPRESSION.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_EXPRESSION.gif
deleted file mode 100644
index 66fd649..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_EXPRESSION.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_FALLBACK.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_FALLBACK.gif
deleted file mode 100644
index 4fb4150..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_FALLBACK.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_FORWARD.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_FORWARD.gif
deleted file mode 100644
index 1d3bafb..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_FORWARD.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_GETPROPERTY.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_GETPROPERTY.gif
deleted file mode 100644
index af4450a..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_GETPROPERTY.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_INCLUDE.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_INCLUDE.gif
deleted file mode 100644
index 2584c31..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_INCLUDE.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_PARAM.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_PARAM.gif
deleted file mode 100644
index b3e0727..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_PARAM.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_PARAMS.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_PARAMS.gif
deleted file mode 100644
index 4075922..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_PARAMS.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_PLUGIN.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_PLUGIN.gif
deleted file mode 100644
index 04bab8e..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_PLUGIN.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_ROOT.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_ROOT.gif
deleted file mode 100644
index f6d19d4..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_ROOT.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_SCRIPTLET.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_SCRIPTLET.gif
deleted file mode 100644
index 1753b96..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_SCRIPTLET.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_SETPROPERTY.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_SETPROPERTY.gif
deleted file mode 100644
index af4450a..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_SETPROPERTY.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_TEXT.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_TEXT.gif
deleted file mode 100644
index 7f506d9..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_TEXT.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_USEBEAN.gif b/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_USEBEAN.gif
deleted file mode 100644
index ba33db7..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/icons/palette/JSP/small/JSP_USEBEAN.gif
+++ /dev/null
Binary files differ
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/html.xml b/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/html.xml
deleted file mode 100644
index 3a93b51..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/html.xml
+++ /dev/null
@@ -1,223 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<md:metadatamodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" 
-	xmlns:md="http://org.eclipse.jst.jsf.common.metadata/metadata.ecore"
-	xmlns:pi="http://org.eclipse.jsf.pagedesigner/paletteInfos.ecore"
-	id="HTML"
-	type="tagFile">
-	
-	<trait id="paletteInfos" >
-		<value xsi:type="pi:PaletteInfos">
-			<item id="BR"/>
-			<item id="INPUT.TEXT" tag="INPUT"/>
-			<item id="INPUT.BUTTON" tag="INPUT">
-				<display-label>%INPUT.BUTTON.display-label</display-label>
-				<description>%INPUT.BUTTON.description</description>
-				<small-icon>small/HTML_INPUT_BUTTON.gif</small-icon>
-				<large-icon>small/HTML_INPUT_BUTTON.gif</large-icon>
-				<tag-create>
-					<attribute id="type" value="submit"/>
-				</tag-create>
-			</item>
-			<item id="INPUT.CHECKBOX" tag="INPUT">
-				<display-label>%INPUT.CHECKBOX.display-label</display-label>
-				<description>%INPUT.CHECKBOX.description</description>
-				<small-icon>small/HTML_INPUT_CHECKBOX.gif</small-icon>
-				<large-icon>small/HTML_INPUT_CHECKBOX.gif</large-icon>
-				<tag-create>
-					<attribute id="type" value="checkbox"/>
-				</tag-create>				
-			</item>
-			<item id="FORM"/>		
-			<item id="INPUT.HIDDEN" tag="INPUT">
-				<display-label>%INPUT.HIDDEN.display-label</display-label>
-				<description>%INPUT.HIDDEN.description</description>
-				<small-icon>small/HTML_INPUT_HIDDEN.gif</small-icon>
-				<large-icon>small/HTML_INPUT_HIDDEN.gif</large-icon>
-				<tag-create>
-					<attribute id="type" value="hidden"/>
-				</tag-create>	
-			</item>
-			<item id="HR"/>
-			<item id="IMG"/>
-			<item id="INPUT.IMAGE" tag="INPUT">
-				<display-label>%INPUT.IMAGE.display-label</display-label>
-				<description>%INPUT.IMAGE.description</description>
-				<small-icon>small/HTML_INPUT_IMAGE.gif</small-icon>
-				<large-icon>small/HTML_INPUT_IMAGE.gif</large-icon>
-				<tag-create>
-					<attribute id="type" value="image"/>
-				</tag-create>					
-			</item>
-			<item id="A"/>			
-			<item id="INPUT.PASSWORD" tag="INPUT">
-				<display-label>%INPUT.PASSWORD.display-label</display-label>
-				<description>%INPUT.PASSWORD.description</description>
-				<small-icon>small/HTML_INPUT_PASSWORD.gif</small-icon>
-				<large-icon>small/HTML_INPUT_PASSWORD.gif</large-icon>
-				<tag-create>
-					<attribute id="type" value="password"/>
-				</tag-create>					
-			</item>
-			<item id="INPUT.RADIO" tag="INPUT">
-				<display-label>%INPUT.RADIO.display-label</display-label>
-				<description>%INPUT.RADIO.description</description>
-				<small-icon>small/HTML_INPUT_RADIO.gif</small-icon>
-				<large-icon>small/HTML_INPUT_RADIO.gif</large-icon>
-				<tag-create>
-					<attribute id="type" value="radio"/>
-				</tag-create>					
-			</item>			
-			<item id="SELECT"/>
-			<item id="TABLE"/>
-			<item id="TEXTAREA"/>
-		</value>
-	</trait>
-
-	<trait id="images-base-path">
-		<value>icons/palette/HTML</value>
-	</trait>
-
-	<trait id="display-label">
-		<value>HTML 4.0</value>
-	</trait>
-	
-	<entity id="A">
-		<trait id="display-label">
-			<value>%A.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%A.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/HTML_A.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/HTML_A.gif</value>
-		</trait>
-	</entity>
-	<entity id="BR">
-		<trait id="display-label">
-			<value>%BR.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%BR.description</value>
-		</trait>		
-		<trait id="expert">
-			<value>true</value>
-		</trait>
-		<trait id="small-icon">
-			<value>small/HTML_BR.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/HTML_BR.gif</value>
-		</trait>
-	</entity>
-	<entity id="INPUT">
-		<trait id="display-label">
-			<value>%INPUT.TEXT.display-label</value>
-		</trait>					
-		<trait id="description">
-			<value>%INPUT.TEXT.description</value>
-		</trait>
-		<trait id="small-icon">
-			<value>small/HTML_INPUT_TEXT.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/HTML_INPUT_TEXT.gif</value>
-		</trait>
-		<trait id="requires-html-form">
-			<value>true</value>
-		</trait>	
-	</entity>
-	<entity id="FORM">
-		<trait id="display-label">
-			<value>%FORM.display-label</value>
-		</trait>					
-		<trait id="description">
-			<value>%FORM.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/HTML_FORM.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/HTML_FORM.gif</value>
-		</trait>
-	</entity>
-	<entity id="HR">
-		<trait id="display-label">
-			<value>%HR.display-label</value>
-		</trait>					
-		<trait id="description">
-			<value>%HR.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/HTML_HR.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/HTML_HR.gif</value>
-		</trait>
-	</entity>	
-	<entity id="IMG">
-		<trait id="display-label">
-			<value>%IMG.display-label</value>
-		</trait>					
-		<trait id="description">
-			<value>%IMG.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/HTML_IMG.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/HTML_IMG.gif</value>
-		</trait>
-	</entity>	
-	<entity id="SELECT">
-		<trait id="display-label">
-			<value>%SELECT.display-label</value>
-		</trait>					
-		<trait id="description">
-			<value>%SELECT.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/HTML_SELECT.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/HTML_SELECT.gif</value>
-		</trait>
-		<trait id="requires-html-form">
-			<value>true</value>
-		</trait>			
-	</entity>		
-	<entity id="TABLE">
-		<trait id="display-label">
-			<value>%TABLE.display-label</value>
-		</trait>					
-		<trait id="description">
-			<value>%TABLE.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/HTML_TABLE.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/HTML_TABLE.gif</value>
-		</trait>
-	</entity>
-	<entity id="TEXTAREA">
-		<trait id="display-label">
-			<value>%TEXTAREA.display-label</value>
-		</trait>					
-		<trait id="description">
-			<value>%TEXTAREA.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/HTML_TEXTAREA.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/HTML_TEXTAREA.gif</value>
-		</trait>
-		<trait id="requires-html-form">
-			<value>true</value>
-		</trait>
-	</entity>		
-</md:metadatamodel>
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/jsp11.properties b/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/jsp11.properties
deleted file mode 100644
index 747235a..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/jsp11.properties
+++ /dev/null
@@ -1,60 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2007 Oracle Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-# 
-# Contributors:
-#     Oracle Corporation - initial API and implementation
-###############################################################################
-plugin.display-label=Plugin
-plugin.description=Causes the execution of an applet or bean. The applet or bean executes in the specified plugin. If the plugin is not available, displays a dialog to initiate the download of the plugin software
-
-fallback.display-label=Fallback
-fallback.description=The element provides a message for the user if the plugin does not start
-
-root.display-label=Root
-root.description=Defines standard elements and namespace attributes of tag libraries
-
-text.display-label=Text
-text.description=Encloses template data
-
-expression.display-label=Expression
-expression.description=Contains an expression valid in the scripting language used in the page
-
-scriptlet.display-label=Scriptlet
-scriptlet.description=Contains a code fragment valid in the scripting language used in the page
-
-declaration.display-label=Declaration
-declaration.description=Declares a variable or method valid in the scripting language used in the page
-
-forward.display-label=Forward
-forward.description=Forwards a request to an HTML file, JSP page, or servlet
-
-param.display-label=Param
-param.description=The element passes the name and value of a parameter to the resource
-
-params.display-label=Params
-params.description=The element sends parameter names and values to an applet or Bean at startup
-
-include.display-label=Include
-include.description=Includes a static resource or the result from another web component
-
-useBean.display-label=UseBean
-useBean.description=Instantiates or references a bean with a specific name and scope
-
-getProperty.display-label=GetProperty
-getProperty.description=Inserts the value of a bean property into the response
-
-setProperty.display-label=SetProperty
-setProperty.description=Sets a bean property value or values
-
-directive.include.display-label=Directive.Include
-directive.include.description=Includes a resource of text or code when the JSP page is translated
-
-directive.page.display-label=Directive.Page
-directive.page.description=Defines attributes that apply to an entire JSP page
-
-directive.taglib.display-label=Directive.Taglib
-directive.taglib.description=Defines a tag library and prefix for the custom tags used in the JSP page
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/jsp11.xml b/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/jsp11.xml
deleted file mode 100644
index df0690e..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/metadata/jsp11.xml
+++ /dev/null
@@ -1,282 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<md:metadatamodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" 
-	xmlns:md="http://org.eclipse.jst.jsf.common.metadata/metadata.ecore"
-	xmlns:pi="http://org.eclipse.jsf.pagedesigner/paletteInfos.ecore"
-	id="jsp11"
-	type="tagFile">
-	
-	<trait id="paletteInfos">
-		<value xsi:type="pi:PaletteInfos">
-			<item id="jsp:directive.include"/>
-			<item id="jsp:directive.taglib"/>
-			<item id="jsp:expression"/>
-			<item id="jsp:declaration"/>
-			<item id="jsp:useBean"/>
-			<item id="jsp:getProperty"/>
-			<item id="jsp:setProperty"/>
-			<item id="jsp:include"/>
-			<item id="jsp:text"/>
-			<item id="jsp:root"/>
-			<item id="jsp:forward"/>
-			<item id="jsp:param"/>
-			<item id="jsp:params"/>
-			<item id="jsp:plugin"/>
-			<item id="jsp:fallback"/>
-			<item id="jsp:scriptlet"/>
-			<item id="jsp:directive.page"/>			
-		</value>
-	</trait>
-
-	<trait id="images-base-path">
-		<value>icons/palette/JSP</value>
-	</trait>
-
-	<trait id="display-label">
-		<value>JSP</value>
-	</trait>
-	
-	<entity id="jsp:directive.include">
-		<trait id="display-label">
-			<value>%directive.include.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%directive.include.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_DIRECTIVE.INCLUDE.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_DIRECTIVE.INCLUDE.gif</value>
-		</trait>
-	</entity>
-	<entity id="jsp:directive.page">
-		<trait id="display-label">
-			<value>%directive.page.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%directive.page.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_DIRECTIVE.PAGE.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_DIRECTIVE.PAGE.gif</value>
-		</trait>
-	</entity>	
-
-	<entity id="jsp:directive.taglib">
-		<trait id="display-label">
-			<value>%directive.taglib.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%directive.taglib.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_DIRECTIVE.TAGLIB.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_DIRECTIVE.TAGLIB.gif</value>
-		</trait>
-	</entity>	
-	<entity id="jsp:expression">
-		<trait id="display-label">
-			<value>%expression.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%expression.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_EXPRESSION.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_EXPRESSION.gif</value>
-		</trait>
-	</entity>	
-	<entity id="jsp:declaration">
-		<trait id="display-label">
-			<value>%declaration.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%declaration.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_DECLARATION.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_DECLARATION.gif</value>
-		</trait>
-	</entity>	
-	<entity id="jsp:useBean">
-		<trait id="display-label">
-			<value>%useBean.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%useBean.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_USEBEAN.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_USEBEAN.gif</value>
-		</trait>
-	</entity>	
-		
-	<entity id="jsp:getProperty">
-		<trait id="display-label">
-			<value>%getProperty.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%getProperty.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_GETPROPERTY.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_GETPROPERTY.gif</value>
-		</trait>
-	</entity>	
-
-	<entity id="jsp:setProperty">
-		<trait id="display-label">
-			<value>%setProperty.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%setProperty.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_SETPROPERTY.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_SETPROPERTY.gif</value>
-		</trait>
-	</entity>	
-	<entity id="jsp:include">
-		<trait id="display-label">
-			<value>%include.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%include.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_INCLUDE.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_INCLUDE.gif</value>
-		</trait>
-	</entity>	
-	
-	<entity id="jsp:text">
-		<trait id="display-label">
-			<value>%text.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%text.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_TEXT.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_TEXT.gif</value>
-		</trait>
-	</entity>	
-	<entity id="jsp:root">
-		<trait id="display-label">
-			<value>%root.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%root.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_ROOT.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_ROOT.gif</value>
-		</trait>
-	</entity>	
-	<entity id="jsp:forward">
-		<trait id="display-label">
-			<value>%forward.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%forward.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_FORWARD.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_FORWARD.gif</value>
-		</trait>
-	</entity>	
-	
-	<entity id="jsp:param">
-		<trait id="display-label">
-			<value>%param.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%param.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_PARAM.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_PARAM.gif</value>
-		</trait>
-	</entity>	
-	<entity id="jsp:params">
-		<trait id="display-label">
-			<value>%params.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%params.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_PARAMS.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_PARAMS.gif</value>
-		</trait>
-	</entity>		
-	<entity id="jsp:plugin">
-		<trait id="display-label">
-			<value>%plugin.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%plugin.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_PLUGIN.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_PLUGIN.gif</value>
-		</trait>
-	</entity>	
-	<entity id="jsp:fallback">
-		<trait id="display-label">
-			<value>%fallback.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%fallback.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_FALLBACK.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_FALLBACK.gif</value>
-		</trait>
-	</entity>
-	<entity id="jsp:scriptlet">
-		<trait id="display-label">
-			<value>%scriptlet.display-label</value>
-		</trait>
-		<trait id="description">
-			<value>%scriptlet.description</value>
-		</trait>		
-		<trait id="small-icon">
-			<value>small/JSP_SCRIPTLET.gif</value>
-		</trait>
-		<trait id="large-icon">
-			<value>large/JSP_SCRIPTLET.gif</value>
-		</trait>
-	</entity>	
-</md:metadatamodel>
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/model/QuickEditTabSections.ecore b/jsf/plugins/org.eclipse.jst.pagedesigner/model/QuickEditTabSections.ecore
new file mode 100644
index 0000000..5b3c237
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/model/QuickEditTabSections.ecore
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="quickedittabsections"
+    nsURI="http://org.eclipse.jsf.pagedesigner/QuickEditTabSections.ecore" nsPrefix="qe">
+  <eClassifiers xsi:type="ecore:EClass" name="QuickEditTabSections">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="sections" upperBound="-1"
+        eType="#//SectionInfo" containment="true">
+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+        <details key="kind" value="element"/>
+        <details key="name" value="section"/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SectionInfo">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" unique="false" eType="#//SECTION_TYPE"
+        defaultValueLiteral="ATTRIBUTE"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EEnum" name="SECTION_TYPE">
+    <eLiterals name="ATTRIBUTE"/>
+    <eLiterals name="SECTION" value="1"/>
+  </eClassifiers>
+</ecore:EPackage>
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/model/QuickEditTabSections.genmodel b/jsf/plugins/org.eclipse.jst.pagedesigner/model/QuickEditTabSections.genmodel
new file mode 100644
index 0000000..4aed6be
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/model/QuickEditTabSections.genmodel
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" copyrightText="Copyright (c) 2007 Oracle Corporation"
+    modelDirectory="/org.eclipse.jst.pagedesigner/src" editDirectory="/org.eclipse.jst.pagedesigner/src"
+    editorDirectory="/org.eclipse.jst.pagedesigner/src" modelPluginID="org.eclipse.jst.pagedesigner"
+    modelName="QuickEditTabSections" editPluginClass="org.eclipse.jst.pagedesigner.PDPlugin"
+    editorPluginClass="/org.eclipse.jst.pagedesigner.PDPlugin" importerID="org.eclipse.emf.importer.ecore"
+    complianceLevel="5.0" providerRootExtendsClass="">
+  <foreignModel>QuickEditTabSections.ecore</foreignModel>
+  <genPackages prefix="QuickEditTabSections" basePackage="org.eclipse.jst.pagedesigner.editors.properties"
+      disposableProviderFactory="true" classPackageSuffix="internal.impl" utilityPackageSuffix="internal.util"
+      providerPackageSuffix="internal.provider" presentationPackageSuffix="internal.presentation"
+      testsPackageSuffix="internal.tests" generateExampleClass="false" multipleEditorPages="false"
+      generateModelWizard="false" ecorePackage="QuickEditTabSections.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="QuickEditTabSections.ecore#//SECTION_TYPE">
+      <genEnumLiterals ecoreEnumLiteral="QuickEditTabSections.ecore#//SECTION_TYPE/ATTRIBUTE"/>
+      <genEnumLiterals ecoreEnumLiteral="QuickEditTabSections.ecore#//SECTION_TYPE/GROUP"/>
+    </genEnums>
+    <genClasses ecoreClass="QuickEditTabSections.ecore#//QuickEditTabSections">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference QuickEditTabSections.ecore#//QuickEditTabSections/sections"/>
+    </genClasses>
+    <genClasses image="false" ecoreClass="QuickEditTabSections.ecore#//Section">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute QuickEditTabSections.ecore#//Section/id"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute QuickEditTabSections.ecore#//Section/type"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/plugin.properties b/jsf/plugins/org.eclipse.jst.pagedesigner/plugin.properties
index 8329c1c..06eb37f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/plugin.properties
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/plugin.properties
@@ -24,4 +24,4 @@
 command.name.0 = vertical Layout
 command.name.1 = horizontal Layout
 command.name.2 = graphical designer
-command.name.3 = source code
\ No newline at end of file
+command.name.3 = source code
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/plugin.xml b/jsf/plugins/org.eclipse.jst.pagedesigner/plugin.xml
index 62eb25f..cc739aa 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/plugin.xml
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/plugin.xml
@@ -6,19 +6,24 @@
 	<extension-point id="propertyContributor" name="property contributor" schema="schema/propertyContributor.exsd" />
 	<extension-point id="popupMenuContributor" name="popupMenu Contributor" schema="schema/popupMenuContributor.exsd"/>
 	<extension-point id="cmRegistry" name="Content Model Meta Data" schema="schema/cmRegistry.exsd"/>
-    <extension-point id="tagCreationFactories" name="tagCreationFactories" schema="schema/tagCreationFactories.exsd"/>
 
 	<extension point="org.eclipse.ui.editors">
 		<editor class="org.eclipse.jst.pagedesigner.editors.HTMLEditor"
 			contributorClass="org.eclipse.jst.pagedesigner.editors.actions.PageDesignerActionBarContributor2"
 			default="false"
-			extensions="jsp,jsf,html,htm,xhtml"
+			extensions="jsp,jspx,jsf,html,htm,xhtml"
 			icon="icons/PD_Plugin.gif"
 			id="org.eclipse.jst.pagedesigner.PageDesignerEditor"
 			name="%editor.name.0">
 		</editor>
 	</extension>
 
+	<extension point="org.eclipse.ui.actionSetPartAssociations">
+    	<actionSetPartAssociation targetID="org.eclipse.debug.ui.launchActionSet">
+        	<part id="org.eclipse.jst.pagedesigner.PageDesignerEditor"/>
+    	</actionSetPartAssociation>
+	</extension>
+
 	<extension point="org.eclipse.core.runtime.adapters">
 		<factory
 			class="org.eclipse.jst.pagedesigner.utils.UriAdapterFactory"
@@ -27,36 +32,98 @@
 		</factory>
 	</extension>
 
-	<extension point="org.eclipse.wst.common.ui.properties.propertyTabs">
+	 <extension
+       point="org.eclipse.ui.views.properties.tabbed.propertyTabs">
 		<propertyTabs
-			contributorId="org.eclipse.jst.pagedesigner.pageDesigner.tabPropertyContributor">
+			contributorId="org.eclipse.jst.pagedesigner.tabPropertyContributor">
 			<propertyTab label="Quick Edit" category="Quick Edit" id="org.eclipse.jst.pagedesigner.tabQuickEdit" />
 			<propertyTab label="Attributes" category="Attributes" id="org.eclipse.jst.pagedesigner.tabAttributes" />
 		</propertyTabs>
-	</extension>
-
-	<extension
-		point="org.eclipse.wst.common.ui.properties.propertyContributor">
-		<propertyContributor
-			sectionDescriptorProvider="org.eclipse.jst.pagedesigner.properties.internal.DesignerTabPropertySectionDescriptorProvider"
-			contributorId="org.eclipse.jst.pagedesigner.pageDesigner.tabPropertyContributor">
-			<propertyCategory category="Quick Edit" />
-			<propertyCategory category="Attributes" />
-		</propertyContributor>
-	</extension>
-
-	<extension
-		point="org.eclipse.jst.pagedesigner.propertySections">
-		<propertySections>
-			<propertySection afterSection="top"
-				class="org.eclipse.jst.pagedesigner.properties.AllPropertySection"
-				tab="org.eclipse.jst.pagedesigner.tabAttributes"
-				id="section.allproperty" />
+ 	</extension>
+ 	
+  	<extension
+        point="org.eclipse.ui.views.properties.tabbed.propertySections">
+		<propertySections 
+			contributorId="org.eclipse.jst.pagedesigner.tabPropertyContributor">
+			<propertySection
+         		afterSection="top"
+         		class="org.eclipse.jst.pagedesigner.properties.AllPropertySection"
+         		id="section.allproperty"
+        	 	tab="org.eclipse.jst.pagedesigner.tabAttributes">
+  			 </propertySection>
 		</propertySections>
 	</extension>
-	
+
 	<extension point="org.eclipse.jst.pagedesigner.pageDesignerExtension">
 		<linkCreator class="org.eclipse.jst.pagedesigner.actions.link.HtmlLinkCreator" linkIdentifier="Html Link"/>
+  <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.AppendChildElementOperation"
+        id="AppendChildElementOperation">
+  </tagTransformOperation>
+    <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.AppendChildTextFromXPathOperation"
+        id="AppendChildTextFromXPathOperation">
+  </tagTransformOperation>
+    <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.AppendChildTextOperation"
+        id="AppendChildTextOperation">
+  </tagTransformOperation>
+    <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.ConvertAttributeToTextOperation"
+        id="ConvertAttributeToTextOperation">
+  </tagTransformOperation>
+    <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CopyAllAttributesOperation"
+        id="CopyAllAttributesOperation">
+  </tagTransformOperation>
+    <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CopyAttributeOperation"
+        id="CopyAttributeOperation">
+  </tagTransformOperation>
+    <tagTransformOperation
+          class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CopyAttributeWithRenameOperation"
+          id="CopyAttributeWithRenameOperation">
+    </tagTransformOperation>
+    <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CopyChildrenOperation"
+        id="CopyChildrenOperation">
+  </tagTransformOperation>
+    <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CreateAttributeFromXPathOperation"
+        id="CreateAttributeFromXPathOperation">
+  </tagTransformOperation>
+    <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CreateAttributeOperation"
+        id="CreateAttributeOperation">
+  </tagTransformOperation>
+      <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CreateElementOperation"
+        id="CreateElementOperation">
+  </tagTransformOperation>
+      <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.IfNotOperation"
+        id="IfNotOperation">
+  </tagTransformOperation>
+      <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.IfOperation"
+        id="IfOperation">
+  </tagTransformOperation>
+      <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.IterateOverElementsOperation"
+        id="IterateOverElementsOperation">
+  </tagTransformOperation>
+      <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.MakeParentElementCurrentOperation"
+        id="MakeParentElementCurrentOperation">
+  </tagTransformOperation>
+      <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.RemoveAttributeOperation"
+        id="RemoveAttributeOperation">
+  </tagTransformOperation>
+      <tagTransformOperation
+        class="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.RenameAttributeOperation"
+        id="RenameAttributeOperation">
+  </tagTransformOperation>
 	</extension>
 	
 	<extension id="org.eclipse.jst.pagedesigner.commands" point="org.eclipse.ui.commands">
@@ -110,19 +177,27 @@
           genModel="model/DTInfo.genmodel"
           uri="http://org.eclipse.jsf.pagedesigner/dtinfo.ecore">
     </package>
+    <package
+          class="org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage"
+          genModel="model/QuickEditTabSections.genmodel"
+          uri="http://org.eclipse.jsf.pagedesigner/QuickEditTabSections.ecore">
+    </package>
    </extension>
+
  <extension
-       point="org.eclipse.jst.jsf.common.standardMetaDataFiles">
-    <standardMetaDataFile
-          location="/metadata/html.xml"
-          uri="HTML">
-    </standardMetaDataFile>
+         point="org.eclipse.jst.jsf.common.domainSourceModelTypes">
+      <domainSourceModelTypes
+            domainId="TagLibraryDomain"
+            domainSourceModelTypeId="SybaseCMConfigContentModelHandler"
+            locator="org.eclipse.jst.pagedesigner.internal.metadata.SybaseCMConfigMetaDataLocator"
+            ordinal="0">
+     </domainSourceModelTypes>
  </extension>
  <extension
        point="org.eclipse.jst.jsf.common.domainSourceModelTypeTranslators">
     <domainSourceModelTypeTranslator
-          domainSourceModelTypeId="TaglibContentModelHandler"
-          translatorClass="org.eclipse.jst.pagedesigner.editors.palette.internal.metadata.HTMLContentModelMetaDataTranslator">
+          domainSourceModelTypeId="SybaseCMConfigContentModelHandler"
+          translatorClass="org.eclipse.jst.pagedesigner.internal.metadata.SybaseCMConfigMetaDataTranslator">
     </domainSourceModelTypeTranslator>
  </extension>
  <extension
@@ -134,4 +209,31 @@
           parentId="org.eclipse.ui.textEditorScope">
     </context>
  </extension>
+ <extension
+       point="org.eclipse.jst.jsf.core.MetaDataEnabledFeatures">
+    <MetaDataEnabledFeature
+          class="org.eclipse.jst.pagedesigner.editors.properties.internal.PropertyDescriptor"
+          typeid="org.eclipse.jst.jsf.core.attributevalues.BaseType">
+    </MetaDataEnabledFeature>
+ </extension>
+ <extension
+       point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
+    <propertyContributor
+          contributorId="org.eclipse.jst.pagedesigner.tabPropertyContributor"
+          tabDescriptorProvider="org.eclipse.jst.pagedesigner.properties.internal.WPETabDescriptorProvider">
+       <propertyCategory></propertyCategory>
+    </propertyContributor>
+ </extension>
+ <extension
+       point="org.eclipse.jst.jsf.core.AttributeValueRuntimeTypes">
+     <attributeValueRuntimeType
+            class="org.eclipse.jst.pagedesigner.taglibprocessing.CSSClassType"
+            id="attributevalues.CSSClassType"/> 
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.pagedesigner.taglibprocessing.CSSIdType"
+            id="attributevalues.CSSIdType"/>    
+      <attributeValueRuntimeType
+            class="org.eclipse.jst.pagedesigner.taglibprocessing.CSSStyleType"
+            id="attributevalues.CSSStyleType"/>   
+ </extension>
 </plugin>
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/cmRegistry.exsd b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/cmRegistry.exsd
index e217ffe..b6662dc 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/cmRegistry.exsd
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/cmRegistry.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.jst.pagedesigner" id="cmRegistry" name="Content Model Meta Data"/>
       </appInfo>
       <documentation>
-         [Enter description of this extension point.]
+         &lt;p&gt;&lt;b&gt;This extension point is provisional and subject to change&lt;/b&gt;&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -81,34 +81,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
+         2.0
       </documentation>
    </annotation>
 
@@ -117,18 +90,8 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         /*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-
+         Copyright 2006 Sybase 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
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd
index e0ad587..25ef001 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/pageDesignerExtension.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.jst.pagedesigner" id="pageDesignerExtension" name="Web Page Editor Extension"/>
       </appInfo>
       <documentation>
-         [Enter description of this extension point.]
+         &lt;p&gt;&lt;b&gt;This extension point is provisional and subject to change&lt;/b&gt;&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -18,6 +18,8 @@
             <element ref="tagConverterFactory" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="elementEditFactory" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="linkCreator" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="tagAttributeCellEditorFactory" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="tagTransformOperation" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -59,6 +61,11 @@
    </element>
 
    <element name="attributeCellEditorFactory">
+      <annotation>
+         <documentation>
+            deprecated - use tagAttributeCellEditorFactory
+         </documentation>
+      </annotation>
       <complexType>
          <attribute name="class" type="string">
             <annotation>
@@ -66,7 +73,27 @@
                   
                </documentation>
                <appInfo>
-                  <meta.attribute kind="java"/>
+                  <meta.attribute kind="java" deprecated="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="tagAttributeCellEditorFactory">
+      <annotation>
+         <documentation>
+            provides ability for 3rd parties to supply their own cell and dialog field editors for MD enabled tag library attributes in the WPE tabbed property sheets
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="class" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":org.eclipse.jst.pagedesigner.meta.ITagAttributeCellEditorFactory"/>
                </appInfo>
             </annotation>
          </attribute>
@@ -125,59 +152,57 @@
       </complexType>
    </element>
 
+   <element name="tagTransformOperation">
+      <annotation>
+         <documentation>
+            define a tag transformation operation class
+         </documentation>
+      </annotation>
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The transform operation id.    Referencers will use plugin-qualified references.   i.e if the plugin extending this was &lt;code&gt;org.foo.bar&lt;/code&gt;,  then the meta data instance that referenced this operation would specify:
+	&lt;pre&gt;
+		&lt;operation id=&quot;org.foo.bar.MyTransformId&quot;/&gt;
+	&lt;/pre&gt;
+	
+The exception to this rule is that if the reference is not plugin-qualified, then the reference is assumed to be a &lt;i&gt;core&lt;/i&gt; transformation and uses the &lt;code&gt;org.eclipse.jst.pagedesigner&lt;/code&gt; prefix.
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  class extending the &lt;code&gt;org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation&lt;/code&gt;
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation:"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
    <annotation>
       <appInfo>
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         [Enter the first release in which this extension point appears.]
+         2.0
       </documentation>
    </annotation>
 
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
 
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
 
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
 
    <annotation>
       <appInfo>
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         /*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-
+         Copyright 2006 Sybase 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
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/popupMenuContributor.exsd b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/popupMenuContributor.exsd
index 6f08030..27956f4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/popupMenuContributor.exsd
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/popupMenuContributor.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.jst.pagedesigner" id="popupMenuContributor" name="popupMenu Contributor"/>
       </appInfo>
       <documentation>
-         [Enter description of this extension point.]
+         &lt;p&gt;&lt;b&gt;This extension point is provisional and subject to change&lt;/b&gt;&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -66,34 +66,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
+         2.0
       </documentation>
    </annotation>
 
@@ -102,18 +75,8 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         /*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-
+         Copyright 2006 Sybase 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
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/propertyContributor.exsd b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/propertyContributor.exsd
index ef93be6..faf3ce6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/propertyContributor.exsd
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/propertyContributor.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.jst.pagedesigner" id="propertyContributor" name="property contributor"/>
       </appInfo>
       <documentation>
-         [Enter description of this extension point.]
+         &lt;p&gt;&lt;b&gt;This extension point is provisional and subject to change&lt;/b&gt;&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -59,34 +59,7 @@
          <meta.section type="since"/>
       </appInfo>
       <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
+         2.0
       </documentation>
    </annotation>
 
@@ -95,18 +68,8 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         /*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-
+         Copyright 2006 Sybase 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
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/propertySections.exsd b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/propertySections.exsd
index 2eb0bc8..51218c6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/propertySections.exsd
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/propertySections.exsd
@@ -6,7 +6,7 @@
          <meta.schema plugin="org.eclipse.jst.pagedesigner" id="propertySections" name="Property Sections"/>
       </appInfo>
       <documentation>
-         
+         &lt;p&gt;&lt;b&gt;This extension point is deprecated and will be removed before WTP 3.0GA.&lt;/b&gt;&lt;/p&gt;
       </documentation>
    </annotation>
 
@@ -26,6 +26,14 @@
    </element>
 
    <element name="propertySections">
+      <annotation>
+         <appInfo>
+            <meta.element deprecated="true"/>
+         </appInfo>
+         <documentation>
+            see http://wiki.eclipse.org/Enhancements_to_WPE_Property_Pages
+         </documentation>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="propertySection" minOccurs="1" maxOccurs="unbounded"/>
@@ -111,30 +119,31 @@
 
    <annotation>
       <appInfo>
-         <meta.section type="examples"/>
+         <meta.section type="since"/>
       </appInfo>
       <documentation>
-         
+         2.0
       </documentation>
    </annotation>
 
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         deprecated and unused
+      </documentation>
+   </annotation>
+
+
    <annotation>
       <appInfo>
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         /*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-
+         Copyright 2006 Sybase 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
       </documentation>
    </annotation>
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/tagCreationFactories.exsd b/jsf/plugins/org.eclipse.jst.pagedesigner/schema/tagCreationFactories.exsd
deleted file mode 100644
index 3f0b667..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/schema/tagCreationFactories.exsd
+++ /dev/null
@@ -1,112 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.jst.pagedesigner">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.jst.pagedesigner" id="tagCreationFactories" name="tagCreationFactories"/>
-      </appInfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence minOccurs="0" maxOccurs="unbounded">
-            <element ref="tagCreatorFactory"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="tagCreatorFactory">
-      <complexType>
-         <attribute name="uri" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="factory" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="java" basedOn="org.eclipse.jst.pagedesigner.itemcreation.ITagCreator"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IHTMLConstants.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IHTMLConstants.java
index edd96d4..30c23e4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IHTMLConstants.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IHTMLConstants.java
@@ -11,485 +11,1137 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner;
 
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory;
+import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocType;
+
 /**
  * @author mengbo
  */
 public class IHTMLConstants {
-	public static final String TAG_A = "a"; // anchor
+	/**
+	 * anchor tag name
+	 */
+	public static final String TAG_A = "a";
 
-	public static final String TAG_ABBR = "abbr"; // abbreviated form (e.g.,
+	/**
+	 * abbreviated form (e.g.,WWW, HTTP, etc.) tag name
+	 */
+	public static final String TAG_ABBR = "abbr"; // 
 
-	// WWW, HTTP, etc.)
-
+	/**
+	 * acronym tag name
+	 */
 	public static final String TAG_ACRONYM = "acronym";
 
-	public static final String TAG_ADDRESS = "address"; // information on author
+	/**
+	 * address tag name
+	 */
+	public static final String TAG_ADDRESS = "address";
 
-	public static final String TAG_APPLET = "applet"; // Java applet
+	/**
+	 * Java applet tag name
+	 */
+	public static final String TAG_APPLET = "applet";
 
-	public static final String TAG_AREA = "area"; // client-side image map
+	/**
+	 * client-side image map tag name
+	 */
+	public static final String TAG_AREA = "area";
 
 	// area
 
-	public static final String TAG_B = "b"; // bold text style
+	/**
+	 * bold text style tag name
+	 */
+	public static final String TAG_B = "b";
 
-	public static final String TAG_BASE = "base"; // document base URI
+	/**
+	 * document base URI tag name
+	 */
+	public static final String TAG_BASE = "base";
 
-	public static final String TAG_BASEFONT = "basefont"; // base font size
+	/**
+	 * base font size tag name
+	 */
+	public static final String TAG_BASEFONT = "basefont";
 
-	public static final String TAG_BDO = "bdo"; // I18N BiDi over-ride
+	/**
+	 * I18N BiDi over-ride tag name
+	 */
+	public static final String TAG_BDO = "bdo"; 
 
-	public static final String TAG_BIG = "big"; // large text style
+	/**
+	 * large text style tag name
+	 */
+	public static final String TAG_BIG = "big";
 
-	public static final String TAG_BLOCKQUOTE = "blockquote"; // long
+	/**
+	 * blockquote tag name
+	 */
+	public static final String TAG_BLOCKQUOTE = "blockquote";
 
 	// quotation
 
-	public static final String TAG_BODY = "body"; // document body
+	/**
+	 * document body tag name
+	 */
+	public static final String TAG_BODY = "body";
 
-	public static final String TAG_BR = "br"; // forced line break
+	/**
+	 * forced line break tag name
+	 */
+	public static final String TAG_BR = "br";
 
-	public static final String TAG_BUTTON = "button"; // push button
+	/**
+	 * push button tag name
+	 */
+	public static final String TAG_BUTTON = "button";
 
-	public static final String TAG_CAPTION = "caption"; // table caption
+	/**
+	 * table caption tag name
+	 */
+	public static final String TAG_CAPTION = "caption";
 
-	public static final String TAG_CENTER = "center"; // shorthand for DIV
+	/**
+	 * shorthand for DIV align=center tag name
+	 */
+	public static final String TAG_CENTER = "center";
 
-	// align=center
+	/**
+	 * citation tag name
+	 */
+	public static final String TAG_CITE = "cite";
 
-	public static final String TAG_CITE = "cite"; // citation
+	/**
+	 * computer code fragment tag name
+	 */
+	public static final String TAG_CODE = "code";
 
-	public static final String TAG_CODE = "code"; // computer code fragment
+	/**
+	 * table column tag name
+	 */
+	public static final String TAG_COL = "col";
 
-	public static final String TAG_COL = "col"; // table column
+	/**
+	 * table column group tag name
+	 */
+	public static final String TAG_COLGROUP = "colgroup";
 
-	public static final String TAG_COLGROUP = "colgroup"; // table column
+	/**
+	 * definition description tag name
+	 */
+	public static final String TAG_DD = "dd";
 
-	// group
+	/**
+	 * deleted text tag name
+	 */
+	public static final String TAG_DEL = "del";
 
-	public static final String TAG_DD = "dd"; // definition description
+	/**
+	 * instance definition tag name
+	 */
+	public static final String TAG_DFN = "dfn"; 
 
-	public static final String TAG_DEL = "del"; // deleted text
+	/**
+	 * directory list tag name
+	 */
+	public static final String TAG_DIR = "dir";
 
-	public static final String TAG_DFN = "dfn"; // instance definition
+	/**
+	 * generic language/style container (div) tag name
+	 */
+	public static final String TAG_DIV = "div";
 
-	public static final String TAG_DIR = "dir"; // directory list
+	/**
+	 * definition list tag name
+	 */
+	public static final String TAG_DL = "dl";
 
-	public static final String TAG_DIV = "div"; // generic language/style
+	/**
+	 * definition term tag name
+	 */
+	public static final String TAG_DT = "dt";
 
-	// container
+	/**
+	 * emphasis tag name
+	 */
+	public static final String TAG_EM = "em";
 
-	public static final String TAG_DL = "dl"; // definition list
+	/**
+	 * fieldset tag name
+	 */
+	public static final String TAG_FIELDSET = "fieldset";
 
-	public static final String TAG_DT = "dt"; // definition term
+	/**
+	 * local change to font (font) tag name
+	 */
+	public static final String TAG_FONT = "font"; 
 
-	public static final String TAG_EM = "em"; // emphasis
+	/**
+	 * form tag name
+	 */
+	public static final String TAG_FORM = "form";
 
-	public static final String TAG_FIELDSET = "fieldset"; // form control
+	/**
+	 * frame tag name
+	 */
+	public static final String TAG_FRAME = "frame";
 
-	// group
+	/**
+	 * frameset tag name
+	 */
+	public static final String TAG_FRAMESET = "frameset"; 
+	
+	/**
+	 * h1 tag name
+	 */
+	public static final String TAG_H1 = "h1"; 
 
-	public static final String TAG_FONT = "font"; // local change to font
+	/**
+	 * h2 tag name
+	 */
+	public static final String TAG_H2 = "h2"; 
 
-	public static final String TAG_FORM = "form"; // interactive form
+	/**
+	 * h3 tag name
+	 */
+	public static final String TAG_H3 = "h3"; 
 
-	public static final String TAG_FRAME = "frame"; // subwindow
+	/**
+	 * h4 tag name
+	 */
+	public static final String TAG_H4 = "h4"; 
+	
+	/**
+	 * h5 tag name
+	 */
+	public static final String TAG_H5 = "h5";
 
-	public static final String TAG_FRAMESET = "frameset"; // window
+	/**
+	 * h6 tag name
+	 */
+	public static final String TAG_H6 = "h6";
 
-	// subdivision
+	/**
+	 * head tag name
+	 */
+	public static final String TAG_HEAD = "head";
 
-	public static final String TAG_H1 = "h1"; // heading
+	/**
+	 * horizontal rule tag name
+	 */
+	public static final String TAG_HR = "hr"; 
 
-	public static final String TAG_H2 = "h2"; // heading
+	/**
+	 * document root element (html) tag name
+	 */
+	public static final String TAG_HTML = "html";
 
-	public static final String TAG_H3 = "h3"; // heading
+	/**
+	 * italic text style tag name
+	 */
+	public static final String TAG_I = "i";
 
-	public static final String TAG_H4 = "h4"; // heading
+	/**
+	 * inline subwindow (iframe) tag name
+	 */
+	public static final String TAG_IFRAME = "iframe";
 
-	public static final String TAG_H5 = "h5"; // heading
+	/**
+	 * Embedded image tag name
+	 */
+	public static final String TAG_IMG = "img"; 
 
-	public static final String TAG_H6 = "h6"; // heading
+	/**
+	 * input tag name
+	 */
+	public static final String TAG_INPUT = "input";
 
-	public static final String TAG_HEAD = "head"; // document head
+	/**
+	 * inserted text tag name
+	 */
+	public static final String TAG_INS = "ins";
 
-	public static final String TAG_HR = "hr"; // horizontal rule
+	/**
+	 * isindex tag name
+	 */
+	public static final String TAG_ISINDEX = "isindex";
 
-	public static final String TAG_HTML = "html"; // document root element
+	/**
+	 * text to be entered by the user tag name
+	 */
+	public static final String TAG_KBD = "kbd";
 
-	public static final String TAG_I = "i"; // italic text style
+	/**
+	 * form field label text tag name
+	 */
+	public static final String TAG_LABEL = "label"; 
 
-	public static final String TAG_IFRAME = "iframe"; // inline subwindow
+	/**
+	 * fieldset legend tag name
+	 */
+	public static final String TAG_LEGEND = "legend";
 
-	public static final String TAG_IMG = "img"; // Embedded image
+	/**
+	 * list item tag name
+	 */
+	public static final String TAG_LI = "li"; 
 
-	public static final String TAG_INPUT = "input"; // form control
+	/**
+	 * media-independent link tag name
+	 */
+	public static final String TAG_LINK = "link";
 
-	public static final String TAG_INS = "ins"; // inserted text
+	/**
+	 * client-side image map tag name
+	 */
+	public static final String TAG_MAP = "map"; 
 
-	public static final String TAG_ISINDEX = "isindex"; // single line prompt
+	/**
+	 * menu list tag name
+	 */
+	public static final String TAG_MENU = "menu";
 
-	public static final String TAG_KBD = "kbd"; // text to be entered by the
+	/**
+	 * generic metainformation tag name
+	 */
+	public static final String TAG_META = "meta";
 
-	// user
-
-	public static final String TAG_LABEL = "label"; // form field label text
-
-	public static final String TAG_LEGEND = "legend"; // fieldset legend
-
-	public static final String TAG_LI = "li"; // list item
-
-	public static final String TAG_LINK = "link"; // a media-independent link
-
-	public static final String TAG_MAP = "map"; // client-side image map
-
-	public static final String TAG_MENU = "menu"; // menu list
-
-	public static final String TAG_META = "meta"; // generic metainformation
-
+	/**
+	 * noembed tag name
+	 */
 	public static final String TAG_NOEMBED = "noembed";
 
-	public static final String TAG_NOFRAMES = "noframes"; // alternate content
+	/**
+	 * container for non-frame-based
+     * rendering (noframes) tag name
+	 */
+	public static final String TAG_NOFRAMES = "noframes";
 
-	// container for non
-	// frame-based
-	// rendering
+	// 
 
-	public static final String TAG_NOSCRIPT = "noscript"; // alternate content
+	/**
+	 * container for non-script-based
+     * rendering (noscript) tag name
+	 */
+	public static final String TAG_NOSCRIPT = "noscript";
 
-	// container for non
-	// script-based
-	// rendering
+	// 
 
-	public static final String TAG_OBJECT = "object"; // generic embedded
+	/**
+	 * generic embedded (object) tag name
+	 */
+	public static final String TAG_OBJECT = "object";
 
-	// object
+	/**
+	 * ordered list tag name
+	 */
+	public static final String TAG_OL = "ol";
 
-	public static final String TAG_OL = "ol"; // ordered list
+	/**
+	 * option group tag name
+	 */
+	public static final String TAG_OPTGROUP = "optgroup"; 
 
-	public static final String TAG_OPTGROUP = "optgroup"; // option group
+	/**
+	 * selectable choice tag name
+	 */
+	public static final String TAG_OPTION = "option";
 
-	public static final String TAG_OPTION = "option"; // selectable choice
+	/**
+	 * paragraph tag name
+	 */
+	public static final String TAG_P = "p";
 
-	public static final String TAG_P = "p"; // paragraph
+	/**
+	 * named property value tag name
+	 */
+	public static final String TAG_PARAM = "param";
 
-	public static final String TAG_PARAM = "param"; // named property value
+	/**
+	 * preformatted text tag name
+	 */
+	public static final String TAG_PRE = "pre";
 
-	public static final String TAG_PRE = "pre"; // preformatted text
+	/**
+	 * short inline quotation tag name
+	 */
+	public static final String TAG_Q = "q";
 
-	public static final String TAG_Q = "q"; // short inline quotation
+	/**
+	 * strike-through text style tag name
+	 */
+	public static final String TAG_S = "s"; 
 
-	public static final String TAG_S = "s"; // strike-through text style
-
-	public static final String TAG_SAMP = "samp"; // sample program output,
+	/**
+	 * sample program output tag name
+	 */
+	public static final String TAG_SAMP = "samp";
 
 	// scripts, etc.
 
-	public static final String TAG_SCRIPT = "script"; // script statements
+	/**
+	 * script statements tag name
+	 */
+	public static final String TAG_SCRIPT = "script"; 
 
-	public static final String TAG_SELECT = "select"; // option selector
+	/**
+	 * option selector tag name
+	 */
+	public static final String TAG_SELECT = "select"; 
 
-	public static final String TAG_SMALL = "small"; // small text style
+	/**
+	 * small text style tag name
+	 */
+	public static final String TAG_SMALL = "small"; 
 
-	public static final String TAG_SPAN = "span"; // generic language/style
+	/**
+	 * generic language/style tag name
+	 */
+	public static final String TAG_SPAN = "span";
 
 	// container
 
-	public static final String TAG_STRIKE = "strike"; // strike-through text
+	/**
+	 * strike-through text tag name
+	 */
+	public static final String TAG_STRIKE = "strike";
 
-	public static final String TAG_STRONG = "strong"; // strong emphasis
+	/**
+	 * strong emphasis tag name
+	 */
+	public static final String TAG_STRONG = "strong";
 
-	public static final String TAG_STYLE = "style"; // style info
+	/**
+	 *  style info tag name
+	 */
+	public static final String TAG_STYLE = "style";
 
-	public static final String TAG_SUB = "sub"; // subscript
+	/**
+	 * subscript tag name
+	 */
+	public static final String TAG_SUB = "sub";
 
-	public static final String TAG_SUP = "sup"; // superscript
+	/**
+	 * superscript tag name
+	 */
+	public static final String TAG_SUP = "sup";
 
+	/**
+	 * table tag name
+	 */
 	public static final String TAG_TABLE = "table";
 
-	public static final String TAG_TBODY = "tbody"; // table body
+	/**
+	 *  table body tag name
+	 */
+	public static final String TAG_TBODY = "tbody";
 
-	public static final String TAG_TD = "td"; // table data cell
+	/**
+	 * table data cell tag name
+	 */
+	public static final String TAG_TD = "td";
 
-	public static final String TAG_TEXTAREA = "textarea"; // multi-line text
+	/**
+	 * multi-line text
+	 */
+	public static final String TAG_TEXTAREA = "textarea";
 
 	// field
 
-	public static final String TAG_TFOOT = "tfoot"; // table footer
+	/**
+	 * table footer tag name
+	 */
+	public static final String TAG_TFOOT = "tfoot";
 
-	public static final String TAG_TH = "th"; // table header cell
+	/**
+	 * table header cell tag name
+	 */
+	public static final String TAG_TH = "th";
 
-	public static final String TAG_THEAD = "thead"; // table header
+	/**
+	 * table header tag name
+	 */
+	public static final String TAG_THEAD = "thead";
 
-	public static final String TAG_TITLE = "title"; // document title
+	/**
+	 * document title tag name
+	 */
+	public static final String TAG_TITLE = "title";
 
-	public static final String TAG_TR = "tr"; // table row
+	/**
+	 * table row tag name
+	 */
+	public static final String TAG_TR = "tr";
 
-	public static final String TAG_TT = "tt"; // teletype or monospaced text
+	/**
+	 * teletype or monospaced text tag name
+	 */
+	public static final String TAG_TT = "tt"; 
 
 	// style
 
-	public static final String TAG_U = "u"; // underlined text style
+	/**
+	 * underlined text style tag name
+	 */
+	public static final String TAG_U = "u"; 
 
-	public static final String TAG_UL = "ul"; // unordered list
+	/**
+	 * unordered list tag name
+	 */
+	public static final String TAG_UL = "ul";
 
-	public static final String TAG_VAR = "var"; // instance of a variable or
+	/**
+	 * instance of a variable tag name
+	 */
+	public static final String TAG_VAR = "var";
 
-	// program argument
+	/**
+	 * Tag identifier for an HTML form tag
+	 */
+	public static final TagIdentifier TAG_IDENTIFIER_HTML_FORM =
+	    TagIdentifierFactory.createJSPTagWrapper(CMDocType.HTML_DOC_TYPE, TAG_FORM);
+	
+    // program argument
 
+	/**
+	 * abbr attribute
+	 */
 	public static final String ATTR_ABBR = "abbr";
 
+	/**
+	 * accept-charset attribute
+	 */
 	public static final String ATTR_ACCEPTCHARSET = "accept-charset";
 
+	/**
+	 * accept attribute
+	 */
 	public static final String ATTR_ACCEPT = "accept";
 
+	/**
+	 * access key attribute
+	 */
 	public static final String ATTR_ACCESSKEY = "accesskey";
 
+	/**
+	 * action attribute
+	 */
 	public static final String ATTR_ACTION = "action";
 
+	/**
+	 * align attribute
+	 */
 	public static final String ATTR_ALIGN = "align";
 
+	/**
+	 * alink attribute
+	 */
 	public static final String ATTR_ALINK = "alink";
 
+	/**
+	 * alt attribute
+	 */
 	public static final String ATTR_ALT = "alt";
 
+	/**
+	 * archive attribute
+	 */
 	public static final String ATTR_ARCHIVE = "archive";
 
+	/**
+	 * axis attribute
+	 */
 	public static final String ATTR_AXIS = "axis";
 
+	/**
+	 * background attribute
+	 */
 	public static final String ATTR_BACKGROUND = "background";
 
+	/**
+	 * bgcolor attribute
+	 */
 	public static final String ATTR_BGCOLOR = "bgcolor";
 
+	/**
+	 * border attribute
+	 */
 	public static final String ATTR_BORDER = "border";
 
+	/**
+	 * cellpadding attribute
+	 */
 	public static final String ATTR_CELLPADDING = "cellpadding";
 
+	/**
+	 * cellspacing attribute
+	 */
 	public static final String ATTR_CELLSPACING = "cellspacing";
 
+	/**
+	 * char attribute
+	 */
 	public static final String ATTR_CHAR = "char";
 
+	/**
+	 * charoff attribute
+	 */
 	public static final String ATTR_CHAROFF = "charoff";
 
+	/**
+	 * charset attribute
+	 */
 	public static final String ATTR_CHARSET = "charset";
 
+	/**
+	 * checked attribute
+	 */
 	public static final String ATTR_CHECKED = "checked";
 
+	/**
+	 * cite attribute
+	 */
 	public static final String ATTR_CITE = "cite";
 
+	/**
+	 * class attribute
+	 */
 	public static final String ATTR_CLASS = "class";
 
+	/**
+	 * classid attribute
+	 */
 	public static final String ATTR_CLASSID = "classid";
 
+	/**
+	 * clear attribute
+	 */
 	public static final String ATTR_CLEAR = "clear";
 
+	/**
+	 * code attribute
+	 */
 	public static final String ATTR_CODE = "code";
 
+	/**
+	 * codebase attribute
+	 */
 	public static final String ATTR_CODEBASE = "codebase";
 
+	/**
+	 * code type attribute
+	 */
 	public static final String ATTR_CODETYPE = "codetype";
 
+	/**
+	 * color attribute
+	 */
 	public static final String ATTR_COLOR = "color";
 
+	/**
+	 * cols attribute
+	 */
 	public static final String ATTR_COLS = "cols";
 
+	/**
+	 * colspan attribute
+	 */
 	public static final String ATTR_COLSPAN = "colspan";
 
+	/**
+	 * compact attribute
+	 */
 	public static final String ATTR_COMPACT = "compact";
 
+	/**
+	 * content attribute
+	 */
 	public static final String ATTR_CONTENT = "content";
 
+	/**
+	 * coords attribute
+	 */
 	public static final String ATTR_COORDS = "coords";
 
+	/**
+	 * data attribute
+	 */
 	public static final String ATTR_DATA = "data";
 
+	/**
+	 * datetime attribute
+	 */
 	public static final String ATTR_DATETIME = "datetime";
 
+	/**
+	 * declare attribute
+	 */
 	public static final String ATTR_DECLARE = "declare";
 
+	/**
+	 * defer attribute
+	 */
 	public static final String ATTR_DEFER = "defer";
 
+	/**
+	 * dir attribute
+	 */
 	public static final String ATTR_DIR = "dir";
 
+	/**
+	 * disabled attribute
+	 */
 	public static final String ATTR_DISABLED = "disabled";
 
+	/**
+	 * enctype attribute
+	 */
 	public static final String ATTR_ENCTYPE = "enctype";
 
+	/**
+	 * face attribute
+	 */
 	public static final String ATTR_FACE = "face";
 
+	/**
+	 * for  attribute
+	 */
 	public static final String ATTR_FOR = "for";
 
+	/**
+	 * frame attribute
+	 */
 	public static final String ATTR_FRAME = "frame";
 
+	/**
+	 * frameborder attribute
+	 */
 	public static final String ATTR_FRAMEBORDER = "frameborder";
 
+	/**
+	 * headers attribute
+	 */
 	public static final String ATTR_HEADERS = "headers";
 
+	/**
+	 * height attribute
+	 */
 	public static final String ATTR_HEIGHT = "height";
 
+	/**
+	 * href  attribute
+	 */
 	public static final String ATTR_HREF = "href";
 
+	/**
+	 * hreflang attribute
+	 */
 	public static final String ATTR_HREFLANG = "hreflang";
 
+	/**
+	 * hspace attribute
+	 */
 	public static final String ATTR_HSPACE = "hspace";
 
+	/**
+	 * http-equiv attribute
+	 */
 	public static final String ATTR_HTTPEQUIV = "http-equiv";
 
+	/**
+	 * id attribute
+	 */
 	public static final String ATTR_ID = "id";
 
+	/**
+	 * ismap attribute
+	 */
 	public static final String ATTR_ISMAP = "ismap";
 
+	/**
+	 * label attribute
+	 */
 	public static final String ATTR_LABEL = "label";
 
+	/**
+	 * lang attribute
+	 */
 	public static final String ATTR_LANG = "lang";
 
+	/**
+	 * language attribute
+	 */
 	public static final String ATTR_LANGUAGE = "language";
 
+	/**
+	 * link attribute
+	 */
 	public static final String ATTR_LINK = "link";
 
+	/**
+	 * longdesc attribute
+	 */
 	public static final String ATTR_LONGDESC = "longdesc";
 
+	/**
+	 *  marginheight attribute
+	 */
 	public static final String ATTR_MARGINHEIGHT = "marginheight";
 
+	/**
+	 * margin width attribute
+	 */
 	public static final String ATTR_MARGINWIDTH = "marginwidth";
 
+	/**
+	 * maxlength attribute
+	 */
 	public static final String ATTR_MAXLENGTH = "maxlength";
 
+	/**
+	 * media attribute
+	 */
 	public static final String ATTR_MEDIA = "media";
 
+	/**
+	 * method attribute
+	 */
 	public static final String ATTR_METHOD = "method";
 
+	/**
+	 * multiple attribute
+	 */
 	public static final String ATTR_MULTIPLE = "multiple";
 
+	/**
+	 * name attribute
+	 */
 	public static final String ATTR_NAME = "name";
 
+	/**
+	 * nohref attribute
+	 */
 	public static final String ATTR_NOHREF = "nohref";
 
+	/**
+	 * noresize attribute
+	 */
 	public static final String ATTR_NORESIZE = "noresize";
 
+	/**
+	 * noshade attribute
+	 */
 	public static final String ATTR_NOSHADE = "noshade";
 
+	/**
+	 * nowrap attribute
+	 */
 	public static final String ATTR_NOWRAP = "nowrap";
 
+	/**
+	 * object attribute
+	 */
 	public static final String ATTR_OBJECT = "object";
 
+	/**
+	 * onblur attribute
+	 */
 	public static final String ATTR_ONBLUR = "onblur";
 
+	/**
+	 * onchange attribute
+	 */
 	public static final String ATTR_ONCHANGE = "onchange";
 
+	/**
+	 * onclick attribute
+	 */
 	public static final String ATTR_ONCLICK = "onclick";
 
+	/**
+	 * ondblclick attribute
+	 */
 	public static final String ATTR_ONDBLCLICK = "ondblclick";
 
+	/**
+	 * onfocus attribute
+	 */
 	public static final String ATTR_ONFOCUS = "onfocus";
 
+	/**
+	 * onkeydown attribute
+	 */
 	public static final String ATTR_ONKEYDOWN = "onkeydown";
 
+	/**
+	 * onkeypress attribute
+	 */
 	public static final String ATTR_ONKEYPRESS = "onkeypress";
 
+	/**
+	 * onkeyup attribute
+	 */
 	public static final String ATTR_ONKEYUP = "onkeyup";
 
+	/**
+	 * onload attribute
+	 */
 	public static final String ATTR_ONLOAD = "onload";
 
+	/**
+	 * onmousedown attribute
+	 */
 	public static final String ATTR_ONMOUSEDOWN = "onmousedown";
 
+	/**
+	 * onmousemove attribute
+	 */
 	public static final String ATTR_ONMOUSEMOVE = "onmousemove";
 
+	/**
+	 * onmouseout attribute
+	 */
 	public static final String ATTR_ONMOUSEOUT = "onmouseout";
 
+	/**
+	 * onmouseover attribute
+	 */
 	public static final String ATTR_ONMOUSEOVER = "onmouseover";
 
+	/**
+	 * onmouseup attribute
+	 */
 	public static final String ATTR_ONMOUSEUP = "onmouseup";
 
+	/**
+	 * onreset attribute
+	 */
 	public static final String ATTR_ONRESET = "onreset";
 
+	/**
+	 * onselect attribute
+	 */
 	public static final String ATTR_ONSELECT = "onselect";
 
+	/**
+	 * onsubmit attribute
+	 */
 	public static final String ATTR_ONSUBMIT = "onsubmit";
 
+	/**
+	 * onunload attribute
+	 */
 	public static final String ATTR_ONUNLOAD = "onunload";
 
+	/**
+	 * profile attribute
+	 */
 	public static final String ATTR_PROFILE = "profile";
 
+	/**
+	 * prompt attribute
+	 */
 	public static final String ATTR_PROMPT = "prompt";
 
+	/**
+	 * readonly attribute
+	 */
 	public static final String ATTR_READONLY = "readonly";
 
+	/**
+	 * rel attribute
+	 */
 	public static final String ATTR_REL = "rel";
 
+	/**
+	 * rev attribute
+	 */
 	public static final String ATTR_REV = "rev";
 
+	/**
+	 * rows attribute
+	 */
 	public static final String ATTR_ROWS = "rows";
 
+	/**
+	 * rowspan attribute
+	 */
 	public static final String ATTR_ROWSPAN = "rowspan";
 
+	/**
+	 * rules attribute 
+	 */
 	public static final String ATTR_RULES = "rules";
 
+	/**
+	 * scheme attribute
+	 */
 	public static final String ATTR_SCHEME = "scheme";
 
+	/**
+	 * scope attribute
+	 */
 	public static final String ATTR_SCOPE = "scope";
 
+	/**
+	 * scrolling attribute
+	 */
 	public static final String ATTR_SCROLLING = "scrolling";
 
+	/**
+	 * selected attribute
+	 */
 	public static final String ATTR_SELECTED = "selected";
 
+	/**
+	 * shape attribute
+	 */
 	public static final String ATTR_SHAPE = "shape";
 
+	/**
+	 * size attribute
+	 */
 	public static final String ATTR_SIZE = "size";
 
+	/**
+	 * span attribute
+	 */
 	public static final String ATTR_SPAN = "span";
 
+	/**
+	 * src attribute
+	 */
 	public static final String ATTR_SRC = "src";
 
+	/**
+	 * standby attribute
+	 */
 	public static final String ATTR_STANDBY = "standby";
 
+	/**
+	 * start attribute
+	 */
 	public static final String ATTR_START = "start";
 
+	/**
+	 * style attribute
+	 */
 	public static final String ATTR_STYLE = "style";
 
+	/**
+	 * summary attribute
+	 */
 	public static final String ATTR_SUMMARY = "summary";
 
+	/**
+	 * tabindex attribute
+	 */
 	public static final String ATTR_TABINDEX = "tabindex";
 
+	/**
+	 * target attribute
+	 */
 	public static final String ATTR_TARGET = "target";
 
+	/**
+	 * text attribute
+	 */
 	public static final String ATTR_TEXT = "text";
 
+	/**
+	 * title attribute
+	 */
 	public static final String ATTR_TITLE = "title";
 
+	/**
+	 * type attribute
+	 */
 	public static final String ATTR_TYPE = "type";
 
+	/**
+	 * usemap attribute
+	 */
 	public static final String ATTR_USEMAP = "usemap";
 
+	/**
+	 * valign attribute
+	 */
 	public static final String ATTR_VALIGN = "valign";
 
+	/**
+	 * value attribute
+	 */
 	public static final String ATTR_VALUE = "value";
 
+	/**
+	 * valuetype attribute
+	 */
 	public static final String ATTR_VALUETYPE = "valuetype";
 
+	/**
+	 * version attribute
+	 */
 	public static final String ATTR_VERSION = "version";
 
+	/**
+	 * vlink attribute
+	 */
 	public static final String ATTR_VLINK = "vlink";
 
+	/**
+	 * vspace attribute
+	 */
 	public static final String ATTR_VSPACE = "vspace";
 
+	/**
+	 * width attribute
+	 */
 	public static final String ATTR_WIDTH = "width";
 
+	/**
+	 * submit type
+	 */
 	public static final String TYPE_SUBMIT = "submit";
 
+	/**
+	 * checkbox type
+	 */
 	public static final String TYPE_CHECKBOX = "checkbox";
 
+	/**
+	 * radio type
+	 */
 	public static final String TYPE_RADIO = "radio";
 
+	/**
+	 * image type
+	 */
 	public static final String TYPE_IMAGE = "image";
 
+	/**
+	 * password type
+	 */
 	public static final String TYPE_PASSWORD = "password";
 
+	/**
+	 * text type
+	 */
 	public static final String TYPE_TEXT = "text";
 
+	/**
+	 * hidden type
+	 */
 	public static final String TYPE_HIDDEN = "hidden";
 
+	/**
+	 * submit query label
+	 */
 	public static final String SUBMIT_LABEL = "Submit Query";
 
+	/**
+	 * reset label
+	 */
 	public static final String RESET_LABEL = "Reset";
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java
index 2302f09..ef1d758 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/IJMTConstants.java
@@ -17,36 +17,82 @@
  * @author mengbo
  */
 public interface IJMTConstants {
+	/**
+	 * bundle file name
+	 */
 	public static final String PAGEDESIGNER_RESOURCE_BUNDLE_FILE = "org.eclipse.jst.pagedesigner.editors.pagedesigner.JSPEditorMessages"; //$NON-NLS-1$
 
 	// Properties contains general properties and defaults to preferences.
+	/**
+	 * root resource bundle name
+	 */
 	public static final String ROOT_RESOURCEBUNDLE = "org.eclipse.jst.pagedesigner.JMTResources"; //$NON-NLS-1$
 
+	/**
+	 * default property file name
+	 */
 	public static final String DEFAULT_PROPERTIES = "default.properties"; //$NON-NLS-1$
 
+	/**
+	 * default style sheet
+	 */
 	public static final String USERAGENT = "html4.css"; //$NON-NLS-1$
 
+	/**
+	 * html editor id
+	 */
 	public static final String EDITORID_HTML = "org.eclipse.jst.pagedesigner.PageDesignerEditor"; //$NON-NLS-1$
 
+	/**
+	 * show all action preference id
+	 */
 	public static final String PREF_PALETTE_SHOW_ALL = "pref.palette.showall"; //$NON-NLS-1$
 
+	/**
+	 * local name of page designer extension
+	 */
 	public static final String EXTENSION_POINT_PAGEDESIGNER = "pageDesignerExtension"; //$NON-NLS-1$
 
+	/**
+	 * local name of cm registry extension
+	 */
 	public static final String EXTENSION_POINT_CMREGISTRY = "cmRegistry"; //$NON-NLS-1$
 
-	public static final String EXTENSION_POINT_PALETTEITEMCONFIG = "PaletteItemConfigContributions"; //$NON-NLS-1$
-
-	public static final String ATTRIBUTE_PATH_PALETTEITEMCONFIG = "path"; //$NON-NLS-1$
-
-	public static final String ATTRIBUTE_INDEX_PALETTEITEMCONFIG = "index"; //$NON-NLS-1$
-
+	/**
+	 * local name of local drop handler extension
+	 */
 	public static final String LOCAL_DROP_HANDLER = "localDropHandler"; //$NON-NLS-1$
 
+	/**
+	 * local name of tag converter factory extension
+	 */
 	public static final String TAG_CONVERTER_FACTORY = "tagConverterFactory"; //$NON-NLS-1$
 
+	/**
+	 * local name of attribute cell editor factory extension
+	 * @deprecated and unused
+	 */
 	public static final String ATTRIBUTE_CELLEDITOR_FACTORY = "attributeCellEditorFactory"; //$NON-NLS-1$
 
+	/**
+	 * local name of tag attribute cell editor factory extension
+	 */
+	public static final String TAG_ATTRIBUTE_CELLEDITOR_FACTORY = "tagAttributeCellEditorFactory"; //$NON-NLS-1$
+	
+	/**
+	 * local name of tag transform operation extension
+	 */
+	public static final String TAG_TRANSFORM_OPERATION = "tagTransformOperation"; //$NON-NLS-1$
+	
+	/**
+	 * 
+	 * local name of element edit factory extension
+	 */
 	public static final String ELEMENT_EDIT_FACTORY = "elementEditFactory"; //$NON-NLS-1$
 
+	/**
+	 * local name of link creator extension
+	 */
 	public static final String LINK_CREATOR = "linkCreator"; //$NON-NLS-1$
+    
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/JMTResources.properties b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/JMTResources.properties
index eda59e8..b4808a9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/JMTResources.properties
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/JMTResources.properties
@@ -227,9 +227,21 @@
 LoadBundleTagConverter.convertRefresh.MalformedURLException= MalformedURLException in LoadBundleTagConverter
 LoadBundleTagConverter.convertRefresh.IOException= IOException in LoadBundleTagConverter
 
+Warning.TransformOperationFactory.ExtensionNotFound=ITransformOperation id not found in pageDesigner extension registry ("{0}")
+Warning.TransformOperationFactory.CannotLoadOpClass=Unable to load tag transform operation Class for id ("{0}")
 Warning.TransformOperationFactory.ClassNotFound=ITransformOperation class specified by name in metadata not found ("{0}")
 Warning.TransformOperationFactory.IllegalAccess=ITransformOperation class specified by name in metadata could not be legally accessed ("{0}")
 Warning.TransformOperationFactory.Instantiation=ITransformOperation class specified by name in metadata could not be instantiated ("{0}")
-Warning.TransformOperationFactory.NotITransformOperation=ITransformOperation class specified by name in metadata does not implement ITransformOperation ("{0}")
+Warning.TransformOperationFactory.NotAbstractTransformOperation=ITransformOperation class specified by name in metadata does not extend AbstractTransformOperation ("{0}")
 Warning.TransformOperationFactory.UnknownOperationID=Unknown operation ID specified in metadata ("{0}")
 Warning.TransformOperationFactory.TooFewParameters=Too few parameters specified in metadata for operation ("{0}")
+Warning.TransformOperationFactory.RegistryError=Unable to read "{0}" extension registry
+
+#Errors relating to ITagCreator et al.
+Error.TagCreatorMustBeOfType=ITagCreator instances must be of type {0}.
+Error.ProblemLoadingExtensionPoint=Problem loading ITagCreatorFactory extension Point
+Error.ProblemLoadingTagCreatorFactory=Problem loading tag creator factory: {0}
+Error.ProblemLoadingExecutingTagCreator=Problem executing tag creator: {0}
+
+#Property Sheet
+QuickEditTab.no_quick_edit_md=No quick edit properties are available for the current selection
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/PDPlugin.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/PDPlugin.java
index 5d73204..06db1dd 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/PDPlugin.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/PDPlugin.java
@@ -26,6 +26,7 @@
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.ILog;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
@@ -44,8 +45,6 @@
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.eclipse.wst.sse.core.StructuredModelManager;
-import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -138,6 +137,7 @@
 
 	/**
 	 * Returns the shared instance.
+	 * @return the default plugin
 	 */
 	public static PDPlugin getDefault() {
 		return _plugin;
@@ -146,7 +146,7 @@
 	/**
 	 * get the alerts objects associated with this plugin for alerting the user.
 	 * 
-	 * @return
+	 * @return the Alerts object
 	 */
 	public static Alerts getAlerts() {
 		return _alerts;
@@ -154,6 +154,8 @@
 
 	/**
 	 * Returns a logger for the new class using this plugin for reference.
+	 * @param theClass
+	 * @return the Logger object associated with theClass
 	 */
 	public static Logger getLogger(Class theClass) {
 		if (getDefault() != null && getDefault().getRootLogger() != null) {
@@ -164,6 +166,7 @@
 
 	/**
 	 * Returns the plugin's root logger
+	 * @return the root logger
 	 */
 	public Logger getRootLogger() {
 		return _log;
@@ -171,22 +174,22 @@
 
 	/**
 	 * Returns this plugin's unique identifier
-	 * 
-	 * @retun this plugin's unique identifier
+	 * @return the plugin id
 	 */
 	public static String getPluginId() {
 		return getDefault().getBundle().getSymbolicName();
 	}
 
 	/**
-	 * Returns the plugin's resource bundle,
+	 * @return the plugin's resource bundle
 	 */
 	public ResourceBundle getResourceBundle() {
 		return _resourceBundle;
 	}
 
 	/**
-	 * Returns the string from the plugin's resource bundle, or 'key' if not
+	 * @param key 
+	 * @return the string from the plugin's resource bundle, or 'key' if not
 	 * found.
 	 */
 	public static String getResourceString(String key) {
@@ -199,14 +202,14 @@
 	}
 
 	/**
-	 * Returns the plugin's descriptor's resource bundle,
+	 * @return the plugin's descriptor's resource bundle,
 	 */
 	public ResourceBundle getPluginDecriptorBundle() {
 		return Platform.getResourceBundle(getDefault().getBundle());
 	}
 
 	/**
-	 * Returns the plugin's default properties. These are normally used for
+	 * @return the plugin's default properties. These are normally used for
 	 * default preferences.
 	 */
 	public Properties getProperties() {
@@ -214,7 +217,7 @@
 	}
 
 	/**
-	 * Returns the standard display to be used. The method first checks, if the
+	 * @return the standard display to be used. The method first checks, if the
 	 * thread calling this method has an associated dispaly. If so, this display
 	 * is returned. Otherwise the method returns the default display.
 	 */
@@ -228,7 +231,7 @@
 	}
 
 	/**
-	 * Returns the workspace instance.
+	 * @return the workspace instance.
 	 */
 	public static IWorkspace getWorkspace() {
 		return ResourcesPlugin.getWorkspace();
@@ -303,16 +306,30 @@
 	 * Read a file resource. The file should contain any partial path and the
 	 * filename from the plugin base. The caller is responsible for closing the
 	 * file.
+	 * @param file 
+	 * @return the input stream for the file
+	 * @throws MalformedURLException 
+	 * @throws IOException 
 	 */
 	public InputStream readFile(String file) throws MalformedURLException,
 			IOException {
 		return (new URL(_pluginBase, file)).openStream();
 	}
 
+	/**
+	 * @param file
+	 * @return the File associate with the name 'file'
+	 * @throws MalformedURLException
+	 * @throws IOException
+	 */
 	public File getFile(String file) throws MalformedURLException, IOException {
 		return new File((new URL(_pluginBase, file)).getPath());
 	}
 
+	/**
+	 * @return the plugin's install location with the leading "/" removed
+	 * and normalized to the the os string.
+	 */
 	public static Path getInstallLocation() {
 		try {
 			URL url = getDefault().getBundle().getEntry("/");
@@ -335,11 +352,7 @@
 		}
 	}
 
-	public static IModelManager getModelManager() {
-		return StructuredModelManager.getModelManager();
-	}
-
-	/**
+    /**
 	 * Returns the active workbench window.
 	 * 
 	 * @return the active workbench window. this can be null but I've never seen
@@ -378,10 +391,8 @@
 	}
 
 	/**
-	 * Returns the active workbench Shell. Used for some funciton need IShell
+	 * @return the active workbench Shell. Used for some funciton need IShell
 	 * Parameter.
-	 * 
-	 * @return
 	 */
 	public static Shell getActiveWorkbenchShell() {
 		IWorkbenchWindow window = getActiveWorkbenchWindow();
@@ -397,9 +408,7 @@
 	}
 
 	/**
-	 * Returns the active display.
-	 * 
-	 * @return
+	 * @return the active display.
 	 */
 	public static Display getDisplay() {
 		Shell shell = getActiveWorkbenchShell();
@@ -410,9 +419,7 @@
 	}
 
 	/**
-	 * Returns current active project.
-	 * 
-	 * @return
+	 * @return current active project.
 	 */
 	public static IProject getCurrentProject() {
 		IProject curProject = null;
@@ -420,10 +427,30 @@
 				.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
 		IEditorInput input = editor.getEditorInput();
 		IFile inputFile = null;
-		if (input != null && input instanceof IFileEditorInput) {
+		if (input instanceof IFileEditorInput) {
 			inputFile = ((IFileEditorInput) input).getFile();
 			curProject = inputFile.getProject();
 		}
 		return curProject;
 	}
+	
+	/**
+	 * Log status using the default plugin logger
+	 * @param status
+	 */
+	public static void log(IStatus status)
+	{
+	    ILog log = getDefault().getLog();
+	    log.log(status);
+	}
+	
+	/**
+	 * @param message
+	 * @param excp
+	 */
+	public static void log(String message, Throwable excp)
+	{
+	    Status status = new Status(IStatus.ERROR, getPluginId(), message, excp);
+	    log(status);
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/AbstractLinkCreator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/AbstractLinkCreator.java
index c2f6e25..0e7f371 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/AbstractLinkCreator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/AbstractLinkCreator.java
@@ -23,6 +23,10 @@
 public abstract class AbstractLinkCreator implements ILinkCreator,
 		IExecutableExtension {
 	private String _identifier;
+    /**
+     * the link identifier attribute name
+     */
+    private static final String LINK_IDENTIFIER = "linkIdentifier";
 
 	/*
 	 * (non-Javadoc)
@@ -50,6 +54,6 @@
 	 */
 	public void setInitializationData(IConfigurationElement config,
 			String propertyName, Object data) throws CoreException {
-		this._identifier = config.getAttribute(ILinkCreator.LINK_IDENTIFIER);
+		this._identifier = config.getAttribute(LINK_IDENTIFIER);
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/CreateLinkWizard.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/CreateLinkWizard.java
index e36848a..b385663 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/CreateLinkWizard.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/CreateLinkWizard.java
@@ -37,11 +37,16 @@
 
 	private DesignRange _range;
 
-	private Map _linkMap;
+	private Map<String, ILinkCreator> _linkMap;
 
 	private String _linkType;
 
-	public CreateLinkWizard(EditPart part, DesignRange range, Map linkMap) {
+	/**
+	 * @param part
+	 * @param range
+	 * @param linkMap
+	 */
+	public CreateLinkWizard(EditPart part, DesignRange range, Map<String, ILinkCreator> linkMap) {
 		this._part = part;
 		this._range = range;
 		this._linkMap = linkMap;
@@ -77,11 +82,17 @@
 		return true;
 	}
 
+	/**
+	 * @param pageTitle
+	 */
 	public void setPageTitle(String pageTitle) {
 		_pageTitle = pageTitle;
 		initializeDefaultPageImageDescriptor();
 	}
 
+	/**
+	 * 
+	 */
 	protected void initializeDefaultPageImageDescriptor() {
 		ImageDescriptor desc = PDPlugin.getDefault().getImageDescriptor(
 				INTIAL_DEFAULT_PAGE_IMAGE);
@@ -89,6 +100,9 @@
 		setWindowTitle(WIZARD_TITLE);
 	}
 
+	/**
+	 * @return the link type
+	 */
 	public String getChosenLinkType() {
 		return this._linkType;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/ExtensionReader.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/ExtensionReader.java
index 5ef0c1d..6cf3d9f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/ExtensionReader.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/ExtensionReader.java
@@ -12,6 +12,7 @@
 package org.eclipse.jst.pagedesigner.actions.link;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
@@ -30,20 +31,24 @@
 public class ExtensionReader {
 	private static Logger _log = PDPlugin.getLogger(ExtensionReader.class);
 
-	private static ILinkCreator[] _handlers = null;
+	private static List<ILinkCreator> _handlers = null;
 
 	private static final String ATTR_CLASS = "class";
 
-	public static synchronized ILinkCreator[] getAllLinkHandlers() {
+	/** 
+	 * @return the ext-pts for the link handler
+	 * List is not modifiable
+	 */
+	public static synchronized List<ILinkCreator> getAllLinkHandlers() {
 		if (_handlers == null) {
 			_handlers = readAllLinkHandlers();
 		}
-		return _handlers;
+		return Collections.unmodifiableList(_handlers);
 
 	}
 
-	private static ILinkCreator[] readAllLinkHandlers() {
-		List result = new ArrayList();
+	private static List<ILinkCreator> readAllLinkHandlers() {
+	    List<ILinkCreator> result = new ArrayList<ILinkCreator>();
 		IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
 				.getExtensionPoint(PDPlugin.getPluginId(),
 						IJMTConstants.EXTENSION_POINT_PAGEDESIGNER);
@@ -64,7 +69,7 @@
 								.createExecutableExtension(ATTR_CLASS);
 
 						if (obj instanceof ILinkCreator) {
-							result.add(obj);
+							result.add((ILinkCreator)obj);
 						}
 					} catch (CoreException e) {
 						_log
@@ -73,8 +78,6 @@
 				}
 			}
 		}
-		ILinkCreator[] ret = new ILinkCreator[result.size()];
-		result.toArray(ret);
-		return ret;
+		return result;
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/ILinkCreator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/ILinkCreator.java
index 83b332b..0652f37 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/ILinkCreator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/ILinkCreator.java
@@ -20,13 +20,30 @@
  * @version 1.5
  */
 public interface ILinkCreator {
-	public static final String LINK_IDENTIFIER = "linkIdentifier";
 
+	/**
+	 * @param part
+	 * @param range
+	 * @return the link element
+	 */
 	public Element makeLinkElement(EditPart part, DesignRange range);
 
+	/**
+	 * @return link identifier
+	 */
 	public String getLinkIdentifier();
 
+	/**
+	 * @param range
+	 * @return true if can call makeLinkElement
+	 */
 	public boolean canExecute(DesignRange range);
 
+	/**
+	 * @param part
+	 * @param range
+	 * @return a preview string that approximates the result
+	 * of makeLinkElement
+	 */
 	public String getSourcePreview(EditPart part, DesignRange range);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkRequest.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkRequest.java
index 4f1152e..1caa1f8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkRequest.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkRequest.java
@@ -19,19 +19,29 @@
  * @version 1.5
  */
 public class LinkRequest extends Request {
-	private String _identifier = "";
+	private final String _identifier;
 
-	private DesignRange _range = null;
+	private final DesignRange _range;
 
+	/**
+	 * @param identifier
+	 * @param range
+	 */
 	public LinkRequest(String identifier, DesignRange range) {
 		this._identifier = identifier;
 		this._range = range;
 	}
 
+	/**
+	 * @return the identifier
+	 */
 	public String getIdentifier() {
 		return this._identifier;
 	}
 
+	/**
+	 * @return the design range
+	 */
 	public DesignRange getDesignRange() {
 		return this._range;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkUtil.java
index 271b8c1..aeeaf41 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkUtil.java
@@ -26,6 +26,11 @@
  * @version 1.5
  */
 public class LinkUtil {
+	/**
+	 * @param part
+	 * @param range
+	 * @return the select text if part is a text node or null.
+	 */
 	public static String getSelectedText(EditPart part, DesignRange range) {
 		if (part instanceof TextEditPart) {
 			TextEditPart textPart = (TextEditPart) part;
@@ -38,6 +43,11 @@
 		return null;
 	}
 
+	/**
+	 * @param part
+	 * @param range
+	 * @return the text from part split if it is a text node or null
+	 */
 	public static Text splitDomText(EditPart part, DesignRange range) {
 		if (part instanceof TextEditPart) {
 			Text textNode = (Text) part.getModel();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkWizardPage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkWizardPage.java
index f64d5e4..25e120c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkWizardPage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/LinkWizardPage.java
@@ -35,7 +35,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class LinkWizardPage extends WizardPage {
+/*package*/ class LinkWizardPage extends WizardPage {
 	private static final String GROUP_TITLE = PDPlugin
 			.getResourceString("LinkWizardPage.GroupTitle");
 
@@ -44,16 +44,23 @@
 
 	private StyledText _text = null;
 
-	private Map _linkMap = null;
+	private final Map<String, ILinkCreator> _linkMap;
 
 	private String _linkType = null;
 
-	private EditPart _part = null;
+	private final EditPart _part;
 
-	private DesignRange _range = null;
+	private final DesignRange _range;
 
+	/**
+	 * @param pageName
+	 * @param title
+	 * @param editPart
+	 * @param range
+	 * @param linkMap
+	 */
 	public LinkWizardPage(String pageName, String title, EditPart editPart,
-			DesignRange range, Map linkMap) {
+			DesignRange range, Map<String, ILinkCreator> linkMap) {
 		super(pageName, title, null);
 		this._part = editPart;
 		this._range = range;
@@ -83,13 +90,13 @@
 		group.setLayoutData(data);
 
 		String defaultLink = "";
-		Set set = this._linkMap.keySet();
+		Set<String> set = this._linkMap.keySet();
 		int size = set.size();
 		String[] keys = new String[size];
-		Iterator itr = set.iterator();
+		Iterator<String> itr = set.iterator();
 		int i = 0;
 		while (itr.hasNext()) {
-			String key = (String) itr.next();
+			String key = itr.next();
 			keys[i++] = key;
 		}
 		Arrays.sort(keys);
@@ -113,7 +120,7 @@
 		data.heightHint = 50;
 		_text.setLayoutData(data);
 
-		ILinkCreator creator = (ILinkCreator) _linkMap.get(defaultLink);
+		ILinkCreator creator = _linkMap.get(defaultLink);
 		_linkType = creator.getLinkIdentifier();
 		String previewText = creator.getSourcePreview(_part, _range);
 		previewText = previewText == null ? "" : previewText;
@@ -132,19 +139,25 @@
 		return true;
 	}
 
+	/**
+	 * @return the link type
+	 */
 	public String getChosenLinkType() {
 		return this._linkType;
 	}
 
-	class SelectLinkListener extends SelectionAdapter {
+    class SelectLinkListener extends SelectionAdapter {
 		private String _key;
 
+		/**
+		 * @param key
+		 */
 		public SelectLinkListener(String key) {
 			this._key = key;
 		}
 
 		public void widgetSelected(SelectionEvent e) {
-			ILinkCreator creator = (ILinkCreator) _linkMap.get(this._key);
+			ILinkCreator creator = _linkMap.get(this._key);
 			_linkType = creator.getLinkIdentifier();
 			String previewText = creator.getSourcePreview(_part, _range);
 			previewText = previewText == null ? "" : previewText;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/MakeLinkAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/MakeLinkAction.java
index ea6c413..ee8df16 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/MakeLinkAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/MakeLinkAction.java
@@ -13,6 +13,7 @@
 
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -64,7 +65,7 @@
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
 	public void run() {
-		Map map = calAvailableLinkCreator();
+		Map<String, ILinkCreator> map = calAvailableLinkCreator();
 		if (map.size() > 1) {
 			CreateLinkWizard wizard = new CreateLinkWizard(_editPart, _range,
 					map);
@@ -78,10 +79,10 @@
 		}
 		// else must be html link
 		else if (map.size() == 1) {
-			Set set = map.entrySet();
-			Iterator itr = set.iterator();
+			Set<Map.Entry<String, ILinkCreator>> set = map.entrySet();
+			Iterator<Map.Entry<String,ILinkCreator>> itr = set.iterator();
 			while (itr.hasNext()) {
-				ILinkCreator creator = (ILinkCreator) itr.next();
+				ILinkCreator creator =  itr.next().getValue();
 				_linkType = creator.getLinkIdentifier();
 			}
 		}
@@ -199,14 +200,14 @@
 		return null;
 	}
 
-	private Map calAvailableLinkCreator() {
-		Map map = new HashMap();
-		ILinkCreator[] linkCreators = ExtensionReader.getAllLinkHandlers();
-		for (int i = 0, size = linkCreators.length; i < size; i++) {
-			String identifier = linkCreators[i].getLinkIdentifier();
-			boolean canExecute = linkCreators[i].canExecute(_range);
+	private Map<String, ILinkCreator> calAvailableLinkCreator() {
+		Map<String, ILinkCreator> map = new HashMap<String, ILinkCreator>();
+		List<ILinkCreator> linkCreators = ExtensionReader.getAllLinkHandlers();
+		for (ILinkCreator linkCreator : linkCreators) {
+			String identifier = linkCreator.getLinkIdentifier();
+			boolean canExecute = linkCreator.canExecute(_range);
 			if (canExecute) {
-				map.put(identifier, linkCreators[i]);
+				map.put(identifier, linkCreator);
 			}
 		}
 		return map;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/MakeLinkCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/MakeLinkCommand.java
index 9ccd1d1..7c4835f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/MakeLinkCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/link/MakeLinkCommand.java
@@ -11,6 +11,8 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.actions.link;
 
+import java.util.List;
+
 import org.eclipse.gef.EditPart;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jst.pagedesigner.PDPlugin;
@@ -35,6 +37,12 @@
 
 	private Element _ele = null;
 
+	/**
+	 * @param identifier
+	 * @param viewer
+	 * @param part
+	 * @param range
+	 */
 	public MakeLinkCommand(String identifier, IHTMLGraphicalViewer viewer,
 			EditPart part, DesignRange range) {
 		super(identifier, viewer);
@@ -50,10 +58,9 @@
 	 * @see org.eclipse.gef.commands.Command#canExecute()
 	 */
 	public boolean canExecute() {
-		ILinkCreator[] creators = ExtensionReader.getAllLinkHandlers();
+		List<ILinkCreator> creators = ExtensionReader.getAllLinkHandlers();
 		if (creators != null) {
-			for (int i = 0, size = creators.length; i < size; i++) {
-				ILinkCreator linkCreator = creators[i];
+			for (ILinkCreator linkCreator : creators) {
 				String identifier = linkCreator.getLinkIdentifier();
 				if (this._identifier.equalsIgnoreCase(identifier)) {
 					this._linkcreator = linkCreator;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/AlignSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/AlignSupport.java
index e1ac246..aaab7e9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/AlignSupport.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/AlignSupport.java
@@ -23,7 +23,7 @@
  */
 public class AlignSupport {
 
-	public static final String[] ALIGN_VALUES = new String[] {
+	private static final String[] ALIGN_VALUES = new String[] {
 			PDPlugin.getResourceString("AlignSupport.ActionLabel.Left"), //$NON-NLS-1$
 			PDPlugin.getResourceString("AlignSupport.ActionLabel.Center"), //$NON-NLS-1$
 			PDPlugin.getResourceString("AlignSupport.ActionLabel.Right"), //$NON-NLS-1$
@@ -32,6 +32,10 @@
 
 	private static Element[] _nodes = null;
 
+	/**
+	 * @param menu
+	 * @param viewer
+	 */
 	public static void createAlignActions(IMenuManager menu,
 			IHTMLGraphicalViewer viewer) {
 		for (int i = 0; i < ALIGN_VALUES.length; i++) {
@@ -42,6 +46,9 @@
 		}
 	}
 
+	/**
+	 * @param nodes
+	 */
 	public static void setAlignNodes(Element[] nodes) {
 		if (_nodes != nodes) {
 			_nodes = nodes;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ChangeStyleAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ChangeStyleAction.java
index 81ae111..d710e3c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ChangeStyleAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ChangeStyleAction.java
@@ -28,11 +28,13 @@
  * @author mengbo
  */
 public class ChangeStyleAction extends DesignerToolBarAction {
-	private String _expectedTag;
+	private final String _expectedTag;
 
 	/**
 	 * @param text
+	 * @param name 
 	 * @param image
+	 * @param style 
 	 */
 	public ChangeStyleAction(String text, String name, ImageDescriptor image,
 			int style) {
@@ -41,6 +43,13 @@
 		this.setImageDescriptor(image);
 	}
 
+	/**
+	 * @param text
+	 * @param name
+	 * @param enabled
+	 * @param disabled
+	 * @param style
+	 */
 	public ChangeStyleAction(String text, String name, ImageDescriptor enabled,
 			ImageDescriptor disabled, int style) {
 		super(text, style);
@@ -49,13 +58,6 @@
 		setDisabledImageDescriptor(disabled);
 	}
 
-	protected String getExpectedCSSProperty() {
-		return null;
-	}
-
-	protected String getExpectedCSSPropertyValue() {
-		return null;
-	}
 
 	protected boolean isApplied(DOMRange range) {
 		if (range == null) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/DesignerToolBarAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/DesignerToolBarAction.java
index 2e506a4..3e241e3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/DesignerToolBarAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/DesignerToolBarAction.java
@@ -66,12 +66,10 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.texteditor.IUpdate#update()
+	/**
+	 * Update the status
 	 */
-	public void updateStatus() {
+	protected void updateStatus() {
 		DesignRange range = _viewer.getRangeSelection();
 		DOMRange domRange = null;
 		if (range != null) {
@@ -86,8 +84,16 @@
 		}
 	}
 
+	/**
+	 * @param range
+	 * @return ??
+	 */
 	protected abstract boolean isApplied(DOMRange range);
 
+	/**
+	 * @param viewer
+	 * @return true if this action can run
+	 */
 	protected boolean canRun(IHTMLGraphicalViewer viewer) {
 		if (viewer != null && viewer.isInRangeMode()
 				&& viewer.getModel().getDocument().hasChildNodes()) {
@@ -99,6 +105,9 @@
 		return false;
 	}
 
+	/**
+	 * @param viewer
+	 */
 	public void setViewer(IHTMLGraphicalViewer viewer) {
 		if (viewer == _viewer) {
 			return;
@@ -131,6 +140,9 @@
 		}
 	}
 
+	/**
+	 * @return the command for this action or null
+	 */
 	protected abstract Command getCommand();
 
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/HTagsInsertGroupAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/HTagsInsertGroupAction.java
index ec5ee27..28352ca 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/HTagsInsertGroupAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/HTagsInsertGroupAction.java
@@ -24,7 +24,6 @@
 import org.eclipse.jst.pagedesigner.IHTMLConstants;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.dom.DOMRange;
-import org.eclipse.jst.pagedesigner.viewer.DesignRange;
 import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Menu;
@@ -38,6 +37,10 @@
 
 	private static Map _actions = new HashMap();
 
+	/**
+	 * @param image
+	 * @param style
+	 */
 	public HTagsInsertGroupAction(ImageDescriptor image, int style) {
 		super(
 				PDPlugin
@@ -74,6 +77,10 @@
 		return null;
 	}
 
+	/**
+	 * @param parent
+	 * @param name
+	 */
 	protected void addActionToMenu(Menu parent, String name) {
 		DesignerToolBarAction action;
 		if (_actions.get(name) == null) {
@@ -114,15 +121,6 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.jst.pagedesigner.commands.range.InsertTagChangeStyleAction#supportSingle(org.eclipse.jst.pagedesigner.dom.DOMRange)
-	 */
-	protected boolean supportSingle() {
-		return true;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
 	 * @see org.eclipse.jst.pagedesigner.editors.actions.DesignerToolBarAction#canRun(org.eclipse.jst.pagedesigner.dom.DOMRange)
 	 */
 	protected boolean isApplied(DOMRange range) {
@@ -132,15 +130,6 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.jst.pagedesigner.commands.range.InsertTagChangeStyleAction#setEnabled(org.eclipse.jst.pagedesigner.viewer.DesignRange)
-	 */
-	public void setStatus(DesignRange range) {
-		this.setEnabled(true);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
 	 * @see org.eclipse.jface.action.IAction#run()
 	 */
 	public void run() {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/InsertTagChangeStyleAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/InsertTagChangeStyleAction.java
index fd03625..7624a2b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/InsertTagChangeStyleAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/InsertTagChangeStyleAction.java
@@ -26,6 +26,7 @@
 public class InsertTagChangeStyleAction extends ChangeStyleAction {
 	/**
 	 * @param text
+	 * @param tag 
 	 * @param image
 	 * @param style
 	 */
@@ -44,36 +45,14 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.texteditor.IUpdate#update()
-	 */
-	public void update() {
-		if (_viewer == null) {
-			this.setChecked(false);
-			this.setEnabled(false);
-			return;
-		}
-		if (!_viewer.isInRangeMode()) {
-			// XXX: later we may support in range mode.
-			this.setChecked(false);
-			this.setEnabled(false);
-			return;
-		}
-		DesignRange range = _viewer.getRangeSelection();
-		if (range == null || !range.isValid()) {
-			this.setChecked(false);
-			this.setEnabled(false);
-			return;
-		}
-		setEnabled(range);
-	}
+	@Override
+    protected void updateState() 
+	{
+        setEnabled(getDesignRange());
+    }
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.texteditor.IUpdate#update()
+	/**
+	 * @param range
 	 */
 	public void setEnabled(DesignRange range) {
 		DOMRange domRange = null;
@@ -90,7 +69,7 @@
 
 	private boolean canRun(DOMRange range) {
 		if (range != null) {
-			if (EditModelQuery.isSame(range) && !supportSingle()) {
+			if (EditModelQuery.isSame(range)) {
 				return false;
 			}
 			boolean ordered = range.isOrdered();
@@ -109,8 +88,4 @@
 		}
         return false;
 	}
-
-	protected boolean supportSingle() {
-		return false;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ParagraphStyleAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ParagraphStyleAction.java
index bcc8a21..5cefa47 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ParagraphStyleAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ParagraphStyleAction.java
@@ -44,6 +44,12 @@
 		setImageDescriptor(image);
 	}
 
+	/**
+	 * @param text
+	 * @param node
+	 * @param image
+	 * @param style
+	 */
 	public ParagraphStyleAction(String text, Node node, ImageDescriptor image,
 			int style) {
 		super(text, style);
@@ -82,6 +88,10 @@
         return false;
 	}
 
+	/**
+	 * @param common
+	 * @return ??? 
+	 */
 	protected boolean containsTag(Node common) {
 		// the lowest common block parent is the container to apply style.
 		if (_applyingNode == null) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ParagraphSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ParagraphSupport.java
index 52616e4..2d03548 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ParagraphSupport.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/ParagraphSupport.java
@@ -47,12 +47,13 @@
 			PDPlugin.getResourceString("ParagraphSupport.CommandLabel.P"), PDPlugin.getResourceString("ParagraphSupport.CommandLabel.H1"), PDPlugin.getResourceString("ParagraphSupport.CommandLabel.H2"), PDPlugin.getResourceString("ParagraphSupport.CommandLabel.H3"), PDPlugin.getResourceString("ParagraphSupport.CommandLabel.H4"), PDPlugin.getResourceString("ParagraphSupport.CommandLabel.H5"), PDPlugin.getResourceString("ParagraphSupport.CommandLabel.H6"), PDPlugin.getResourceString("ParagraphSupport.CommandLabel.PRE") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
 	};
 
-	public static int getCurrentParagraphMode(DesignRange range) {
-		return 0;
-	}
-
+	/**
+	 * @param man
+	 * @param range
+	 * @param viewer
+	 */
 	public static void createParagraphActions(IMenuManager man,
-			DesignRange range, int currentMode, IHTMLGraphicalViewer viewer) {
+			DesignRange range, IHTMLGraphicalViewer viewer) {
 		ParagraphStyleAction action = new NoneParagraphStyleAction(
 				PDPlugin
 						.getResourceString("ParagraphSupport.CommandLabel.None"), tags, null, IAction.AS_CHECK_BOX); //$NON-NLS-1$
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeActionGroup.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeActionGroup.java
index 4203ccc..ac453f9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeActionGroup.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeActionGroup.java
@@ -193,14 +193,13 @@
 				.getResourceString("ActionGroup.Submenu.ParagraphFormat"));//$NON-NLS-1$
 		submenu.add(action);
 		// Add the submenu.
-		final int mode = ParagraphSupport.getCurrentParagraphMode(selection);
 
 		submenu.addMenuListener(new IMenuListener() {
 
 			public void menuAboutToShow(IMenuManager manager) {
 				submenu.removeAll();
 				ParagraphSupport.createParagraphActions(submenu, selection,
-						mode, viewer);
+						viewer);
 			}
 		});
 		menu.appendToGroup(PageDesignerActionConstants.GROUP_STYLE, submenu);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeStyleAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeStyleAction.java
index ba633ab..2346403 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeStyleAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeStyleAction.java
@@ -21,6 +21,10 @@
 public class RangeStyleAction extends Action {
 	/**
 	 * @param text
+	 * @param range 
+	 * @param htmlTag 
+	 * @param cssProperty 
+	 * @param cssValue 
 	 */
 	public RangeStyleAction(String text, DesignRange range, String htmlTag,
 			String cssProperty, String cssValue) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeStyleSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeStyleSupport.java
index 754870a..60f2364 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeStyleSupport.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/range/RangeStyleSupport.java
@@ -20,20 +20,24 @@
  * @version 1.5
  */
 public class RangeStyleSupport {
-	public static final String[] ActionLabel = new String[] {
+	private static final String[] ActionLabel = new String[] {
 			PDPlugin.getResourceString("RangeStyleSupport.ActionLabel.Bold"),//$NON-NLS-1$
 			PDPlugin.getResourceString("RangeStyleSupport.ActionLabel.Italic"),//$NON-NLS-1$
 			PDPlugin
 					.getResourceString("RangeStyleSupport.ActionLabel.Underline"), }; //$NON-NLS-1$
 
-	public static final String[] HtmlTag = new String[] { "STRONG", "I", "U", }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	private static final String[] HtmlTag = new String[] { "STRONG", "I", "U", }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
-	public static final String[] CSSProperty = new String[] {
+	private static final String[] CSSProperty = new String[] {
 			"font-weight", "font-style", "text-decoration", }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 
-	public static final String[] CSSValue = new String[] { "bolder", "italic",
+	private static final String[] CSSValue = new String[] { "bolder", "italic",
 			"underline", };
 
+	/**
+	 * @param menu
+	 * @param range
+	 */
 	public static void createRangeStyleActions(IMenuManager menu,
 			DesignRange range) {
 		for (int i = 0; i < ActionLabel.length; i++) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/BorderStyleSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/BorderStyleSupport.java
deleted file mode 100644
index 4e968a4..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/BorderStyleSupport.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.actions.single;
-
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jst.pagedesigner.PDPlugin;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
-
-/**
- * @author mengbo
- * @version 1.5
- */
-public class BorderStyleSupport {
-	public static final String VAL_HIDDEN = PDPlugin
-			.getResourceString("BorderStyleSupport.CommandLabel.Hidden"); //$NON-NLS-1$
-
-	public static final String VAL_DOTTED = PDPlugin
-			.getResourceString("BorderStyleSupport.CommandLabel.Dotted"); //$NON-NLS-1$
-
-	public static final String VAL_DASHED = PDPlugin
-			.getResourceString("BorderStyleSupport.CommandLabel.Dashed"); //$NON-NLS-1$
-
-	public static final String VAL_SOLID = PDPlugin
-			.getResourceString("BorderStyleSupport.CommandLabel.Solid"); //$NON-NLS-1$
-
-	public static final String VAL_DOUBLE = PDPlugin
-			.getResourceString("BorderStyleSupport.CommandLabel.Double"); //$NON-NLS-1$
-
-	public static final String VAL_GROOVE = PDPlugin
-			.getResourceString("BorderStyleSupport.CommandLabel.Groove"); //$NON-NLS-1$
-
-	public static final String VAL_RIDGE = PDPlugin
-			.getResourceString("BorderStyleSupport.CommandLabel.Ridge"); //$NON-NLS-1$
-
-	public static final String VAL_INSET = PDPlugin
-			.getResourceString("BorderStyleSupport.CommandLabel.Inset"); //$NON-NLS-1$
-
-	public static final String VAL_OUTSET = PDPlugin
-			.getResourceString("BorderStyleSupport.CommandLabel.Outset"); //$NON-NLS-1$
-
-	public static final String[] BORDERSTYLES = new String[] { VAL_HIDDEN,
-			VAL_DOTTED, VAL_DASHED, VAL_SOLID, VAL_DOUBLE, VAL_GROOVE,
-			VAL_RIDGE, VAL_INSET, VAL_OUTSET };
-
-	public static final String getCurrentBorderStyle(IDOMElement ele) {
-		return VAL_HIDDEN;
-	}
-
-	public static void createParagraphActions(IMenuManager man,
-			IDOMElement ele, String currentMode) {
-		for (int i = 0; i < BORDERSTYLES.length; i++) {
-			BorderStyleAction action = new BorderStyleAction(BORDERSTYLES[i],
-					ele, BORDERSTYLES[i]);
-			if (BORDERSTYLES[i].equalsIgnoreCase(currentMode)) {
-				action.setChecked(true);
-			}
-			man.add(action);
-		}
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ChangeStyleAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ChangeStyleAction.java
index 83a031b..dd2fe69 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ChangeStyleAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ChangeStyleAction.java
@@ -30,15 +30,19 @@
  * @version 1.5
  */
 public class ChangeStyleAction extends Action {
-	private static final String TEXT = PDPlugin
+	private static final String MY_TEXT = PDPlugin
 			.getResourceString("ChangeStyleAction.Text");
 
 	private ElementEditPart _editPart;
 
 	private IDOMElement _element;
 
+	/**
+	 * @param part
+	 * @param ele
+	 */
 	public ChangeStyleAction(ElementEditPart part, IDOMElement ele) {
-		super(TEXT);
+		super(MY_TEXT);
 		this._editPart = part;
 		this._element = ele;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ChangeStylePropertyAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ChangeStylePropertyAction.java
index b89fda7..1fef76f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ChangeStylePropertyAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ChangeStylePropertyAction.java
@@ -31,6 +31,9 @@
 
 	/**
 	 * @param text
+	 * @param ele 
+	 * @param cssProperty 
+	 * @param cssValue 
 	 */
 	public ChangeStylePropertyAction(String text, IDOMElement ele,
 			String cssProperty, String cssValue) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ColorSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ColorSupport.java
index e63f87f..d253dd1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ColorSupport.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/ColorSupport.java
@@ -21,8 +21,8 @@
  * @author mengbo
  * @version 1.5
  */
-public class ColorSupport {
-	public static final String[] COLOR_VALUES = new String[] {
+/*package*/ class ColorSupport {
+	static final String[] COLOR_VALUES = new String[] {
 			PDPlugin.getResourceString("ColorSupport.CommandLabel.Aqua"), //$NON-NLS-1$
 			PDPlugin.getResourceString("ColorSupport.CommandLabel.Black"), //$NON-NLS-1$
 			PDPlugin.getResourceString("ColorSupport.CommandLabel.Blue"), //$NON-NLS-1$
@@ -49,7 +49,7 @@
 	 * @param cssProperty
 	 *            will be "color" or "background-color"
 	 */
-	public static void createColorActions(IMenuManager menu, IDOMElement ele,
+	static void createColorActions(IMenuManager menu, IDOMElement ele,
 			String cssProperty) {
 		boolean needAdditional = true;
 		String currentValue = DOMStyleUtil.getInlineStyleProperty(ele,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/SelectNodeAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/SelectNodeAction.java
index 3a6a729..5724e31 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/SelectNodeAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/SelectNodeAction.java
@@ -17,9 +17,8 @@
  */
 public abstract class SelectNodeAction extends SelectEditPartAction 
 {
-    protected final Node _node;
-    
-    
+    private final Node  _node;
+
     /**
      * @param text
      * @param curNode
@@ -28,5 +27,11 @@
         super(text);
         _node = curNode;
     }
-   
+
+    /**
+     * @return the current node
+     */
+    protected Node getNode() {
+        return _node;
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/StyleSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/StyleSupport.java
index 85a1134..d580d6e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/StyleSupport.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/single/StyleSupport.java
@@ -23,7 +23,12 @@
  * @author mengbo
  * @version 1.5
  */
-public class StyleSupport {
+public final class StyleSupport {
+	/**
+	 * @param menu
+	 * @param part
+	 * @param ele
+	 */
 	public static void createStyleAction(IMenuManager menu,
 			ElementEditPart part, IDOMElement ele) {
 		if (part == null) {
@@ -45,4 +50,9 @@
 		}
 		return false;
 	}
+	
+	private StyleSupport()
+	{
+		// util class; no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/table/TableActionGroup.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/table/TableActionGroup.java
index d52bb3c..f076978 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/table/TableActionGroup.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/table/TableActionGroup.java
@@ -36,7 +36,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class TableActionGroup extends ActionGroup {
+/*package*/ class TableActionGroup extends ActionGroup {
 	// TODO: I think there's a pattern emerging...
     private final static Action action = new Action() {
         // create an empty no-op
@@ -61,14 +61,14 @@
 			return;
 		}
 
-		final ElementEditPart tablePart = context._tablePart;
+		final ElementEditPart tablePart = context.getTablePart();
 
 		if (tablePart == null || !supportTableActions(tablePart)) {
 			return;
 		}
 
-		final int cellRow = context._rowIndex;
-		final int cellColumn = context._columnIndex;
+		final int cellRow = context.getRowIndex();
+		final int cellColumn = context.getColumnIndex();
 
 		String tag = ((IDOMElement) tablePart.getIDOMNode()).getLocalName();
 		final IMenuManager tableMenu = new MenuManager(tag);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/table/TableOperationContext.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/table/TableOperationContext.java
index 6f48192..0981ed3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/table/TableOperationContext.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/actions/table/TableOperationContext.java
@@ -25,13 +25,17 @@
  * @author mengbo
  * @version 1.5
  */
-public class TableOperationContext {
-	public ElementEditPart _tablePart;
+/*package*/ class TableOperationContext {
+	private ElementEditPart _tablePart;
 
-	public int _rowIndex;
+	private int _rowIndex;
 
-	public int _columnIndex;
+	private int _columnIndex;
 
+	/**
+	 * @param part
+	 * @return the operation context for part
+	 */
 	public static TableOperationContext getTableOperationContext(EditPart part) {
 		EditPart originalPart = part;
 		ElementEditPart tablePart = null;
@@ -76,4 +80,18 @@
 		}
 		return null;
 	}
+
+    ElementEditPart getTablePart() {
+        return _tablePart;
+    }
+
+    int getRowIndex() {
+        return _rowIndex;
+    }
+
+    int getColumnIndex() {
+        return _columnIndex;
+    }
+	
+	
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/CreateItemCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/CreateItemCommand.java
index fec20f7..62da037 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/CreateItemCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/CreateItemCommand.java
@@ -11,32 +11,33 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.commands;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
 import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry;
 import org.eclipse.jst.pagedesigner.utils.CommandUtil;
-import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 import org.w3c.dom.Element;
 
 /**
  * @author mengbo
  */
 public class CreateItemCommand extends DesignerCommand {
-	IDOMPosition _position;
+	private final IDOMPosition _position;
 
-	TagToolPaletteEntry _tagItem;
-
-	Element _ele;
+	private final TagToolPaletteEntry _tagItem;
+	private Element _ele;
+	private IAdaptable _customizationData;
 
 	/**
 	 * @param label
-	 * @param viewer
+	 * @param model 
 	 * @param position 
 	 * @param tagItem 
 	 */
-	public CreateItemCommand(String label, IHTMLGraphicalViewer viewer,
+	public CreateItemCommand(String label, IDOMModel model,
 			IDOMPosition position, TagToolPaletteEntry tagItem) {
-		super(label, viewer);
+		super(label, model.getDocument());
 		this._position = position;
 		this._tagItem = tagItem;
 	}
@@ -48,14 +49,40 @@
 	 */
 	protected void doExecute() {
 		Element element = CommandUtil.excuteInsertion(this._tagItem,
-				getViewer(), this._position);
+				getModel(), this._position, this._customizationData);
 		if (element != null) {
 			formatNode(element);
 		}
 		this._ele = element;
 	}
 
-	/*
+	@Override
+    protected void postPostExecute() 
+	{
+        // during JUnit testing, we may not have viewer.
+        // this will cause us not to have undo support,
+        // but should not effect testing for this command
+	    if (getViewer() != null)
+        {
+            super.postPostExecute();
+        }
+    }
+
+    @Override
+    protected boolean prePreExecute() 
+    {
+        // during JUnit testing, we may not have viewer.
+        // this will cause us not to have undo support,
+        // but should not effect testing for this command
+        if (getViewer() != null)
+        {
+            return super.prePreExecute();
+        }
+        
+        return true;
+    }
+
+    /*
 	 * (non-Javadoc)
 	 * 
 	 * @see org.eclipse.jst.pagedesigner.commands.DesignerCommand#getAfterCommandDesignerSelection()
@@ -64,4 +91,31 @@
 		return toDesignSelection(_ele);
 	}
 
+    /**
+     * @param customizationData
+     */
+    public void setCustomizationData(IAdaptable customizationData) 
+    {
+        _customizationData = customizationData;
+    }
+    
+    /**
+     * This method is for test purposes and should generally not be 
+     * used by clients.
+     * 
+     * @return the customization data
+     */
+    protected final IAdaptable getCustomizationData()
+    {
+        return _customizationData;
+    }
+    
+    /**
+     * @return the result of the command execution
+     * TODO: add Object getResult() method to DesignerCommand
+     */
+    protected Element getResult()
+    {
+        return this._ele;
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/DesignResizeComponentCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/DesignResizeComponentCommand.java
index 40c23a8..2124d94 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/DesignResizeComponentCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/DesignResizeComponentCommand.java
@@ -21,7 +21,7 @@
 import org.eclipse.jface.text.source.SourceViewer;
 import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyID;
 import org.eclipse.jst.pagedesigner.editors.HTMLEditor;
-import org.eclipse.jst.pagedesigner.viewer.HTMLGraphicalViewer;
+import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
 import org.w3c.dom.Element;
 
 /**
@@ -54,7 +54,7 @@
 		if (part != null) {
 			EditPartViewer viewer = ((ScalableRootEditPart) part.getParent())
 					.getViewer();
-			HTMLEditor editor = ((HTMLEditor) ((DefaultEditDomain) ((HTMLGraphicalViewer) viewer)
+			HTMLEditor editor = ((HTMLEditor) ((DefaultEditDomain) ((IHTMLGraphicalViewer) viewer)
 					.getEditDomain()).getEditorPart());
 			_viewer = editor.getTextEditor().getTextViewer();
 		}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/DesignerCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/DesignerCommand.java
index 8ace6db..10d6c60 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/DesignerCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/DesignerCommand.java
@@ -48,7 +48,7 @@
  * @author mengbo
  */
 public abstract class DesignerCommand extends Command {
-	private IDOMModel _model;
+	private final IDOMModel _model;
 
 	/**
 	 * the graphical viewer
@@ -74,24 +74,40 @@
 	 *            the node must be a node in the IHTMLGraphicalViewer.
 	 */
 	public DesignerCommand(String label, IDOMNode node) {
-		super(label);
-		this._model = node.getModel();
-		IDOMDocument doc = (IDOMDocument) node.getOwnerDocument();
-
-		EditPart part = (EditPart) doc.getAdapterFor(EditPart.class);
-		if (part != null) {
-			this._viewer = (IHTMLGraphicalViewer) part.getViewer();
-		}
+	    this(label, (IDOMDocument) node.getOwnerDocument());
 	}
 
+	/**
+	 * @param label
+	 * @param document
+	 */
+	public DesignerCommand(String label, IDOMDocument document)
+	{
+	    super(label);
+        this._model = document.getModel();
+        EditPart part = (EditPart) document.getAdapterFor(EditPart.class);
+        if (part != null) {
+            this._viewer = (IHTMLGraphicalViewer) part.getViewer();
+        }
+	}
+	/**
+	 * @return the GEF viewer this command is targeted for
+	 * 
+	 */
 	public IHTMLGraphicalViewer getViewer() {
 		return _viewer;
 	}
 
+	/**
+	 * @return the DOM model that this command will effect
+	 */
 	public IDOMModel getModel() {
 		return _model;
 	}
 
+	/**
+	 * @return the dom document for the model this command will effect
+	 */
 	public IDOMDocument getDocument() {
 		return getModel().getDocument();
 	}
@@ -128,6 +144,7 @@
 	 * prePreExecute and postPostExecute is a pair. prePreExecute() SHOULD NOT
 	 * throw any exception, if it throw any exception, it should catch itself
 	 * and return false to indicate not continue.
+	 * @return true if execution should continue, false if should not 
 	 */
 	protected boolean prePreExecute() {
 		int position = -1;
@@ -246,6 +263,10 @@
 	 */
 	protected abstract ISelection getAfterCommandDesignerSelection();
 
+	/**
+	 * @param range
+	 * @return a selection that contains the dom range or null if one doesn't exist
+	 */
 	protected ISelection toDesignRange(DOMRange range) {
 		try {
 			if (range == null) {
@@ -267,6 +288,10 @@
 
 	}
 
+	/**
+	 * @param node
+	 * @return a selection for the node
+	 */
 	protected IStructuredSelection toDesignSelection(Node node) {
 		if (node instanceof INodeNotifier) {
 			EditPart part = (EditPart) ((INodeNotifier) node)
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/PaletteDropInsertCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/PaletteDropInsertCommand.java
index c8cf59d..dc3ca56 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/PaletteDropInsertCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/PaletteDropInsertCommand.java
@@ -12,18 +12,20 @@
 package org.eclipse.jst.pagedesigner.commands;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
+import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
 import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.dnd.internal.SourceViewerDragDropHelper;
 import org.eclipse.jst.pagedesigner.dom.DOMPosition;
 import org.eclipse.jst.pagedesigner.dom.EditModelQuery;
 import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
-import org.eclipse.jst.pagedesigner.dom.JSFValidatorSupport;
 import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry;
+import org.eclipse.jst.pagedesigner.itemcreation.command.SingletonContainerCreationCommand;
 import org.eclipse.jst.pagedesigner.utils.CommandUtil;
 import org.eclipse.wst.sse.ui.StructuredTextEditor;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
@@ -80,10 +82,23 @@
 					&& //
 					!_tagItem.getURI().equalsIgnoreCase(
 							ITLDConstants.URI_JSP)) {
-				position = JSFValidatorSupport.prepareView(position);
+			    SingletonContainerCreationCommand command = 
+			        new SingletonContainerCreationCommand
+			            (position, IJSFConstants.TAG_IDENTIFIER_VIEW, null);
+			    command.execute();
+			    Iterator it = command.getResult().iterator();
+			    
+			    if (it.hasNext())
+			    {
+	                position = command.getResult().iterator().next();
+			    }
+			    else
+			    {
+			        throw new IllegalStateException("Expected result of command");
+			    }
 			}
 			_element = CommandUtil
-					.excuteInsertion(_tagItem, model, position);
+					.excuteInsertion(_tagItem, model, position, null);
 			if (_element != null) {
 				_nodesToFormat.add(_element);
 				SourceViewerDragDropHelper.getInstance().changeCaret(_editor,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/SourceViewerCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/SourceViewerCommand.java
index f105e3d..2974929 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/SourceViewerCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/SourceViewerCommand.java
@@ -30,14 +30,18 @@
  * @author mengbo
  */
 public abstract class SourceViewerCommand extends Command {
-	protected StructuredTextEditor _editor;
+	/**
+	 * the structured text editor containing the viewer
+	 */
+	protected final StructuredTextEditor _editor;
 
 	private Document _document;
 
 	private Logger _log = PDPlugin.getLogger(SourceViewerCommand.class);
 
 	/**
-	 * 
+	 * @param label 
+	 * @param editor 
 	 */
 	public SourceViewerCommand(String label, StructuredTextEditor editor) {
 		super();
@@ -46,6 +50,9 @@
 		_document = tools.getDOMDocument();
 	}
 
+	/**
+	 * @return the text tools
+	 */
 	protected IDOMSourceEditingTextTools getSourceEditingTextTools() {
 		IDOMSourceEditingTextTools tools = (IDOMSourceEditingTextTools) _editor
 				.getAdapter(ISourceEditingTextTools.class);
@@ -56,6 +63,7 @@
 	 * preExecute and postExecute is a pair. () SHOULD NOT throw any exception,
 	 * if it throw any exception, it should catch itself and return false to
 	 * indicate not continue.
+	 * @return true if preExec succeeded
 	 */
 	protected final boolean preExecute() {
 		int position = 0;
@@ -90,6 +98,9 @@
 		new HTMLFormatProcessorImpl().formatNode(node);
 	}
 
+	/**
+	 * @return the dom model
+	 */
 	protected IDOMModel getModel() {
 		Assert.isTrue(_document != null && _document instanceof IDOMNode);
 		return ((IDOMNode) _document).getModel();
@@ -109,7 +120,13 @@
 		}
 	}
 
+	/**
+	 * execute
+	 */
 	public abstract void doExecute();
 
+	/**
+	 * set the selection
+	 */
 	public abstract void setSelection();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/SwitchSelectionCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/SwitchSelectionCommand.java
index fced248..6092c52 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/SwitchSelectionCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/SwitchSelectionCommand.java
@@ -28,9 +28,16 @@
 import org.w3c.dom.Node;
 import org.w3c.dom.Text;
 
+/**
+ * A command to switch the selection
+ *
+ */
 public class SwitchSelectionCommand extends Command {
 	IHTMLGraphicalViewer _viewer;
 
+	/**
+	 * @param viewer
+	 */
 	public SwitchSelectionCommand(IHTMLGraphicalViewer viewer) {
 		_viewer = viewer;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableDeleteHeaderFooterCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableDeleteHeaderFooterCommand.java
index 31248a9..432e204 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableDeleteHeaderFooterCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableDeleteHeaderFooterCommand.java
@@ -32,6 +32,11 @@
 
 	private boolean _isHeader;
 
+	/**
+	 * @param viewer
+	 * @param table
+	 * @param isHeader
+	 */
 	public TableDeleteHeaderFooterCommand(IHTMLGraphicalViewer viewer,
 			Element table, boolean isHeader) {
 		super(
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableInsertHeaderFooterCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableInsertHeaderFooterCommand.java
index 49b33b5..c3cc31e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableInsertHeaderFooterCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableInsertHeaderFooterCommand.java
@@ -38,6 +38,11 @@
 
 	private TableUtil _tableUtil;
 
+	/**
+	 * @param viewer
+	 * @param table
+	 * @param isHeader
+	 */
 	public TableInsertHeaderFooterCommand(IHTMLGraphicalViewer viewer,
 			Element table, boolean isHeader) {
 		super(
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableInsertRowCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableInsertRowCommand.java
index d725b31..e9acb53 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableInsertRowCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableInsertRowCommand.java
@@ -41,6 +41,7 @@
 	 * @param viewer
 	 * @param table
 	 * @param index
+	 * @param isBefore 
 	 */
 	public TableInsertRowCommand(IHTMLGraphicalViewer viewer, Element table,
 			int index, boolean isBefore) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableResizeColumnCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableResizeColumnCommand.java
index f4e8b82..d11ef19 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableResizeColumnCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableResizeColumnCommand.java
@@ -41,6 +41,12 @@
 
 	private int _delta;
 
+	/**
+	 * @param viewer
+	 * @param table
+	 * @param columnIndex
+	 * @param delta
+	 */
 	public TableResizeColumnCommand(IHTMLGraphicalViewer viewer, Element table,
 			int columnIndex, int delta) {
 		super(
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableResizeRowCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableResizeRowCommand.java
index 19db48b..cdd1002 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableResizeRowCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/html/TableResizeRowCommand.java
@@ -37,6 +37,12 @@
 
 	private int _delta;
 
+	/**
+	 * @param viewer
+	 * @param table
+	 * @param rowIndex
+	 * @param delta
+	 */
 	public TableResizeRowCommand(IHTMLGraphicalViewer viewer, Element table,
 			int rowIndex, int delta) {
 		super(CommandResources
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ApplyStyleCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ApplyStyleCommand.java
index 884c565..2f087a6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ApplyStyleCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ApplyStyleCommand.java
@@ -33,7 +33,7 @@
 
 	private String _cssPropertyValue;
 
-	protected Element _applyingNode;
+	private final Element _applyingNode;
 
 	/**
 	 * @param viewer
@@ -49,8 +49,15 @@
 		this._tag = tag;
 		this._cssProperty = property;
 		this._cssPropertyValue = value;
+		this._applyingNode = null;
 	}
 
+	/**
+	 * @param viewer
+	 * @param node
+	 * @param property
+	 * @param value
+	 */
 	public ApplyStyleCommand(IHTMLGraphicalViewer viewer, Element node,
 			String property, String value) {
 		super(
@@ -59,7 +66,14 @@
 		this._applyingNode = node;
 	}
 
-	/*
+	/**
+	 * @return the applying node (may be null)
+	 */
+	protected final Element getApplyingNode() {
+        return _applyingNode;
+    }
+
+    /*
 	 * (non-Javadoc)
 	 * 
 	 * @see org.eclipse.jst.pagedesigner.commands.DesignerCommand#doExecute()
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/BlockNodeFinder.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/BlockNodeFinder.java
index 6dec925..5f1bbc4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/BlockNodeFinder.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/BlockNodeFinder.java
@@ -31,6 +31,10 @@
 
 	private IDOMPosition _position;
 
+	/**
+	 * @param position
+	 * @param additionalTags
+	 */
 	public BlockNodeFinder(IDOMPosition position, String[] additionalTags) {
 		_position = position;
 		_additionalTags = additionalTags;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ClipboardData.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ClipboardData.java
index 5f0ce33..8900ab4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ClipboardData.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ClipboardData.java
@@ -27,7 +27,7 @@
 	private Control _control;
 
 	/**
-	 * 
+	 * @param control 
 	 */
 	public ClipboardData(Control control) {
 		super();
@@ -71,6 +71,9 @@
 		return null;
 	}
 
+	/**
+	 * @return the clip board data
+	 */
 	public Object getClipboardData() {
 		Clipboard clipboard = new Clipboard(_control.getDisplay());
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/DeleteEdit.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/DeleteEdit.java
index f036180..d7b48ba 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/DeleteEdit.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/DeleteEdit.java
@@ -49,12 +49,17 @@
 	/**
 	 * @param range
 	 * @param viewer
+	 * @param forward 
 	 */
 	public DeleteEdit(DOMRange range, GraphicalViewer viewer, boolean forward) {
 		super(range, viewer);
 		_forward = forward;
 	}
 
+	/**
+	 * @param range
+	 * @param viewer
+	 */
 	public DeleteEdit(DOMRange range, GraphicalViewer viewer) {
 		super(range, viewer);
 	}
@@ -98,6 +103,9 @@
         deleteRange();
 	}
 
+	/**
+	 * @return the stack
+	 */
 	protected Stack deleteRange() {
 		WorkNode root = getRootWorkNode();
 		Node rootNode = root.getNode();
@@ -120,7 +128,7 @@
 		Node result = null;
 		if ((isTableComponents(node) || IHTMLConstants.TAG_TABLE
 				.equalsIgnoreCase(node.getNode().getNodeName())) //
-				&& new IETablePositionRule(null, null).isInValidTable(node
+				&& new IETablePositionRule(null).isInValidTable(node
 						.getNode())) {
 			result = node.getNode().cloneNode(false);
 		}
@@ -223,7 +231,7 @@
 	protected Node processNode(WorkNode node) {
 		Node result = null;
 		if (!isTableComponents(node)
-				|| !new IETablePositionRule(null, null).isInValidTable(node
+				|| !new IETablePositionRule(null).isInValidTable(node
 						.getNode())) {
 			// it's not table components.
 			setOperationPosition(new DOMRefPosition(node.getNode(), false));
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/DesignEdit.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/DesignEdit.java
index c158325..cba2d46 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/DesignEdit.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/DesignEdit.java
@@ -29,7 +29,6 @@
 import org.eclipse.swt.dnd.Clipboard;
 import org.eclipse.swt.dnd.TextTransfer;
 import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -40,11 +39,8 @@
  * @author mengbo
  */
 public abstract class DesignEdit {
-	public static final int DELETE_OPERATION = 1;
 
-	public static final int INSERT_OPERATION = 2;
-
-	private Stack _selections;
+    private Stack _selections;
 
 	private DOMRange _range;
 
@@ -52,29 +48,56 @@
 
 	private IDOMPosition _operationPosition;
 
-	protected Document _document;
+	private final Document _document;
 
-	protected IDOMModel _model;
+	private Stack _processedResult;
 
-	protected Stack _processedResult;
-
+	/**
+	 * @param range
+	 * @param viewer
+	 */
 	public DesignEdit(DOMRange range, GraphicalViewer viewer) {
 		setRange(range);
 		_viewer = viewer;
 		_operationPosition = getRange().getStartPosition();
 		_document = ((IDOMNode) _operationPosition.getContainerNode())
 				.getModel().getDocument();
-		_model = ((IDOMNode) _operationPosition.getContainerNode()).getModel();
 	}
 
-	protected abstract boolean operate();
+	
+	/**
+	 * @return the target document
+	 */
+	protected final Document getDocument() {
+        return _document;
+    }
 
+    /**
+     * @return the result
+     */
+    protected abstract boolean operate();
+
+	/**
+	 * @param node
+	 * @return the text
+	 */
 	protected abstract Text processText(WorkNode node);
 
+	/**
+	 * @param node
+	 * @return the node 
+	 */
 	protected abstract Node processNode(WorkNode node);
 
+	/**
+	 * @param node
+	 * @return the node
+	 */
 	protected abstract Node processContainer(WorkNode node);
 
+	/**
+	 * @return the dom range
+	 */ 
 	public DOMRange getRange() {
 		return _range;
 	}
@@ -88,10 +111,16 @@
 		EditValidateUtil.validRange(range);
 	}
 
+	/**
+	 * @return the clipboard
+	 */
 	protected Clipboard getClipboard() {
 		return new Clipboard(_viewer.getControl().getDisplay());
 	}
 
+	/**
+	 * @return the position
+	 */
 	public IDOMPosition getOperationPosition() {
 		// try
 		// {
@@ -117,6 +146,9 @@
 		return _operationPosition;
 	}
 
+	/**
+	 * @param position
+	 */
 	protected void setOperationPosition(IDOMPosition position) {
 		if (!EditValidateUtil.validPosition(position)) {
 			return;
@@ -125,6 +157,9 @@
 		_operationPosition = position;
 	}
 
+	/**
+	 * @return the result of performing the edit
+	 */
 	public boolean perform() {
 		boolean result = false;
 
@@ -195,6 +230,9 @@
 		return _selections;
 	}
 
+	/**
+	 * @return the result stack
+	 */
 	public Stack getProcessedResult() {
 		if (_processedResult == null) {
 			_processedResult = new Stack();
@@ -206,6 +244,9 @@
 		return _processedResult;
 	}
 
+	/**
+	 * @return the root work node
+	 */
 	protected final WorkNode getRootWorkNode() {
 		WorkNode result = null;
 		if (getSelections().size() > 0) {
@@ -219,7 +260,12 @@
 		return result;
 	}
 
-	protected final boolean processText(WorkNode node, Stack result) {
+	/**
+	 * @param node
+	 * @param result
+	 * @return true if node
+	 */
+	private final boolean processText(WorkNode node, Stack result) {
 		boolean done = false;
 		if (EditModelQuery.isText(node.getNode())) {
 			Node text = processText(node);
@@ -232,13 +278,21 @@
 		return done;
 	}
 
-	protected final boolean processContainer(WorkNode node, Stack result) {
+	/**
+	 * @param node
+	 * @param result
+	 */
+	private final void processContainer(WorkNode node, Stack result) {
 		processContainer(node);
 		getSelections().remove(node);
-		return true;
 	}
 
-	protected final boolean processChildren(WorkNode node, Stack result) {
+	/**
+	 * @param node
+	 * @param result
+	 * @return true if done
+	 */
+	private final boolean processChildren(WorkNode node, Stack result) {
 		boolean done = false;
 		if (getFirstSelectedChild(node) != null) {
 			Stack myResult = new Stack();
@@ -259,7 +313,12 @@
 		return done;
 	}
 
-	protected final boolean processChildren1(WorkNode node, Stack result) {
+	/**
+	 * @param node
+	 * @param result
+	 * @return true if done
+	 */
+	private final boolean processChildren1(WorkNode node, Stack result) {
 		boolean done = false;
 		if (node.getNode().hasChildNodes()) {
 			Stack myResult = new Stack();
@@ -324,6 +383,9 @@
 		}
 	}
 
+	/**
+	 * @param result
+	 */
 	protected void setClipboard(Stack result) {
 		Node[] nodes = (Node[]) result.toArray(new Node[result.size()]);
 		StringBuffer sb = new StringBuffer();
@@ -353,7 +415,12 @@
 		return null;
 	}
 
-	public Node collectStyleNodes(Node rootNode, Vector result) {
+	/**
+	 * @param rootNode
+	 * @param result
+	 * @return the node
+	 */
+	Node collectStyleNodes(Node rootNode, Vector result) {
 		Element element = null;
 		if (rootNode instanceof Element) {
 			element = (Element) rootNode;
@@ -374,7 +441,12 @@
 		return node;
 	}
 
-	public Node collectOtherStyles(Node rootNode, Vector result) {
+	/**
+	 * @param rootNode
+	 * @param result 
+	 * @return the node
+	 */
+	protected final Node collectOtherStyles(Node rootNode, Vector result) {
 		Node cur = rootNode, prev = null, appendPoint = null;
 		if (EditValidateUtil.validNode(rootNode)) {
 			while (!EditModelQuery.isDocument(cur)) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/IInputSourceProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/IInputSourceProvider.java
index fabe0ca..9922329 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/IInputSourceProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/IInputSourceProvider.java
@@ -22,7 +22,13 @@
 	 */
 	public Node[] getNodes();
 
+	/**
+	 * @return the string data
+	 */
 	public String getStringData();
 
+	/**
+	 * @return the character data
+	 */
 	public Character getCharacterData();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/InsertCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/InsertCommand.java
index 38d2ac7..0723268 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/InsertCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/InsertCommand.java
@@ -26,6 +26,7 @@
 	/**
 	 * @param label
 	 * @param viewer
+	 * @param data 
 	 */
 	public InsertCommand(String label, IHTMLGraphicalViewer viewer,
 			IInputSourceProvider data) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/InsertEdit.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/InsertEdit.java
index 84ede40..bcf96eb 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/InsertEdit.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/InsertEdit.java
@@ -59,6 +59,7 @@
 	/**
 	 * @param range
 	 * @param viewer
+	 * @param data 
 	 */
 	public InsertEdit(DOMRange range, GraphicalViewer viewer,
 			IInputSourceProvider data) {
@@ -66,6 +67,11 @@
 		_data = data;
 	}
 
+	/**
+	 * @param position
+	 * @param viewer
+	 * @param data
+	 */
 	public InsertEdit(IDOMPosition position, GraphicalViewer viewer,
 			IInputSourceProvider data) {
 		super(new DOMRange(position, position), viewer);
@@ -73,6 +79,9 @@
 		_data = data;
 	}
 
+	/**
+	 * @return ??
+	 */
 	public boolean insertChar() {
 		if (_data.getStringData() == null) {
 			return false;
@@ -85,7 +94,7 @@
 			setOperationPosition(new DOMPosition(text, position.getOffset() + 1));
 		} else {
 			Node refNode = position.getNextSiblingNode();
-			Text text = _document.createTextNode(_data.getCharacterData()
+			Text text = getDocument().createTextNode(_data.getCharacterData()
 					.toString());
 			position.getContainerNode().insertBefore(text, refNode);
 			setOperationPosition(new DOMPosition(text, text.getLength()));
@@ -93,6 +102,9 @@
 		return true;
 	}
 
+	/**
+	 * @return ????
+	 */
 	public boolean insertString() {
 		String content = _data.getStringData();
 		if (content != null) {
@@ -104,7 +116,7 @@
 						+ content.length()));
 			} else {
 				Node refNode = position.getNextSiblingNode();
-				Text text = _document.createTextNode(content);
+				Text text = getDocument().createTextNode(content);
 				position.getContainerNode().insertBefore(text, refNode);
 				setOperationPosition(new DOMPosition(text, text.getLength()));
 			}
@@ -130,7 +142,7 @@
 		Node parent = position.getContainerNode();
 		Node node = null;
 		for (int i = 0; i < nodes.length; i++) {
-			node = DOMUtil.cloneNodeDeep(_document, nodes[i]);
+			node = DOMUtil.cloneNodeDeep(getDocument(), nodes[i]);
 			String prefix = node.getPrefix();
 			String name = node.getLocalName();
 			if (name != null
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/KeyboardData.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/KeyboardData.java
index 7b455af..7f194bc 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/KeyboardData.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/KeyboardData.java
@@ -30,6 +30,11 @@
 
 	private GraphicalViewer _viewer;
 
+	/**
+	 * @param code
+	 * @param mask
+	 * @param viewer
+	 */
 	public KeyboardData(char code, int mask, GraphicalViewer viewer) {
 		if ((mask & SWT.SHIFT) != 0) {
 			_keyCode = new Character(Character.toUpperCase(code));
@@ -70,6 +75,10 @@
 		this._stateMask = stateMask;
 	}
 
+	/**
+	 * @param keyCode
+	 * @return the node or null
+	 */
 	public Node getSpecialNode(KeyboardData keyCode) {
 		Object name;
 		EditDomain domain = _viewer.getEditDomain();
@@ -108,6 +117,9 @@
 		return _keyCode;
 	}
 
+	/**
+	 * @return the char value of the key code
+	 */
 	public char getChar() {
 		return _keyCode.charValue();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/Paragraph.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/Paragraph.java
index 1c879ae..c3757d0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/Paragraph.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/Paragraph.java
@@ -22,10 +22,17 @@
 public class Paragraph {
 	private DOMRange _range;
 
+	/**
+	 * @param start
+	 * @param end
+	 */
 	public Paragraph(IDOMPosition start, IDOMPosition end) {
 		_range = new DOMRange(start, end);
 	}
 
+	/**
+	 * @return the lowest container node
+	 */
 	public Node getLowestContainer() {
 		return EditModelQuery.getInstance().getCommonAncestor(
 				_range.getStartPosition(), _range.getEndPosition());
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ParagraphApplyStyleCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ParagraphApplyStyleCommand.java
index 27d4488..16a0d05 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ParagraphApplyStyleCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/ParagraphApplyStyleCommand.java
@@ -273,7 +273,7 @@
 			}
 			if (condition) {
 				// if uncheck the align action
-				if (this._applyingNode
+				if (this.getApplyingNode()
 						.getAttribute(IHTMLConstants.ATTR_ALIGN)
 						.equals(
 								((Element) parentNode)
@@ -290,7 +290,7 @@
 				 * parentNode.getParentNode().replaceChild(this._applyingNode,
 				 * parentNode);
 				 */
-				String align = this._applyingNode
+				String align = this.getApplyingNode()
 						.getAttribute(IHTMLConstants.ATTR_ALIGN);
 				((Element) parentNode).setAttribute(IHTMLConstants.ATTR_ALIGN,
 						align);
@@ -304,7 +304,7 @@
 					&& parentNode.getNodeName().equalsIgnoreCase(
 							IHTMLConstants.TAG_P)
 					&& parentNode.getChildNodes().getLength() == len) {
-				if (this._applyingNode
+				if (this.getApplyingNode()
 						.getAttribute(IHTMLConstants.ATTR_ALIGN)
 						.equals(
 								((Element) parentNode)
@@ -326,7 +326,7 @@
 				 * parentNode.getParentNode().replaceChild(this._applyingNode,
 				 * parentNode);
 				 */
-				String align = this._applyingNode
+				String align = this.getApplyingNode()
 						.getAttribute(IHTMLConstants.ATTR_ALIGN);
 				((Element) parentNode).setAttribute(IHTMLConstants.ATTR_ALIGN,
 						align);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/SelectAllCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/SelectAllCommand.java
index ce6c020..4118016 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/SelectAllCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/SelectAllCommand.java
@@ -27,13 +27,20 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
+/**
+ * Called in response to a Ctrl-A-style select all action
+ *
+ */
 public class SelectAllCommand extends Command {
 	private IHTMLGraphicalViewer _viewer;
 
+	/**
+	 * @param label
+	 * @param viewer
+	 */
 	public SelectAllCommand(String label, IHTMLGraphicalViewer viewer) {
 		super(label);
 		_viewer = viewer;
-		// TODO Auto-generated constructor stub
 	}
 
 	public void execute() {
@@ -43,7 +50,7 @@
 		Node htmlRoot = RootContainerPositionRule
 				.getBasicContainer((Document) document);
 		Node jsfRoot = JSFRootContainerPositionRule
-				.getBasicContainer((Document) document);
+				.getBasicContainer((Document) document, 3);
 		Node root;
 		if (htmlRoot != null && jsfRoot != null) {
 			if (EditModelQuery.isChild(htmlRoot, jsfRoot)) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/WorkNode.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/WorkNode.java
index 72bee81..3a04f24 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/WorkNode.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/range/WorkNode.java
@@ -17,7 +17,7 @@
 /**
  * @author mengbo
  */
-public class WorkNode {
+public final class WorkNode {
 	private WorkNode parent;
 
 	private WorkNode previous;
@@ -26,10 +26,15 @@
 
 	private Node node;
 
-	private int pos[];
+	private final int pos[];
 
 	private boolean isRoot;
 
+	/**
+	 * @param node
+	 * @param pos1
+	 * @param pos2
+	 */
 	public WorkNode(Node node, final int pos1, final int pos2) {
 		this.pos = resoveOffsets(node, pos1, pos2);
 		this.node = node;
@@ -50,7 +55,10 @@
 		this.node = node;
 	}
 
-	public int[] getQualifiedOffsets() {
+	/**
+	 * @return the offsets
+	 */
+	int[] getQualifiedOffsets() {
 		int result[] = new int[] { getPosOffsets()[0], getPosOffsets()[1] };
 		result[0] = result[0] < 0 ? 0 : result[0];
 		int length = EditModelQuery.getNodeLenth(node);
@@ -143,7 +151,7 @@
 		return sb.toString();
 	}
 
-	public boolean isWholeSelected() {
+	boolean isWholeSelected() {
 		int start = EditModelQuery.getNodeStartIndex(node);
 		int end = EditModelQuery.getNodeEndIndex(node);
 		return getQualifiedOffsets()[0] <= 0
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/AddSubNodeCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/AddSubNodeCommand.java
index 9c830e1..7df9a32 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/AddSubNodeCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/AddSubNodeCommand.java
@@ -22,17 +22,21 @@
  * @version 1.5
  */
 public class AddSubNodeCommand extends SingleNodeCommand {
-	private IDOMElement _parent, _child;
+	private final IDOMElement _parent;
+	private IDOMElement _child;
 
-	private String _tagName;
+	private final String _tagName;
 
-	private String _url;
+	private final String _url;
 
-	private Map _attributes;
+	private final Map _attributes;
 
 	/**
 	 * @param label
 	 * @param node
+	 * @param name 
+	 * @param url 
+	 * @param attributs 
 	 */
 	public AddSubNodeCommand(String label, IDOMElement node, String name,
 			String url, Map attributs) {
@@ -62,6 +66,9 @@
 		_parent.appendChild(_child);
 	}
 
+	/**
+	 * @return the child node
+	 */
 	public IDOMElement getChildNode() {
 		return _child;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/ChangeAttributeCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/ChangeAttributeCommand.java
index fa189da..bd31fc6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/ChangeAttributeCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/ChangeAttributeCommand.java
@@ -50,6 +50,11 @@
 		_attributes = null;
 	}
 
+	/** TODO: can these two constructors be merged?
+	 * @param label
+	 * @param node
+	 * @param attributes
+	 */
 	public ChangeAttributeCommand(String label, IDOMElement node, Map attributes) {
 		super(label, node);
 		_element = node;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/ChangeTagCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/ChangeTagCommand.java
index 6fb8b98..2de5d4c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/ChangeTagCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/ChangeTagCommand.java
@@ -29,17 +29,17 @@
  * @author mengbo
  */
 public class ChangeTagCommand extends SingleNodeCommand {
-	private IDOMElement _element;
+    private final IDOMElement _element;
 
-	private String _uri;
+    private final Map _attributes;
 
-	private String _localTag;
+    private final boolean _moveContent;
 
-	private Map _attributes;
+    private String _uri;
 
-	private boolean _moveContent;
+    private String _localTag;
 
-	private String _totalTag;
+    private  String _totalTag;
 
 	/**
 	 * @param label
@@ -57,24 +57,6 @@
 		this._moveContent = movecontent;
 	}
 
-	/**
-	 * @param label
-	 * @param node
-	 * @param uri 
-	 * @param tag 
-	 * @param attributes 
-	 * @param movecontent 
-	 */
-	public ChangeTagCommand(String label, IDOMElement node, String uri,
-			String tag, Map attributes, boolean movecontent) {
-		super(label, node);
-		this._element = node;
-		this._uri = uri;
-		this._localTag = tag;
-		this._attributes = attributes;
-		this._moveContent = movecontent;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -127,6 +109,9 @@
 		setReplacedElement(replacement);
 	}
 
+	/**
+	 * @return the replacemd element
+	 */
 	public IDOMElement getNewElement() {
 		return getReplacedElment();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/InsertSubNodeCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/InsertSubNodeCommand.java
index 25f6de0..7790c17 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/InsertSubNodeCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/commands/single/InsertSubNodeCommand.java
@@ -23,6 +23,8 @@
 	/**
 	 * @param label
 	 * @param parent
+	 * @param child 
+	 * @param refchild 
 	 */
 	public InsertSubNodeCommand(String label, IDOMElement parent,
 			IDOMElement child, IDOMElement refchild) {
@@ -40,8 +42,4 @@
 	protected void doExecute() {
 		_parent.insertBefore(_child, _refchild);
 	}
-
-	public IDOMElement getChildNode() {
-		return _child;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/AbstractTagConverter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/AbstractTagConverter.java
index 0d34b94..8c9054c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/AbstractTagConverter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/AbstractTagConverter.java
@@ -56,6 +56,7 @@
 	private boolean _needBorderDecorator;
 
 	/**
+	 * @param host 
 	 * 
 	 */
 	public AbstractTagConverter(Element host) {
@@ -193,6 +194,10 @@
         // need to review this
 	}
 
+	/**
+	 * @param node
+	 * @return true if the node should be ignored for  conversion purposes
+	 */
 	protected boolean shouldIgnore(Node node) {
 		int nodeType = node.getNodeType();
 		switch (nodeType) {
@@ -209,6 +214,8 @@
 	/**
 	 * utility method for those converter that only converts the host tag's name
 	 * and directly copy children.
+	 * @param src 
+	 * @param dest 
 	 * 
 	 */
 	protected void copyChildren(Element src, Element dest) {
@@ -223,6 +230,8 @@
 
 	/**
 	 * utility method for those converter that directly copy children.
+	 * @param src 
+	 * @param dest 
 	 * 
 	 */
 	protected void dumCopyChildren(Element src, Element dest) {
@@ -271,6 +280,10 @@
 		return getDestDocument().createTextNode(text);
 	}
 
+	/**
+	 * @param original
+	 * @return the mapped String  TODO: currently does nothing
+	 */
 	protected String mapURL(String original) {
 		// TODO: how to map URL? such as original url look like:
 		// getContext().getPath()+...
@@ -279,6 +292,10 @@
 
 	// TODO: FIXME: XXX:
 	// if the value is expression, we may want to do something here!!!
+	/**
+	 * @param value
+	 * @return value mapped based on EL expression
+	 */
 	protected String mapValue(String value) {
 		if (value == null) {
 			return null;
@@ -362,6 +379,9 @@
 		return this._needBorderDecorator;
 	}
 
+	/**
+	 * @param b
+	 */
 	public void setNeedBorderDecorator(boolean b) {
 		this._needBorderDecorator = b;
 	}
@@ -394,14 +414,23 @@
 		this._mode = mode;
 	}
 
+	/**
+	 * @return true if the converter mode is preview
+	 */
 	public final boolean isPreviewMode() {
 		return this._mode == IConverterFactory.MODE_PREVIEW;
 	}
 
+	/**
+	 * @return true if the converter mode is designer
+	 */
 	public final boolean isDesignerMode() {
 		return this._mode == IConverterFactory.MODE_DESIGNER;
 	}
 
+	/**
+	 * @return the converter mode
+	 */
 	public final int getMode() {
 		return this._mode;
 	}
@@ -434,6 +463,9 @@
 		return this._minWidth;
 	}
 
+	/**
+	 * @param minWidth
+	 */
 	public void setMinWidth(int minWidth) {
 		this._minWidth = minWidth;
 	}
@@ -447,10 +479,18 @@
 		return this._minHeight;
 	}
 
+	/**
+	 * @param minHeight
+	 */
 	public void setMinHeight(int minHeight) {
 		this._minHeight = minHeight;
 	}
 
+	/**
+	 * @param element
+	 * @param attrname
+	 * @return the attribute on element with the name attrname
+	 */
 	public static boolean hasAttribute(Element element, String attrname) {
 		return element.hasAttribute(attrname);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConvertPosition.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConvertPosition.java
index 97f2ba8..130ec40 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConvertPosition.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConvertPosition.java
@@ -20,11 +20,13 @@
  * @version 1.5
  */
 public class ConvertPosition {
-	Node _parentNode;
+	private final Node _parentNode;
 
-	int _index;
+	private final int _index;
 
 	/**
+	 * @param parent \
+	 * @param index 
 	 * 
 	 */
 	public ConvertPosition(Node parent, int index) {
@@ -32,10 +34,16 @@
 		this._index = index;
 	}
 
+	/**
+	 * @return the parent node
+	 */
 	public Node getParentNode() {
 		return _parentNode;
 	}
 
+	/**
+	 * @return the index
+	 */
 	public int getIndex() {
 		return _index;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterFacRegistryReader.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterFacRegistryReader.java
index 21f3d88..147850e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterFacRegistryReader.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterFacRegistryReader.java
@@ -12,6 +12,7 @@
 package org.eclipse.jst.pagedesigner.converter;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
@@ -27,18 +28,22 @@
  * @version 1.5
  */
 public class ConverterFacRegistryReader {
-	static IConverterFactory[] _handlers = null;
+	private static List<IConverterFactory> _handlers = null;
 
-	public static synchronized IConverterFactory[] getAllHandlers() {
+	/**
+	 * @return the list of handlers.  The list is not modifiable and will
+	 * throw exceptions if it is attempted.
+	 */
+	public static synchronized List<IConverterFactory> getAllHandlers() {
 		if (_handlers == null) {
 			_handlers = readAllHandlers();
 		}
-		return _handlers;
+		return Collections.unmodifiableList(_handlers);
 
 	}
 
-	private static IConverterFactory[] readAllHandlers() {
-		List result = new ArrayList();
+	private static List<IConverterFactory> readAllHandlers() {
+		List result = new ArrayList<IConverterFactory>();
 		IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
 				.getExtensionPoint(PDPlugin.getPluginId(),
 						IJMTConstants.EXTENSION_POINT_PAGEDESIGNER);
@@ -68,9 +73,7 @@
 				}
 			}
 		}
-		IConverterFactory[] ret = new IConverterFactory[result.size()];
-		result.toArray(ret);
-		return ret;
+		return result;
 	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterFactoryRegistry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterFactoryRegistry.java
index 5a54c1b..4cbeafe 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterFactoryRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterFactoryRegistry.java
@@ -41,18 +41,27 @@
 		_factories.add(new JSPConverterFactory());
 		_factories.add(new HTMLConverterFactory());
 
-		IConverterFactory facs[] = ConverterFacRegistryReader.getAllHandlers();
+		List<IConverterFactory> facs = ConverterFacRegistryReader.getAllHandlers();
 		if (facs != null) {
-			for (int i = 0; i < facs.length; i++) {
-				addFactory(facs[i]);
+			for (IConverterFactory fac : facs) {
+				addFactory(fac);
 			}
 		}
 	}
 
+	/**
+	 * @param fac
+	 */
 	public void addFactory(IConverterFactory fac) {
 		_factories.add(fac);
 	}
 
+	/**
+	 * @param ele
+	 * @param mode
+	 * @param targetDocument
+	 * @return the new btag converter
+	 */
 	public ITagConverter createTagConverter(Element ele, int mode,
 			IDOMDocument targetDocument) {
 		ITagConverter converter = internalCreateTagConverter(ele, mode);
@@ -62,7 +71,12 @@
 		return converter;
 	}
 
-	public ITagConverter internalCreateTagConverter(Element ele, int mode) {
+	/**
+	 * @param ele
+	 * @param mode
+	 * @return the new tag converter
+	 */
+	protected final ITagConverter internalCreateTagConverter(Element ele, int mode) {
 		String uri = CMUtil.getElementNamespaceURI(ele);
 		// first round, match uri
 		for (int i = 0, size = _factories.size(); i < size; i++) {
@@ -118,6 +132,9 @@
 				"palette/GENERIC/small/PD_Palette_Default.gif");
 	}
 
+	/**
+	 * @return the singleton instance of the registry
+	 */ 
 	public static ConverterFactoryRegistry getInstance() {
 		if (_instance == null) {
 			_instance = new ConverterFactoryRegistry();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterUtil.java
index 2dd2678..ade2b79 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/ConverterUtil.java
@@ -83,6 +83,11 @@
 		return true;
 	}
 
+	/**
+	 * @param document
+	 * @param text
+	 * @return the descripton element in the document containing text
+	 */
 	public static Element createDescriptionElement(IDOMDocument document,
 			String text) {
 		if (document == null) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/DefaultUnknownTagConverter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/DefaultUnknownTagConverter.java
index 397fcf7..7050685 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/DefaultUnknownTagConverter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/DefaultUnknownTagConverter.java
@@ -25,6 +25,7 @@
 
 	/**
 	 * @param host
+	 * @param mode 
 	 */
 	public DefaultUnknownTagConverter(Element host, int  mode) {
 		super(host);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/DumTagConverter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/DumTagConverter.java
index 43c987e..455bc85 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/DumTagConverter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/DumTagConverter.java
@@ -20,13 +20,17 @@
  */
 public class DumTagConverter extends AbstractTagConverter {
 	/**
-	 * 
+	 * @param host 
+	 * @param needBorder 
 	 */
 	public DumTagConverter(Element host, boolean needBorder) {
 		this(host);
 		this.setNeedBorderDecorator(needBorder);
 	}
 
+	/**
+	 * @param host
+	 */
 	public DumTagConverter(Element host) {
 		super(host);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/HiddenTagConverter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/HiddenTagConverter.java
index 4b4a8a6..51a6c1d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/HiddenTagConverter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/HiddenTagConverter.java
@@ -35,6 +35,8 @@
 	private int _mode;
 
 	/**
+	 * @param host 
+	 * @param labelProvider 
 	 * 
 	 */
 	public HiddenTagConverter(Element host, ILabelProvider labelProvider) {
@@ -153,6 +155,9 @@
 		this._mode = mode;
 	}
 
+	/**
+	 * @return the mode
+	 */
 	public int getMode() {
 		return _mode;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/HiddenTagConverter2.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/HiddenTagConverter2.java
index cd09809..f51af22 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/HiddenTagConverter2.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/HiddenTagConverter2.java
@@ -33,6 +33,10 @@
 
 	private Image _image;
 
+	/**
+	 * @param host
+	 * @param image
+	 */
 	public HiddenTagConverter2(Element host, Image image) {
 		super(host);
 		this._image = image;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/IConverterFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/IConverterFactory.java
index 002a7b0..f8aebf2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/IConverterFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/IConverterFactory.java
@@ -18,13 +18,20 @@
  * @version 1.5
  */
 public interface IConverterFactory {
+	/**
+	 * indicates designer mode 
+	 */
 	public static final int MODE_DESIGNER = 0;
 
+	/**
+	 * indicates preview mode
+	 */
 	public static final int MODE_PREVIEW = 1;
 
 	/**
 	 * 
 	 * @param element
+	 * @param mode 
 	 * @return null if this factory don't support this element
 	 */
 	public ITagConverter createConverter(Element element, int mode);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/PreferenceReader.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/PreferenceReader.java
index 71b2830..ea9dc4e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/PreferenceReader.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/PreferenceReader.java
@@ -16,12 +16,24 @@
  * @version 1.5
  */
 public class PreferenceReader {
+	/**
+	 * expression type
+	 */
 	public final static int FULL_EXPRESSION_TYPE = 0;
 
+    /**
+     * expression type
+     */
 	public final static int LAST_EXPRESSION_TYPE = 1;
 
+    /**
+     * expression type
+     */
 	public final static int REAL_VALUE_TYPE = 2;
 
+	/**
+	 * @return the map value type
+	 */
 	public static int getMapValueType() {
 		return LAST_EXPRESSION_TYPE;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/jsp/IncludeTagConverterPreview.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/jsp/IncludeTagConverterPreview.java
index cc9de36..73aa825 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/jsp/IncludeTagConverterPreview.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/jsp/IncludeTagConverterPreview.java
@@ -30,6 +30,7 @@
 import org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.PageVariableAdapterFactory;
 import org.eclipse.jst.pagedesigner.preview.PageExpressionContext;
 import org.eclipse.jst.pagedesigner.preview.PreviewConvertContext;
+import org.eclipse.wst.sse.core.StructuredModelManager;
 import org.eclipse.wst.sse.core.internal.util.URIResolver;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
@@ -51,6 +52,7 @@
 
 	/**
 	 * @param host
+	 * @param fileAttrname 
 	 */
 	public IncludeTagConverterPreview(Element host, String fileAttrname) {
 		super(host);
@@ -77,6 +79,10 @@
         return previewFile(file);
 	}
 
+	/**
+	 * @param includedPath
+	 * @return the IFile corresponding to the IPath
+	 */
 	public IFile getFile(IPath includedPath) {
 		IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot();
 		IProject[] projects = workspaceRoot.getProjects();
@@ -95,13 +101,17 @@
 		return null;
 	}
 
+	/**
+	 * @param file
+	 * @return the Element
+	 */
 	public Element previewFile(IFile file) {
 		IDOMModel xmlModel = null;
 		DocumentPageVariableAdapter provider = null;
 		boolean pushedPageVarProvider = false;
 		try {
 
-			xmlModel = (IDOMModel) PDPlugin.getModelManager().getModelForRead(
+			xmlModel = (IDOMModel) StructuredModelManager.getModelManager().getModelForRead(
 					file);
 			if (xmlModel != null) {
 				IDOMDocument doc = xmlModel.getDocument();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/jsp/JSPConverterFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/jsp/JSPConverterFactory.java
index a9e0b7c..2175d91 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/jsp/JSPConverterFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/converter/jsp/JSPConverterFactory.java
@@ -12,12 +12,16 @@
 package org.eclipse.jst.pagedesigner.converter.jsp;
 
 import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory2;
 import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.converter.HiddenTagConverter;
 import org.eclipse.jst.pagedesigner.converter.IConverterFactory;
 import org.eclipse.jst.pagedesigner.converter.ITagConverter;
 import org.eclipse.jst.pagedesigner.converter.TagConverterToDumBlock;
+import org.eclipse.jst.pagedesigner.editors.palette.TagImageManager;
 import org.eclipse.jst.pagedesigner.jsp.core.IJSPCoreConstants;
 import org.eclipse.swt.graphics.Image;
 import org.w3c.dom.Element;
@@ -84,24 +88,19 @@
             if (element instanceof ITagConverter)
             {
                 final Element hostElement = ((ITagConverter)element).getHostElement();
-                final String tagName = hostElement.getLocalName();
-                return getJSPSharedImage(tagName);
+                IStructuredDocumentContext context = IStructuredDocumentContextFactory2.INSTANCE.getContext(hostElement);
+                if (context != null){                	
+                	IWorkspaceContextResolver wsResolver  = IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(context);
+                	if (wsResolver != null){
+                		return TagImageManager.getInstance().getSmallIconImage(wsResolver.getProject(),"JSP11", ITLDConstants.URI_JSP + ":"+hostElement.getLocalName());
+                	}
+                }
             }
             
             return null;
         }
     }
 
-	/**
-	 * @param tagName
-	 * @return
-	 */
-	private static Image getJSPSharedImage(String tagName) {
-		Image image = PDPlugin.getDefault().getImage(
-				"palette/JSP/small/JSP_" + tagName.toUpperCase() + ".gif");
-		return image;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSTempUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSTempUtil.java
index 91fee54..9303b67 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSTempUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSTempUtil.java
@@ -30,7 +30,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class CSSTempUtil {
+public final class CSSTempUtil {
 	/**
 	 * the default implementation of (IStyleSheetListAdapter)
 	 * docnotifier.getAdapterFor(IStyleSheetListAdapter.class) will only get
@@ -44,9 +44,9 @@
 	 * elements is not really adding into the document, so they can't be reached
 	 * from the document.
 	 * 
-	 * @param ele
-	 * @return
-	 * @see org.eclipse.wst.html.core.htmlcss.HTMLDocumentAdapter#addStyleSheet(org.w3c.dom.Element)
+	 * @param element
+	 * @return the list
+	 * see org.eclipse.wst.html.core.htmlcss.HTMLDocumentAdapter#addStyleSheet(org.w3c.dom.Element)
 	 */
 	public static List getStyleSheets(Element element) {
 		List styleSheets = new ArrayList();
@@ -143,4 +143,9 @@
 			}
 		}
 	}
+	
+	private CSSTempUtil()
+	{
+	    //  util class, no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSUtil.java
index edd0ffe..fdda3ce 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/CSSUtil.java
@@ -46,6 +46,10 @@
 public class CSSUtil {
 	private static StyleSheet _userAgentDefault;
 
+	/**
+	 * @param doc
+	 * @return the css classes
+	 */
 	public static String[] getCSSClasses(Document doc) {
 		Collection c = Collections.EMPTY_SET;
 		if (doc instanceof INodeNotifier) {
@@ -81,7 +85,7 @@
 	 * Get the css style of a node.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the style
 	 */
 	public static ICSSStyle getCSSStyle(Element node) {
 		ICSSStyle style = null;
@@ -98,8 +102,8 @@
 	/**
 	 * Resolve the css style string from css style elements.
 	 * 
-	 * @param node
-	 * @return
+	 * @param style
+	 * @return the style string
 	 */
 	public static String resolveCSSStyle(ICSSStyle style) {
 		StringBuffer sb = new StringBuffer();
@@ -130,7 +134,7 @@
 	 *            the element.
 	 * @param pseudoName
 	 *            the pseudoname of the element
-	 * @return
+	 * @return the style declaration
 	 */
 	public static CSSStyleDeclaration getCSSDeclaration(Element element,
 			String pseudoName) {
@@ -180,7 +184,7 @@
 	 *            the element.
 	 * @param pseudoName
 	 *            the pseudoname of the element
-	 * @return
+	 * @return the style declaration
 	 */
 	public static CSSStyleDeclaration getDefaultCSSDeclaration(Element element,
 			String pseudoName) {
@@ -225,14 +229,21 @@
 	private static StyleSheet getUserAgentDefaultStyleSheet(Element element)
 			throws UnsupportedEncodingException, IOException {
 		if (_userAgentDefault == null) {
-			InputStream input = CSSUtil.class
+			InputStream input = null;
+			
+			try
+			{
+				input = CSSUtil.class
 					.getResourceAsStream(IJMTConstants.USERAGENT);
-			IStructuredModel model = StructuredModelManager.getModelManager()
-					.getModelForEdit(IJMTConstants.USERAGENT, input, null);
-			ICSSModel cssmodel = (ICSSModel) model;
-			_userAgentDefault = (StyleSheet) cssmodel.getDocument();
-
-			ResourceUtils.ensureClosed(input);
+				IStructuredModel model = StructuredModelManager.getModelManager()
+						.getModelForEdit(IJMTConstants.USERAGENT, input, null);
+				ICSSModel cssmodel = (ICSSModel) model;
+				_userAgentDefault = (StyleSheet) cssmodel.getDocument();
+			}
+			finally
+			{
+				ResourceUtils.ensureClosed(input);
+			}
 		}
 
 		return _userAgentDefault;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/ICSSStyle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/ICSSStyle.java
index 6f774fc..9d1524b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/ICSSStyle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/ICSSStyle.java
@@ -34,56 +34,99 @@
     // TODO:  this should be set to a preference and probably also use an
     // algorithm to determine if the the current box style already has a large
     // enough separation offset (perhaps a threshold instead of an additive value)
+    /**
+     * the border offset
+     */
     public static final int ARTIFICIAL_BORDER_OFFSET = 4;
     
+    /**
+     * 
+     */
     public static final int INHERIT = Integer.MIN_VALUE;
     
+	/**
+	 * the top attribute vale
+	 */
 	public static final String TOP = "top";
 
+	/**
+	 * the right attribute value
+	 */
 	public static final String RIGHT = "right";
 
+	/**
+	 * the left attribute value
+	 */
 	public static final String LEFT = "left";
 
+	/**
+	 * the bottom attribute value
+	 */
 	public static final String BOTTOM = "bottom";
 
+	/**
+	 * 
+	 */
 	public void reset();
 
+	/**
+	 * @return the font
+	 */
 	public ICSSFont getCSSFont();
 
+	/**
+	 * @param property
+	 * @return the style property
+	 */
 	public Object getStyleProperty(String property);
 
+	/**
+	 * @return the margin insets
+	 */
 	public Insets getMarginInsets();
 
+	/**
+	 * @return the border insets
+	 */
 	public Insets getBorderInsets();
 
+	/**
+	 * @return the padding insets
+	 */
 	public Insets getPaddingInsets();
 
 	/**
 	 * shortcut method to get the CSS display.
 	 * 
-	 * @see http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-display
-	 * @return
+	 * see http://www.w3.org/TR/REC-CSS2/visuren.html#propdef-display
+	 * @return the display string
 	 */
 	public String getDisplay();
 
 	/**
 	 * null means transparent.
 	 * 
-	 * @return
+	 * @return the background color
 	 */
 	public Object getBackgroundColor();
 
+	/**
+	 * @return the foreground color
+	 */
 	public Object getColor();
 
 	/**
-	 * @return
+	 * @return true if size includes border padding
 	 */
 	public boolean isSizeIncludeBorderPadding();
 
+	/**
+	 * 
+	 */
 	public void dispose();
 
 	/**
-	 * @return
+	 * @return the parent style
 	 */
 	public ICSSStyle getParentStyle();
 
@@ -91,7 +134,7 @@
 	 * Get counters declared on this style. the counters are either created by
 	 * counter-reset or refered by counter-increment
 	 * 
-	 * @return
+	 * @return the counters
 	 */
 	public Map getCounters();
 
@@ -100,7 +143,7 @@
 	 * 
 	 * @param name
 	 * @param must
-	 * @return
+	 * @return the generator
 	 */
 	public ICounterValueGenerator findCounter(String name, boolean must);
 
@@ -109,12 +152,12 @@
 	 * specification, it is expected in the future this two will be added as CSS
 	 * property, so we also include them into ICSSStyle
 	 * 
-	 * @return
+	 * @return the row span
 	 */
 	public int getRowSpan();
 
 	/**
-	 * @return
+	 * @return the column span
 	 */
 	public int getColSpan();
 
@@ -131,9 +174,13 @@
 	 * not a real CSS property. This is a shortcut method. implemented through
 	 * getAdapter() on IRangeSelectionProxy
 	 * 
-	 * @return
+	 * @return true if in selection
 	 */
 	public boolean isInSelection();
 
+	/**
+	 * @param propertyName
+	 * @return the element init value
+	 */
 	public Object getHTMLelementInitValue(String propertyName);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/border/CSSBorder.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/border/CSSBorder.java
index b2afe44..b98f14f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/border/CSSBorder.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/border/CSSBorder.java
@@ -35,10 +35,13 @@
 
 	private static final String COLOR_QUERY_TEMPLETE = "border-{0}-color";
 
-	private ICSSStyle _style;
+	private final ICSSStyle _style;
 
-	protected Rectangle _innerRect = new Rectangle();
+	private final Rectangle _innerRect = new Rectangle();
 
+	/**
+	 * @param style
+	 */
 	public CSSBorder(ICSSStyle style) {
 		this._style = style;
 	}
@@ -227,6 +230,13 @@
 				baseColor.blue) };
 	}
 
+	/**
+	 * @param graphics
+	 * @param rect
+	 * @param innerRect
+	 * @param edge
+	 * @param style
+	 */
 	public void paintEdge(Graphics graphics, Rectangle rect,
 			Rectangle innerRect, String edge, String style) {
 		if (!shouldDraw(style)) {
@@ -245,6 +255,12 @@
 		}
 	}
 
+	/**
+	 * @param graphics
+	 * @param rect
+	 * @param innerRect
+	 * @param edge
+	 */
 	protected void paintEdge(Graphics graphics, Rectangle rect,
 			Rectangle innerRect, String edge) {
 		String property = MessageFormater.format(BODER_QUERY_TEMPLETE, edge);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/color/CSSColorConverter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/color/CSSColorConverter.java
index 3e6e57a..ea520a1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/color/CSSColorConverter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/color/CSSColorConverter.java
@@ -27,6 +27,9 @@
 
 	private static CSSColorConverter _instance = new CSSColorConverter();
 
+	/**
+	 * @return singleton instance
+	 */
 	public static CSSColorConverter getInstantce() {
 		if (_instance == null) {
 			_instance = new CSSColorConverter();
@@ -34,7 +37,7 @@
 		return _instance;
 	}
 
-	protected Object getCSSColor(String CSSText) {
+	Object getCSSColor(String CSSText) {
 		if (CSSText == null) {
 			return null;
 		}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/color/CSSColorDefaults.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/color/CSSColorDefaults.java
index 5e278da..556f5db 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/color/CSSColorDefaults.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/color/CSSColorDefaults.java
@@ -22,9 +22,9 @@
  * @author mengbo
  */
 public class CSSColorDefaults {
-	public static final HashMap SYSTEM_DEFAULT_COLORS = new HashMap(20);
+	static final HashMap SYSTEM_DEFAULT_COLORS = new HashMap(20);
 
-	public static final HashMap EXTENDED_COLORS = new HashMap(20);
+	static final HashMap EXTENDED_COLORS = new HashMap(20);
 
     // TODO C.B.: there is overlap here between the default and extended
     // colors.  Also, for the custom colors, should use a ColorRegistry
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/font/CSSFontManager.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/font/CSSFontManager.java
index 3fc1c94..a47a81f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/font/CSSFontManager.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/font/CSSFontManager.java
@@ -64,27 +64,25 @@
 	}
 
 	private CacheManager _cacheManager = new CacheManager(
-			new ICacheEntryCreator() {
-				public Object createEntry(Object key) {
+			new ICacheEntryCreator<CSSFont, Font>() {
+				public Font createEntry(CSSFont key) {
 					if (DEBUG) {
 						_totalFont++;
 						System.out.println("TotalFont++: " + _totalFont);
 					}
-					CSSFont cssfont = (CSSFont) key;
-
-					Font font = new Font(null, cssFontToLocalFont(cssfont
-							.getFontFamily()), (int) Math.round(cssfont
+					Font font = new Font(null, cssFontToLocalFont(key
+							.getFontFamily()), (int) Math.round(key
 							.getFontSize()
-							/ FONT_SCALE), cssfont.getSwtFontStyle());
+							/ FONT_SCALE), key.getSwtFontStyle());
 					return font;
 				}
 
-				public void dispose(Object key, Object entry) {
+				public void dispose(CSSFont key, Font entry) {
 					if (DEBUG) {
 						_totalFont--;
 						System.out.println("TotalFont--: " + _totalFont);
 					}
-					((Font) entry).dispose();
+					entry.dispose();
 
 				}
 			}, CACHESIZE);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockBox.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockBox.java
index 7c635a5..d20bc7a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockBox.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockBox.java
@@ -59,11 +59,11 @@
 				+ box._height);
 	}
 
-	public int getInternalContentWidth() {
+	int getInternalContentWidth() {
 		return _internalContentWidth;
 	}
 
-	public int getInternalContentHeight() {
+	int getInternalContentHeight() {
 		return _internalContentHeight;
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlow.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlow.java
index 35eb4c7..d7b8b0b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlow.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlow.java
@@ -27,7 +27,7 @@
  * <P>
  * Only {@link FlowFigure}s can be added to a BlockFlow.
  */
-public class BlockFlow extends FlowFigure {
+/*package*/ class BlockFlow extends FlowFigure {
 
 	final BlockBox _blockBox;
 
@@ -46,7 +46,8 @@
 	}
 
 	/**
-	 * @see org.eclipse.jst.pagedesigner.css2.layout.FlowFigure#createDefaultFlowLayout()
+	 * @return the default flow layout
+	 * 
 	 */
 	protected FlowFigureLayout createDefaultFlowLayout() {
 		return new BlockFlowLayout(this);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlowContext.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlowContext.java
index 7cb5efd..44c43c8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlowContext.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlowContext.java
@@ -24,18 +24,19 @@
  * @version 1.5
  */
 public class BlockFlowContext implements FlowContext {
-	protected LineBox _currentLine;
+	private LineBox _currentLine;
 
 	private LineBox _previousLine = null;
 
-	protected BlockBox _blockBox;
+	BlockBox _blockBox;
 
-	protected FlowContext _originalContext;
+	private final FlowContext _originalContext;
 
-	protected ICSSStyle _style;
+	private final ICSSStyle _style;
 
 	/**
-	 * 
+	 * @param originalContext 
+	 * @param style 
 	 */
 	public BlockFlowContext(FlowContext originalContext, ICSSStyle style) {
 		this._originalContext = originalContext;
@@ -53,7 +54,10 @@
 		return _originalContext.getContainerWidth();
 	}
 
-	public void setup() {
+	/**
+	 * Initialize the object
+	 */
+	private void setup() {
 		_blockBox = new BlockBox();
 		_blockBox.setRecommendedWidth(getRecommendedWidth());
 		_currentLine = this.getCurrentLine();
@@ -136,7 +140,7 @@
 		createNewLine();
 	}
 
-	protected void createNewLine() {
+	private void createNewLine() {
 		_currentLine = new LineBox();
 		setupLine(_currentLine, Integer.MIN_VALUE);
 	}
@@ -146,13 +150,14 @@
 	 * 
 	 * @param line
 	 *            the LineBox to set up
+	 * @param topMargin 
 	 */
 	protected void setupLine(LineBox line, int topMargin) {
 		line.clear();
 
 		// the caller of getCurrentLine() may add leftMargin and leftPadding and
 		// leftBorder to line.x
-		line._x = _blockBox._borderInsets.left + _blockBox._paddingInsets.left;
+		line._x = _blockBox.getBorderInsets().left + _blockBox.getPaddingInsets().left;
 
 		// FIXME: here should check the floating boxes, and minus the width of
 		// them from
@@ -166,14 +171,14 @@
 		// space.
 		// line.setRecommendedWidth(_blockBox.getRecommendedContentWidth());
 		if (_previousLine == null) {
-			line._y = _blockBox._borderInsets.top
-					+ _blockBox._paddingInsets.top;
+			line._y = _blockBox.getBorderInsets().top
+					+ _blockBox.getPaddingInsets().top;
 			if (topMargin != Integer.MIN_VALUE)
 				line._y += topMargin;
 		} else {
 			if (topMargin == Integer.MIN_VALUE)
 				line._y = _previousLine._y + _previousLine.getHeight()
-						+ getLinePadding() + _previousLine._marginInsets.bottom; // XXX:
+						+ getLinePadding() + _previousLine.getMarginInsets().bottom; // XXX:
 			// should
 			// add
 			// previous
@@ -183,7 +188,7 @@
 				line._y = _previousLine._y
 						+ _previousLine.getHeight()
 						+ Math.max(topMargin,
-								_previousLine._marginInsets.bottom);
+								_previousLine.getMarginInsets().bottom);
 		}
 		// line.validate();
 	}
@@ -219,7 +224,7 @@
 		FlowBox box = (FlowBox) _currentLine.getFragments().get(
 				_currentLine.getFragments().size() - 1);
 		if (box != null) {
-			return box._marginInsets.right;
+			return box.getMarginInsets().right;
 		}
         return 0;
 	}
@@ -273,7 +278,7 @@
 		_blockBox.add(_currentLine);
 	}
 
-	public void endBlock() {
+	void endBlock() {
 		endLine();
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlowLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlowLayout.java
index f50ee60..05bf6c4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlowLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BlockFlowLayout.java
@@ -62,6 +62,7 @@
 	 * 
 	 * @param line
 	 *            the LineBox to set up
+	 * @param topMargin 
 	 */
 	protected void setupLine(LineBox line, int topMargin) {
 		line.clear();
@@ -82,7 +83,7 @@
 		} else {
 			if (topMargin == Integer.MIN_VALUE) {
 				line._y = _previousLine._y + _previousLine.getHeight()
-						+ getLinePadding() + _previousLine._marginInsets.bottom; // XXX:
+						+ getLinePadding() + _previousLine.getMarginInsets().bottom; // XXX:
 				// should
 				// add
 				// previous
@@ -92,7 +93,7 @@
 				line._y = _previousLine._y
 						+ _previousLine.getHeight()
 						+ Math.max(topMargin,
-								_previousLine._marginInsets.bottom);
+								_previousLine.getMarginInsets().bottom);
 			}
 		}
 		// line.validate();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BoxUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BoxUtil.java
index 54978d1..b91e30e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BoxUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/BoxUtil.java
@@ -26,9 +26,9 @@
 	 * @param style
 	 */
 	public static void setupBorderPaddingMargin(FlowBox box, ICSSStyle style) {
-		box._marginInsets = new Insets(style.getMarginInsets());
-		box._borderInsets = new Insets(style.getBorderInsets());
-		box._paddingInsets = new Insets(style.getPaddingInsets());
+		box.setMarginInsets(new Insets(style.getMarginInsets()));
+		box.setBorderInsets(new Insets(style.getBorderInsets()));
+		box.setPaddingInsets(new Insets(style.getPaddingInsets()));
 
 		if (box.getBorderPaddingHeight() > box.getHeight()) {
 			box.setHeight(box.getBorderPaddingHeight());
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSBlockFlowLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSBlockFlowLayout.java
index c3dd625..dd02b49 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSBlockFlowLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSBlockFlowLayout.java
@@ -237,7 +237,7 @@
 				_blockBox.setRecommendedHeight(h);
 			}
 		}
-		_blockBox._marginInsets = new Insets(style.getMarginInsets());
+		_blockBox.setMarginInsets(new Insets(style.getMarginInsets()));
 		if (handlingBorderForBlock()) {
 			BoxUtil.setupBorderPaddingMargin(_blockBox, getCSSStyle());
 		}
@@ -394,7 +394,7 @@
 							&& _blockBox.getInternalContentHeight() >= 0
 							&& _userSpecifiedHeight < _blockBox
 									.getInternalContentHeight()
-									+ _blockBox._paddingInsets.getHeight()
+									+ _blockBox.getPaddingInsets().getHeight()
 									+ BorderUtil.SCROLL_WIDTH) {
 						_needVScroll = true;
 					}
@@ -404,7 +404,7 @@
 							&& _blockBox.getInternalContentWidth() >= 0
 							&& _userSpecifiedWidth < _blockBox
 									.getInternalContentWidth()
-									+ _blockBox._paddingInsets.getWidth()
+									+ _blockBox.getPaddingInsets().getWidth()
 									+ BorderUtil.SCROLL_WIDTH) {
 						_needHScroll = true;
 					}
@@ -421,7 +421,7 @@
 
 		if (getFlowContext().isCurrentLineOccupied()
 				&& getFlowContext().getCurrentLine().getAvailableWidth() < _blockBox._width
-						+ _blockBox._marginInsets.getWidth()) {
+						+ _blockBox.getMarginInsets().getWidth()) {
 			getFlowContext().endLine();
 		}
 		if (!isInlineBlock()) {
@@ -435,7 +435,7 @@
 		} else {
 			getFlowContext().addToCurrentLine(_blockBox);
 		}
-		getFlowContext().getCurrentLine()._marginInsets.bottom = getCSSStyle()
+		getFlowContext().getCurrentLine().getMarginInsets().bottom = getCSSStyle()
 				.getMarginInsets().bottom;
 
 		if (!isInlineBlock()) {
@@ -572,7 +572,7 @@
 		} else {
 			if (topMargin == Integer.MIN_VALUE) {
 				line._y = _previousLine._y + _previousLine.getHeight()
-						+ getLinePadding() + _previousLine._marginInsets.bottom; // XXX:
+						+ getLinePadding() + _previousLine.getMarginInsets().bottom; // XXX:
 				// should
 				// add
 				// previous
@@ -582,7 +582,7 @@
 				line._y = _previousLine._y
 						+ _previousLine.getHeight()
 						+ Math.max(topMargin,
-								_previousLine._marginInsets.bottom);
+								_previousLine.getMarginInsets().bottom);
 			}
 		}
 		setFontinfoForLine(line);
@@ -726,7 +726,7 @@
 
 					Rectangle rect = new Rectangle(0, 0, _blockBox.getWidth(),
 							_blockBox.getHeight());
-					rect.crop(_blockBox._borderInsets);
+					rect.crop(_blockBox.getBorderInsets());
 
 					if (this._needHScroll && this._needVScroll) {
 						BorderUtil.drawScrollBar(g, BorderUtil.SCROLL_WIDTH,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSBrFlowLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSBrFlowLayout.java
index b343aae..19ef939 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSBrFlowLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSBrFlowLayout.java
@@ -57,6 +57,7 @@
 	}
 
 	private static Image getSharedHTMLImage() {
-		return PDPlugin.getDefault().getImage("palette/HTML/small/HTML_BR.gif");
+		
+		return PDPlugin.getDefault().getImage("LineBreak.gif");
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSFigure.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSFigure.java
index 79012d9..a6c5289 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSFigure.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSFigure.java
@@ -44,24 +44,25 @@
 
 	private static final Rectangle PRIVATE_RECT = new Rectangle();
 
-	ICSSStyle _style;
-
-	// NOTE: here keep the element is only for debug use. CSSFigure shouldn't
-	// require an element.
-	// Element _element;
+	private ICSSStyle _style;
 
 	// if this field is set, then regetLayout() will still return this layout,
 	// without going through the CSS resolution
-	CSSLayout _fixedLayout;
+	private CSSLayout _fixedLayout;
 
+	/**
+	 * Default constructor 
+	 * Equivalent to CSSFigure(DefaultStyle.getInstance())
+	 */
 	public CSSFigure() {
-		_style = DefaultStyle.getInstance();
-		invalidateCSS();
+		this(DefaultStyle.getInstance());
 	}
 
+	/**
+	 * @param style
+	 */
 	public CSSFigure(ICSSStyle style) {
 		_style = style;
-		// _element = element;
 		invalidateCSS();
 	}
 
@@ -69,6 +70,9 @@
 		return _style;
 	}
 
+	/**
+	 * @param style
+	 */
 	public void setCSSStyle(ICSSStyle style) {
 		_style = style;
 		invalidateCSS();
@@ -91,6 +95,9 @@
 		this.setLayoutManager(layout);
 	}
 
+	/**
+	 * @param layout
+	 */
 	public void setFixedLayoutManager(CSSLayout layout) {
 		this._fixedLayout = layout;
 		this.setLayoutManager(regetLayout(getLayoutManager()));
@@ -128,6 +135,10 @@
 		super.setLayoutManager(manager);
 	}
 
+	/**
+	 * @param old
+	 * @return the layout
+	 */
 	protected CSSLayout regetLayout(LayoutManager old) {
 		if (_fixedLayout != null) {
 			return _fixedLayout;
@@ -177,7 +188,7 @@
 	/**
 	 * this method is a shortcut to getFragmentsForRead
 	 * 
-	 * @return
+	 * @return fragment bounds
 	 */
 	public Rectangle[] getFragmentsBounds() {
 		List list = getFragmentsForRead();
@@ -382,8 +393,8 @@
 
 		if (Debug.DEBUG_BOX) {
 			CSSLayout csslayout = (CSSLayout) this.getLayoutManager();
-			if (csslayout._absoluteContext != null) {
-				BlockBox blockbox = csslayout._absoluteContext._blockBox;
+			if (csslayout.getAbsoluteContext() != null) {
+				BlockBox blockbox = csslayout.getAbsoluteContext()._blockBox;
 				g.setLineWidth(1);
 				g.setForegroundColor(ColorConstants.green);
 				g.drawRectangle(blockbox._x, blockbox._y, blockbox.getWidth(),
@@ -394,7 +405,7 @@
 
 	/**
 	 * Paints this Figure's client area. The client area is typically defined as
-	 * the anything inside the Figure's {@link Border} or {@link Insets}, and
+	 * the anything inside the Figure's {@link org.eclipse.draw2d.Border} or {@link org.eclipse.draw2d.geometry.Insets}, and
 	 * by default includes the children of this Figure. On return, this method
 	 * must leave the given Graphics in its initial state.
 	 * 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSInlineFlowLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSInlineFlowLayout.java
index 97f4571..39ddf89 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSInlineFlowLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSInlineFlowLayout.java
@@ -142,7 +142,7 @@
 		}
 
 		if (_currentLine != null /* && _currentLine.isOccupied() */) {
-			_currentLine._marginInsets.right = getCSSStyle().getMarginInsets().right;
+			_currentLine.getMarginInsets().right = getCSSStyle().getMarginInsets().right;
 			getFlowContext().addToCurrentLine(_currentLine);
 		}
 
@@ -192,6 +192,7 @@
 	 * 
 	 * @param line
 	 *            The LineBox to initialize.
+	 * @param firstline 
 	 */
 	protected void setupLine(LineBox line, boolean firstline) {
 		LineBox parent = getFlowContext().getCurrentLine();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSLayout.java
index 99081a7..9683a34 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSLayout.java
@@ -30,7 +30,7 @@
  * @author mengbo
  */
 public abstract class CSSLayout extends FlowFigureLayout implements FlowContext {
-	protected BlockFlowContext _absoluteContext;
+	private BlockFlowContext _absoluteContext;
 
 	// when doing absolute layout, and if top/left are both "auto", it will be
 	// relating to the normaly flow position. The following two fields try to
@@ -47,6 +47,7 @@
 	private boolean _calculatingMaxWidth = false;
 
 	/**
+	 * @param flowFigure 
 	 * @see org.eclipse.jst.pagedesigner.css2.layout.FlowFigureLayout#FlowFigureLayout(FlowFigure)
 	 */
 	protected CSSLayout(CSSFigure flowFigure) {
@@ -56,13 +57,20 @@
 	/**
 	 * a shortcut method to get the style associated with the figure.
 	 * 
-	 * @return
+	 * @return the css style
 	 */
 	public ICSSStyle getCSSStyle() {
 		return getCSSFigure().getCSSStyle();
 	}
 
 	/**
+	 * @return the absolute context
+	 */
+	protected final BlockFlowContext getAbsoluteContext() {
+        return _absoluteContext;
+    }
+
+    /**
 	 * @see org.eclipse.jst.pagedesigner.css2.layout.FlowContext#addToCurrentLine(FlowBox)
 	 */
 	public void addToCurrentLine(FlowBox block) {
@@ -129,7 +137,10 @@
 		cleanup();
 	}
 
-	protected boolean isAbsolutePosition() {
+	/**
+	 * @return true if is absolute position
+	 */
+	protected final boolean isAbsolutePosition() {
 		ICSSStyle style = getCSSStyle();
 
 		// FIXME: Some layout don't support absolute, need check here
@@ -146,7 +157,7 @@
 	/**
 	 * Child class could override this method.
 	 * 
-	 * @return
+	 * @return true if supports absolute position  
 	 */
 	protected boolean supportAbsolutePosition() {
 		if (findContainingPositionedFigure() == null) {
@@ -155,10 +166,8 @@
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.pagedesigner.css2.layout.FlowContainerLayout#preLayout()
+	/**
+	 * Perform a prelayout
 	 */
 	protected void preLayout() {
 		ICSSStyle style = this.getCSSStyle();
@@ -192,11 +201,14 @@
         return getOriginalFlowContext();
 	}
 
-	public FlowContext getParentFigureContext() {
+	/**
+	 * @return the flow context
+	 */
+	private FlowContext getParentFigureContext() {
 		return super.getFlowContext();
 	}
 
-	public void postValidateForAbsolute() {
+	final void postValidateForAbsolute() {
 		if (_absoluteContext != null) {
 			ICSSStyle style = this.getCSSStyle();
 
@@ -358,15 +370,21 @@
 		FlowBox box = (FlowBox) _currentLine.getFragments().get(
 				_currentLine.getFragments().size() - 1);
 		if (box != null) {
-			return box._marginInsets.right;
+			return box.getMarginInsets().right;
 		}
         return 0;
 	}
 
+	/**
+	 * @param c
+	 */
 	public void setCalculatingMaxWidth(boolean c) {
 		_calculatingMaxWidth = c;
 	}
 
+	/**
+	 * @return the calculated maximum width
+	 */
 	public boolean getCalcuatingMaxWidth() {
 		return _calculatingMaxWidth;
 	}
@@ -399,13 +417,16 @@
 
 	// ------------------------------------------------------------------------------------
 
-	public CSSFigure getCSSFigure() {
+	/**
+	 * @return the css figure
+	 */
+	protected final CSSFigure getCSSFigure() {
 		return (CSSFigure) getFlowFigure();
 	}
 
 	/**
 	 * 
-	 * @return
+	 * @return the fragments for read
 	 */
 	public abstract List getFragmentsForRead();
 
@@ -429,9 +450,9 @@
 	/**
 	 * Child class can override this. Normally block figure will return true.
 	 * 
-	 * @return
+	 * @return true if should use local coordinates
 	 */
-	public boolean useLocalCoordinates() {
+	protected boolean useLocalCoordinates() {
 		return false;
 	}
 
@@ -440,9 +461,9 @@
 	 * method will return true, else return false, for example,the input file
 	 * will return false.
 	 * 
-	 * @return
+	 * @return true if handling border block
 	 */
-	public boolean handlingBorderForBlock() {
+	protected boolean handlingBorderForBlock() {
 		return true;
 	}
 
@@ -450,7 +471,7 @@
 	 * This method is called when the corresponding figure is revalidated.
 	 * 
 	 */
-	public void figureRevalidate() {
+	protected void figureRevalidate() {
 		// child class can override.
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSListItemLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSListItemLayout.java
index a3608dd..a8400f4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSListItemLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSListItemLayout.java
@@ -135,7 +135,7 @@
 		List list = _blockBox.getFragments();
 		Rectangle box = _blockBox.toRectangle().getCopy().expand(
 				_blockBox.getBorderPaddingInsets().getAdded(
-						_blockBox._marginInsets));
+						_blockBox.getMarginInsets()));
 		if (list != null && !list.isEmpty()) {
 			LineBox line = (LineBox) list.get(0);
 			y = line.getBaseline() - CIRCLE_DIAMETER;
@@ -156,7 +156,7 @@
 
 		Rectangle box = _blockBox.toRectangle().getCopy().expand(
 				_blockBox.getBorderPaddingInsets().getAdded(
-						_blockBox._marginInsets));
+						_blockBox.getMarginInsets()));
 
 		x = box.x - FigureUtilities.getTextWidth(displayString, font);
 		x = x
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSPageFlowLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSPageFlowLayout.java
index c74963a..8662bc2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSPageFlowLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSPageFlowLayout.java
@@ -33,7 +33,6 @@
 
 	private Dimension _pageSizeCacheValues[] = new Dimension[4];
 
-	private Dimension _cacheMaxWidthSize = null;
 
 	/**
 	 * @param cssfigure
@@ -53,7 +52,6 @@
 		_pageSizeCacheValues = new Dimension[4];
 		_pageSize = new Dimension();
 		_recommendedWidth = 0;
-		_cacheMaxWidthSize = null;
 	}
 
 	protected void endBlock() {
@@ -96,7 +94,7 @@
 		_blockBox._x = 0;
 	}
 
-	public int getRecommendedWidth() {
+	private int getRecommendedWidth() {
 		return _recommendedWidth;
 	}
 
@@ -161,26 +159,4 @@
 		}
 		return _pageSizeCacheValues[0];
 	}
-
-	public Dimension getMaxContentWidthSize(IFigure container) {
-		if (this._cacheMaxWidthSize == null) {
-			boolean b = getCalcuatingMaxWidth();
-			setCalculatingMaxWidth(true);
-
-			// Flowpage must temporarily layout to determine its preferred size
-			int oldWidth = getRecommendedWidth();
-			setRecommendedWidth(Integer.MAX_VALUE);
-			container.validate();
-			_cacheMaxWidthSize = _pageSize.getExpanded(container.getInsets()
-					.getWidth(), container.getInsets().getHeight());
-
-			if (0 != oldWidth) {
-				setRecommendedWidth(oldWidth);
-				container.getUpdateManager().addInvalidFigure(container);
-			}
-
-			setCalculatingMaxWidth(b);
-		}
-		return _cacheMaxWidthSize;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSTextFigure.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSTextFigure.java
index 9994cbb..afb0f46 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSTextFigure.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSTextFigure.java
@@ -36,6 +36,9 @@
 
 	private List _fragments = new ArrayList(1);
 
+	/**
+	 * @param provider
+	 */
 	public CSSTextFigure(ICSSTextProvider provider) {
 		_provider = provider;
 		this.setLayoutManager(createDefaultFlowLayout());
@@ -69,7 +72,8 @@
 	}
 
 	/**
-	 * @see FlowFigure#createDefaultFlowLayout()
+	 * @return the default flow layout
+	 * 
 	 */
 	protected FlowFigureLayout createDefaultFlowLayout() {
 		return new CSSTextLayout(this);
@@ -93,6 +97,9 @@
 		return getFragments();
 	}
 
+	/**
+	 * @return the text
+	 */
 	public String getText() {
 		return _provider.getTextData();
 	}
@@ -179,7 +186,7 @@
 	 * which has closer x coordinate.
 	 * 
 	 * @param relative
-	 * @return
+	 * @return return the offset
 	 */
     // TODO: refactoring?
 	public int getNewInsertionOffset(Point relative) {
@@ -246,6 +253,10 @@
         return -1;
 	}
 
+	/**
+	 * @param relative
+	 * @return the insertion offset
+	 */
 	public int getInsertionOffset(Point relative) {
 		for (int i = 0, n = _fragments.size(); i < n; i++) {
 			TextFragmentBox box = (TextFragmentBox) _fragments.get(i);
@@ -264,7 +275,7 @@
 	 * the returned rectangle will be relative to this text figure.
 	 * 
 	 * @param offset
-	 * @return
+	 * @return the caret position
 	 */
 	public Rectangle calculateCaretPosition(int offset) {
 		// search reverse order, find the latest box that has _offset small than
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSTextLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSTextLayout.java
index d452e0d..b01c97d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSTextLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSTextLayout.java
@@ -42,6 +42,9 @@
 	// public static final int WORD_WRAP_TRUNCATE = 2;
 	private int _wrappingStyle = WORD_WRAP_HARD;
 
+	/**
+	 * @param textfigure
+	 */
 	public CSSTextLayout(CSSTextFigure textfigure) {
 		super(textfigure);
 	}
@@ -149,7 +152,11 @@
 		}
 	}
 
-	// XXX: maybe should move to TextSupport later.
+	/**
+	 * @param context
+	 * @return true if should trim leading whitespace
+	 */
+    // XXX: maybe should move to TextSupport later.
 	public boolean shouldTrimLeadingWhitespace(FlowContext context) {
 		if (!context.isCurrentLineOccupied()) {
 			return true;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSWidgetLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSWidgetLayout.java
index ef573ee..8e50123 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSWidgetLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CSSWidgetLayout.java
@@ -27,6 +27,7 @@
 
 	/**
 	 * @param flowfigure
+	 * @param provider 
 	 */
 	public CSSWidgetLayout(CSSFigure flowfigure, ICSSWidgetProvider provider) {
 		super(flowfigure);
@@ -42,6 +43,9 @@
 		_provider = provider;
 	}
 
+	/**
+	 * @return the provider
+	 */
 	public ICSSWidgetProvider getProvider() {
 		// return ((CSSWidgetFigure)this.getFlowFigure()).getProvider();
 		return _provider;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CompositeBox.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CompositeBox.java
index 6cce954..75d6a0e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CompositeBox.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/CompositeBox.java
@@ -80,20 +80,6 @@
 	}
 
 	/**
-	 * Returns the recommended height for this compositebox.
-	 * 
-	 * @return
-	 */
-	public int getRecommendedHeight() {
-		return _recommendedHeight;
-	}
-
-	// public int getInnerTop() {
-	// validate();
-	// return y;
-	// }
-
-	/**
 	 * resets fields before unioning the data from the fragments.
 	 */
 	protected void resetInfo() {
@@ -110,6 +96,9 @@
 		_recommendedWidth = w;
 	}
 
+	/**
+	 * @param h
+	 */
 	public void setRecommendedHeight(int h) {
 		_recommendedHeight = h;
 	}
@@ -129,14 +118,23 @@
 		_height = bottom - _y;
 	}
 
+	/**
+	 * @return the content width
+	 */
 	public int getContentWidth() {
 		return getWidth() - getBorderPaddingWidth();
 	}
 
+	/**
+	 * @return the content height
+	 */
 	public int getContentHeight() {
 		return getHeight() - getBorderPaddingHeight();
 	}
 
+	/**
+	 * @return the recommended content width
+	 */
 	public int getRecommendedContentWidth() {
 		return Math.max(0, getRecommendedWidth() - getBorderPaddingWidth());
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/Debug.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/Debug.java
index c15f21d..f83e901 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/Debug.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/Debug.java
@@ -18,11 +18,23 @@
  * @version 1.5
  */
 public class Debug {
+	/**
+	 * Debug flag
+	 */
 	public static final boolean DEBUG_BASELINE = false;
 
+	/**
+	 * Debug flag
+	 */
 	public static final boolean DEBUG_BOX = false;
 
+	/**
+	 * Debug flag
+	 */
 	public static final boolean DEBUG_BORDERPADDING = false;
 
+	/**
+	 * Debug flag
+	 */
 	public static final boolean DEBUG_TEXTBORDER = false;
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/DisplayToLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/DisplayToLayout.java
index d67849b..cefb4de 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/DisplayToLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/DisplayToLayout.java
@@ -24,12 +24,12 @@
 /**
  * @author mengbo
  */
-public class DisplayToLayout {
+public final class DisplayToLayout {
 	/**
 	 * @param figure
 	 * @param display
 	 * @param old
-	 * @return
+	 * @return the layout
 	 */
 	public static CSSLayout displayToLayout(CSSFigure figure, String display,
 			LayoutManager old) {
@@ -75,10 +75,8 @@
 	}
 
 	/**
-	 * @param figure
-	 * @param display
-	 * @param old
-	 * @return
+	 * @param display 
+	 * @return true if is inline
 	 */
 	public static boolean isInline(String display) {
 		return "inline".equalsIgnoreCase(display) //$NON-NLS-1$
@@ -87,7 +85,7 @@
 
 	/**
 	 * @param style
-	 * @return
+	 * @return true if is positioned
 	 */
 	public static boolean isPositioned(ICSSStyle style) {
 		Object position = style.getStyleProperty(ICSSPropertyID.ATTR_POSITION);
@@ -96,4 +94,9 @@
 		}
         return true;
 	}
+	
+	private DisplayToLayout()
+	{
+	    // util class, no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FigureUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FigureUtil.java
index 60e3f6f..56d775c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FigureUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FigureUtil.java
@@ -18,9 +18,13 @@
  * @author mengbo
  * @version 1.5
  */
-public class FigureUtil {
-	// XXX:
-	// seemed Figure.translateToRelative is bug?
+public  final class FigureUtil {
+	/**
+	 * @param figure
+	 * @param t
+	 */
+    // XXX:
+    // seemed Figure.translateToRelative is bug?
 	public static final void translateToRelative(IFigure figure, Translatable t) {
 		if (figure.getParent() != null) {
 			translateToRelative(figure.getParent(), t);
@@ -29,8 +33,12 @@
 		}
 	}
 
-	// XXX:
-	// seemed Figure.translateToAbsolute is bug?
+	/**
+	 * @param figure
+	 * @param t
+	 */
+    // XXX:
+    // seemed Figure.translateToAbsolute is bug?
 	public static final void translateToAbsolute(IFigure figure, Translatable t) {
 		if (figure.getParent() != null) {
 			figure.translateToParent(t);
@@ -39,4 +47,9 @@
 		}
 
 	}
+	
+	private FigureUtil()
+	{
+	    // util class.  No instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowBox.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowBox.java
index 149fbd9..52b3765 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowBox.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowBox.java
@@ -17,7 +17,8 @@
 /**
  * This class represents the CSS box model. See chapter 8 of CSS2 spec.
  * 
- * @see http://www.w3.org/TR/REC-CSS2/box.html
+ * see http://www.w3.org/TR/REC-CSS2/box.html
+ * 
  */
 public class FlowBox {
 	private Object _verticalAlignData = null;
@@ -25,22 +26,22 @@
 	/**
 	 * The x location
 	 */
-	public int _x;
+	protected int _x;
 
 	/**
 	 * The y location
 	 */
-	public int _y;
+	protected int _y;
 
 	int _width;
 
 	int _height;
 
-	public Insets _marginInsets = new Insets();
+	private Insets _marginInsets = new Insets();
 
-	public Insets _borderInsets = new Insets();
+	private Insets _borderInsets = new Insets();
 
-	public Insets _paddingInsets = new Insets();
+	private Insets _paddingInsets = new Insets();
 
 	/**
 	 * This method must be called on a block that is completely positioned and
@@ -67,6 +68,7 @@
 		return getHeight();
 	}
 
+
 	/**
 	 * By default, a simple FlowBox is all ascent, and no descent. Zero is
 	 * returned.
@@ -95,10 +97,16 @@
 		return _width;
 	}
 
+	/**
+	 * @param w
+	 */
 	public void setWidth(int w) {
 		_width = w;
 	}
 
+	/**
+	 * @param h
+	 */
 	public void setHeight(int h) {
 		_height = h;
 	}
@@ -113,25 +121,31 @@
 		_y = (value - getAscent());
 	}
 
+	/**
+	 * @return the border padding width
+	 */
 	public int getBorderPaddingWidth() {
 		return _borderInsets.getWidth() + _paddingInsets.getWidth();
 	}
 
 	/**
-	 * @return
+	 * @return the border padding height
 	 */
 	public int getBorderPaddingHeight() {
 		return _borderInsets.getHeight() + _paddingInsets.getHeight();
 	}
 
 	/**
-	 * @return
+	 * @return the border padding insets
 	 */
 	public Insets getBorderPaddingInsets() {
 		Insets temp = new Insets(_borderInsets);
 		return temp.add(_paddingInsets);
 	}
 
+	/**
+	 * @param rect
+	 */
 	public void setXYWidthHeight(Rectangle rect) {
 		this._x = rect.x;
 		this._y = rect.y;
@@ -154,8 +168,63 @@
 		_verticalAlignData = alignData;
 	}
 
+	/**
+	 * @return a copy of the rectangle
+	 * TODO: use getCopy() ?
+	 */
 	public Rectangle getRectangle() {
 		return new Rectangle(this._x, this._y, this.getWidth(), this
 				.getHeight());
 	}
+
+    /**
+     * @return the x coordinate
+     */
+    public final int getX() {
+        return _x;
+    }
+
+    /**
+     * @return the y coordinate
+     */
+    public final int getY() {
+        return _y;
+    }
+
+    /**
+     * @param y
+     */
+    protected void setY(int y)
+    {
+        _y = y;
+    }
+    
+    /**
+     * @return the margin insets
+     */
+    public final Insets getMarginInsets() {
+        return _marginInsets;
+    }
+
+    final void setMarginInsets(Insets marginInsets) {
+        _marginInsets = marginInsets;
+    }
+
+    final Insets getBorderInsets() {
+        return _borderInsets;
+    }
+
+    final void setBorderInsets(Insets borderInsets)
+    {
+        _borderInsets = borderInsets;
+    }
+    
+    final Insets getPaddingInsets() {
+        return _paddingInsets;
+    }
+	
+	final void setPaddingInsets(Insets paddingInsets)
+	{
+	    _paddingInsets = paddingInsets;
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowContainerLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowContainerLayout.java
index aa17d12..ca43353 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowContainerLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowContainerLayout.java
@@ -32,7 +32,7 @@
 	 */
 	protected LineBox _currentLine;
 
-	private boolean _calculatingMaxWidth = false;
+	private boolean _calculatingMaxWidth;
 
 	/**
 	 * @see org.eclipse.jst.pagedesigner.css2.layout.FlowFigureLayout#FlowFigureLayout(FlowFigure)
@@ -131,19 +131,11 @@
 		FlowBox box = (FlowBox) _currentLine.getFragments().get(
 				_currentLine.getFragments().size() - 1);
 		if (box != null) {
-			return box._marginInsets.right;
+			return box.getMarginInsets().right;
 		}
         return 0;
 	}
 
-	public void setCalculatingMaxWidth(boolean c) {
-		_calculatingMaxWidth = c;
-	}
-
-	public boolean getCalcuatingMaxWidth() {
-		return _calculatingMaxWidth;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowContext.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowContext.java
index dbca0dd..bdd4e51 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowContext.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowContext.java
@@ -49,7 +49,7 @@
 	 * considering the new element's left margin.
 	 * 
 	 * @param topMargin
-	 * @return
+	 * @return the current line
 	 */
 	LineBox getCurrentLine(int topMargin);
 
@@ -66,7 +66,7 @@
 	boolean isCurrentLineOccupied();
 
 	/**
-	 * @return
+	 * @return the last margin right coord
 	 */
 	int getLastMarginRight();
 
@@ -77,14 +77,14 @@
 	 * block element we don't set the block element's size to be recommended
 	 * width. Please see CSSBlockFlowLayout
 	 * 
-	 * @return
+	 * @return true if is calculating max width
 	 */
 	boolean isCalculatingMaxWidth();
 
 	/**
 	 * when calculating percentage width, we need the container width
 	 * 
-	 * @return
+	 * @return container width
 	 */
 	int getContainerWidth();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigure.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigure.java
index c610eb8..6a910d8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigure.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigure.java
@@ -109,10 +109,6 @@
 				.setOriginalFlowContext(flowContext);
 	}
 
-	public void setDisplayString(String s) {
-		_displayString = s;
-	}
-
 	public String toString() {
 		if (_displayString == null)
         {
@@ -121,10 +117,10 @@
         return _displayString + " " + getClass().getName();
 	}
 
-	String _displayString; // for debug
+	private String _displayString; // for debug
 
 	/**
-	 * @return
+	 * @return the flow context
 	 */
 	public FlowContext getFlowContext() {
 		return ((FlowFigureLayout) getLayoutManager()).getFlowContext();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigureLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigureLayout.java
index 3f80478..4a77597 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigureLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigureLayout.java
@@ -15,6 +15,10 @@
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.geometry.Dimension;
 
+/**
+ * Layout for flow figures
+ *
+ */
 public abstract class FlowFigureLayout extends AbstractLayout {
 
 	/**
@@ -94,14 +98,17 @@
 		_context = flowContext;
 	}
 
-	public FlowContext getOriginalFlowContext() {
+	/**
+	 * @return the original flow context
+	 */
+	protected final FlowContext getOriginalFlowContext() {
 		return _context;
 	}
 
 	/**
 	 * get flow context.
 	 * 
-	 * @return
+	 * @return the flow context
 	 */
 	public FlowContext getFlowContext() {
 		return _context;
@@ -112,5 +119,8 @@
 		return _flowFigure.toString();
 	}
 
+	/**
+	 * Called to dispose the layout
+	 */
 	abstract public void dispose();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowUtilities.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowUtilities.java
index 5ebde82..6cd9e19 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowUtilities.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowUtilities.java
@@ -22,7 +22,7 @@
  * Utility class for FlowFigures.
  * 
  */
-public class FlowUtilities extends FigureUtilities {
+public final class FlowUtilities extends FigureUtilities {
 	/**
 	 * Returns the number of characters from the specified String that will fit
 	 * in the available amount of space. An average character width can be
@@ -61,7 +61,7 @@
 	 * @param availableWidth
 	 * @param avg
 	 * @param wrapping
-	 * @return
+	 * @return how much text can fit into
 	 */
 	public static int getTextForSpace(String string, Font font,
 			int availableWidth, float avg, int wrapping) {
@@ -205,6 +205,13 @@
 		return result;
 	}
 
+	/**
+	 * @param string
+	 * @param font
+	 * @param availableWidth
+	 * @param avg
+	 * @return the text width
+	 */
 	public static int getTextInWidth(String string, Font font,
 			int availableWidth, float avg) {
 		if (string.length() == 0) {
@@ -229,7 +236,7 @@
 	 * 
 	 * @param s
 	 * @param f
-	 * @return
+	 * @return the dimension
 	 */
 	public static Dimension getStringExtents2(String s, Font f) {
 		return new Dimension(getStringDimension(s, f));
@@ -257,4 +264,8 @@
 		frag.setWidth(d.width);
 	}
 
+	private FlowUtilities()
+	{
+	    // no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/ICSSFigure.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/ICSSFigure.java
index b0a1935..cecf650 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/ICSSFigure.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/ICSSFigure.java
@@ -25,14 +25,14 @@
 	 * Note, this method is for read only, caller should not change the returned
 	 * list and items in the returned list.
 	 * 
-	 * @return
+	 * @return the list of fragments
 	 */
 	public List getFragmentsForRead();
 
 	/**
 	 * get the CSSStyle of this CSS figure.
 	 * 
-	 * @return
+	 * @return the css style
 	 */
 	public ICSSStyle getCSSStyle();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/ICSSLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/ICSSLayout.java
index 1320103..f17c54a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/ICSSLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/ICSSLayout.java
@@ -26,7 +26,7 @@
 	/**
 	 * Each ICSSLayout is dedicated to a single CSSFigure.
 	 * 
-	 * @return
+	 * @return the figure
 	 */
 	public ICSSFigure getICSSFigure();
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/LineBox.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/LineBox.java
index 5ab842f..fcfe8b4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/LineBox.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/LineBox.java
@@ -18,7 +18,7 @@
 /**
  * A composite box representing a single line. LineBox calculates its ascent and
  * descent from the child boxes it contains. Clients can call
- * {@link #getAscent()}or {@link#getHeight()}at any time and expect valid
+ * {@link #getAscent()} at any time and expect valid
  * values. The child boxes that are added to a line have unspecied locations
  * until {@link #commit()}is called, at which time the child boxes are layed
  * out in left-to-right order, and their baselines are all aligned vertically.
@@ -78,8 +78,8 @@
 		int xLocation = _x;
 		for (int i = 0; i < _fragments.size(); i++) {
 			FlowBox block = (FlowBox) _fragments.get(i);
-			block._x = xLocation + block._marginInsets.left;
-			xLocation = block._x + block._width + block._marginInsets.right;
+			block._x = xLocation + block.getMarginInsets().left;
+			xLocation = block._x + block._width + block.getMarginInsets().right;
 
 			if (_fragments.size() > 1 && block instanceof TextFragmentBox) {
 				TextFragmentBox textBox = (TextFragmentBox) block;
@@ -131,7 +131,7 @@
 		}
 	}
 
-	protected int getVerticalAlignType(FlowBox box) {
+	private int getVerticalAlignType(FlowBox box) {
 		Object data = box.getVerticalAlignData();
 
 		if (data != null) {
@@ -278,7 +278,7 @@
 		}
 
 		_accumlatedWidth += blockInfo._width
-				+ blockInfo._marginInsets.getWidth();
+				+ blockInfo.getMarginInsets().getWidth();
 		if (_accumlatedWidth > _width) {
 			_width = _accumlatedWidth;
 		}
@@ -300,6 +300,7 @@
 	}
 
 	/**
+	 * @return true if is occupied
 	 * @see org.eclipse.draw2d.geometry.Rectangle#isEmpty()
 	 */
 	public boolean isOccupied() {
@@ -328,6 +329,9 @@
 		return true;
 	}
 
+	/**
+	 * @return true if is empty string line
+	 */
 	public boolean isEmptyStringLine() {
 		// if(this.getWidth() == 0)
 		// {
@@ -411,4 +415,10 @@
 	public void setHtmlInitData(Object htmlInitData) {
 		this._htmlInitData = htmlInitData;
 	}
+
+    @Override
+    public void setY(int y) {
+        // make set y public
+        super.setY(y);
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/MultiLineLabel.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/MultiLineLabel.java
index 4ea41d9..e49872c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/MultiLineLabel.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/MultiLineLabel.java
@@ -19,6 +19,10 @@
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.FontMetrics;
 
+/**
+ * A multi-line label
+ *
+ */
 public class MultiLineLabel extends Label {
 	private static String ELLIPSIS = "..."; //$NON-NLS-1$
 
@@ -63,7 +67,11 @@
 		return lines;
 	}
 
-	public String getSubStringText(String text) {
+	/**
+	 * @param text
+	 * @return the substring text
+	 */
+	private String getSubStringText(String text) {
 		String subStringText = text;
 
 		Font currentFont = getFont();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/TextFragmentBox.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/TextFragmentBox.java
index 8090751..58776e4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/TextFragmentBox.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/TextFragmentBox.java
@@ -26,7 +26,7 @@
 
 	// boolean _truncated;
 
-	public boolean _isLastCharWhitespace = false;
+	/*package*/ boolean _isLastCharWhitespace = false;
 
 	private String _textData;
 
@@ -76,10 +76,16 @@
 		_width = w;
 	}
 
+	/**
+	 * @return the text data
+	 */
 	public String getTextData() {
 		return _textData;
 	}
 
+	/**
+	 * @param txt
+	 */
 	public void setTextData(String txt) {
 		_textData = txt;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/TextLayoutSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/TextLayoutSupport.java
index 0a4a352..65ca4c1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/TextLayoutSupport.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/TextLayoutSupport.java
@@ -73,6 +73,12 @@
 	/**
 	 * this method will create a set of TextFragment. Each fragment will offset
 	 * to the original text (whole text for the text figure).
+	 * @param context 
+	 * @param text 
+	 * @param fragments 
+	 * @param font 
+	 * @param wrappingStyle 
+	 * @param trimLeading 
 	 */
 	public static void layoutNormal(FlowContext context, String text,
 			List fragments, Font font, int wrappingStyle, boolean trimLeading) {
@@ -147,6 +153,12 @@
 		}
 	}
 
+	/**
+	 * @param context
+	 * @param text
+	 * @param fragments
+	 * @param font
+	 */
 	public static void layoutNoWrap(FlowContext context, String text,
 			List fragments, Font font) {
 		TextFragmentBox fragment;
@@ -187,11 +199,22 @@
 		return result;
 	}
 
+	/**
+	 * @param g
+	 * @param fragments
+	 * @param font
+	 * @param textDecoration
+	 */
 	public static void paintTextFigure(Graphics g, List fragments, Font font,
 			int textDecoration) {
 		paintTextFigure(g, fragments, font, null, textDecoration);
 	}
 
+	/**
+	 * @param g
+	 * @param rect
+	 * @param textDecoration
+	 */
 	public static void paintTextDecoration(Graphics g, Rectangle rect,
 			int textDecoration) {
 		if ((textDecoration & TextDecorationMeta.UNDERLINE) != 0) {
@@ -207,6 +230,13 @@
 		}
 	}
 
+	/**
+	 * @param g
+	 * @param fragments
+	 * @param font
+	 * @param color
+	 * @param textDecoration
+	 */
 	public static void paintTextFigure(Graphics g, List fragments, Font font,
 			Color color, int textDecoration) {
 		// FIXME: It happens there is problem in this method's parameters. what
@@ -359,6 +389,12 @@
 		}
 	}
 
+	/**
+	 * @param textAlign
+	 * @param rect
+	 * @param textWidth
+	 * @return the x value
+	 */
 	public static int getBeginX(Object textAlign, Rectangle rect, int textWidth) {
 		int x = rect.x;
 		if (textAlign != null) {
@@ -383,4 +419,9 @@
 		}
 		return x;
 	}
+	
+	private TextLayoutSupport()
+	{
+	    // no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/WidgetBox.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/WidgetBox.java
index 5be873b..220d61c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/WidgetBox.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/WidgetBox.java
@@ -27,12 +27,12 @@
         return _ascent;
 	}
 
-	public void setAscent(int ascent) {
+	/*package*/ void setAscent(int ascent) {
 		_ascent = ascent;
 	}
 
 	/**
-	 * @return
+	 * @return true if supports ascent
 	 */
 	public boolean supportAscent() {
 		return _ascent > 0;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CSSTableCellLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CSSTableCellLayout.java
index 7351ac0..1eb62e8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CSSTableCellLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CSSTableCellLayout.java
@@ -78,7 +78,7 @@
 		if (lines != null && !lines.isEmpty()) {
 			FlowBox bottomBox = ((FlowBox) lines.get(lines.size() - 1));
 			FlowBox topBox = ((FlowBox) lines.get(0));
-			linesHeight = bottomBox._y + bottomBox.getHeight() - topBox._y;
+			linesHeight = bottomBox.getY() + bottomBox.getHeight() - topBox.getY();
 		}
 		int movement = 0;
 		if (VerticalAlignMeta.BOTTOM.equals(verticalStyle)) {
@@ -105,10 +105,10 @@
 			for (int i = 0, n = lines.size(); i < n; i++) {
 				if (lines.get(i) instanceof LineBox) {
 					LineBox lineBox = (LineBox) lines.get(i);
-					int LineMovement = Math.max(lineBox._marginInsets
+					int LineMovement = Math.max(lineBox.getMarginInsets()
 							.getHeight(), movement);
-					lineBox._y = lineBox._y + LineMovement
-							- lineBox._marginInsets.getHeight();
+					lineBox.setY(lineBox.getY() + LineMovement
+							- lineBox.getMarginInsets().getHeight());
 				}
 			}
 		}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CSSTableLayout2.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CSSTableLayout2.java
index 7ba7fda..3a9fa0d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CSSTableLayout2.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CSSTableLayout2.java
@@ -152,8 +152,8 @@
 		}
 		// For caption, determine a maximum and minimum width from it.
 		int captionWidth = 0;
-		if (_tableInfo._caption != null) {
-			captionWidth = _tableInfo._caption.getDimension().width;
+		if (_tableInfo.getCaption() != null) {
+			captionWidth = _tableInfo.getCaption().getDimension().width;
 		}
 
 		// For each cell that spans more than one column, increase the
@@ -315,8 +315,8 @@
 				: minHeight;
 
 		int captionHeight = 0;
-		if (_tableInfo._caption != null) {
-			_captionSize = _tableInfo._caption.getFigure().getPreferredSize(
+		if (_tableInfo.getCaption() != null) {
+			_captionSize = _tableInfo.getCaption().getFigure().getPreferredSize(
 					_internalTableWidth, SWT.DEFAULT);
 			captionHeight = _captionSize.height;
 		} else {
@@ -376,7 +376,7 @@
 		int[] delta = new int[columnMinWidths.length];
 		int sigmaDelta = 0;
 		for (int i = 0; i < columnMinWidths.length && toDistribute > 0; i++) {
-			if (_tableInfo._widthSpecified[i]) {
+			if (_tableInfo.getWidthSpecified()[i]) {
 				delta[i] = 0;
 			} else {
 				delta[i] = columnMaxWidths[i] - columnMinWidths[i];
@@ -410,7 +410,7 @@
 		}
 		ArrayList list = new ArrayList();
 		for (int i = 0; i < columnMinWidths.length; i++) {
-			if (!_tableInfo._widthSpecified[i]) {
+			if (!_tableInfo.getWidthSpecified()[i]) {
 				list.add(new Integer(i));
 			}
 		}
@@ -563,7 +563,7 @@
 	 * @return the table caption info
 	 */
 	public TableCaptionInfo getCaptionInfo() {
-		return _tableInfo._caption;
+		return _tableInfo.getCaption();
 	}
 
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CachedTableCellLayout.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CachedTableCellLayout.java
index 6a6ac4d..24e2be8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CachedTableCellLayout.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/CachedTableCellLayout.java
@@ -25,10 +25,11 @@
  * @author mengbo
  * @version 1.5
  */
-public abstract class CachedTableCellLayout extends CSSBlockFlowLayout {
-	protected Dimension _pageSize = new Dimension();
+public abstract class CachedTableCellLayout extends CSSBlockFlowLayout 
+{
+	private Dimension _pageSize = new Dimension();
 
-	protected boolean _calculatingSize = false;
+	private boolean _calculatingSize = false;
 
 	private int _pageSizeCacheKeys[] = new int[4];
 
@@ -103,9 +104,15 @@
 		super.preLayout();
 	}
 
-	public abstract Rectangle getCellRect();
+	/**
+	 * @return the cell rectangle
+	 */
+	protected abstract Rectangle getCellRect();
 
-	public abstract boolean initializeTableInfo();
+	/**
+	 * @return true if initialized
+	 */
+	protected abstract boolean initializeTableInfo();
 
 	protected void setupBlock() {
 		if (_isTable) {
@@ -191,7 +198,7 @@
 		}
 	}
 
-	public int getRecommendedWidth() {
+	private int getRecommendedWidth() {
 		return _recommendedWidth;
 	}
 
@@ -202,6 +209,12 @@
 		_recommendedWidth = width;
 	}
 
+	/**
+	 * @param container
+	 * @param width
+	 * @param height
+	 * @return max width size
+	 */
 	public Dimension getMaxContentWidthSize(IFigure container, int width,
 			int height) {
 		try {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableCellInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableCellInfo.java
index 05c3c07..286462a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableCellInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableCellInfo.java
@@ -163,7 +163,7 @@
 								+ style.getPaddingInsets().getWidth();
 					}
 					if (this.getColSpan() == 1) {
-						tableInfo._widthSpecified[this.getColumnIndex()] = true;
+						tableInfo.getWidthSpecified()[this.getColumnIndex()] = true;
 					}
 				}
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableInfo.java
index 5f4b889..06e135c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableInfo.java
@@ -23,36 +23,34 @@
  * @author mengbo
  * @version 1.5
  */
-public class TableInfo extends TableItemInfo {
-	List _tableHeaderGroups = new ArrayList();
+/*package*/ class TableInfo extends TableItemInfo {
+	private List _tableHeaderGroups = new ArrayList();
 
-	List _tableTRandTRGs = new ArrayList();
+	private List _tableTRandTRGs = new ArrayList();
 
-	List _tableFooterGroups = new ArrayList();
+	private List _tableFooterGroups = new ArrayList();
 
-	TableCaptionInfo _caption;
+	private TableCaptionInfo _caption;
 
-	int _columnCount;
+	private int _columnCount;
 
-	int _rowCount;
+	private int _rowCount;
 
-	List _cells = null;
+	private List _cells = null;
 
 	private List _rows = null;
 
-	int _tableWidth; // calculated table width, valid after calling to
+	private int _tableWidth; // calculated table width, valid after calling to
 
 	// calculateTableWidth
 
-	int _availableWidth;
-
-	int _tableHeight;
+	private int _tableHeight;
 
 	private int[] _widthPercentage;
 
 	private int[] _heightPercentage;
 
-	boolean[] _widthSpecified;
+	private boolean[] _widthSpecified;
 
 	/**
 	 * @param figure
@@ -61,27 +59,35 @@
 		super(figure);
 	}
 
-	public List getTableHeaderGroups() {
-		return _tableHeaderGroups;
-	}
 
-	public List getTRandTRGs() {
-		return _tableTRandTRGs;
-	}
-
-	public List getTableFooterGroups() {
-		return _tableFooterGroups;
-	}
-
+	/**
+	 * @return the column count
+	 */
 	public int getColumnCount() {
 		return _columnCount;
 	}
 
+	/**
+	 * @return the row count
+	 */
 	public int getRowCount() {
 		return _rowCount;
 	}
 
-	protected void constructTable() {
+	final TableCaptionInfo getCaption() {
+        return _caption;
+    }
+
+
+    /**
+     * @return width specified
+     */
+    final boolean[] getWidthSpecified() {
+        return _widthSpecified;
+    }
+
+
+    void constructTable() {
 		List child = getFigure().getChildren();
 		for (int i = 0, size = child.size(); i < size; i++) {
 			IFigure childfigure = (IFigure) child.get(i);
@@ -160,13 +166,17 @@
 		}
 	}
 
-	public void setWidthPercentage(int columnIndex, int percentageValue) {
+	/**
+	 * @param columnIndex
+	 * @param percentageValue
+	 */
+	void setWidthPercentage(int columnIndex, int percentageValue) {
 		if (percentageValue > this._widthPercentage[columnIndex]) {
 			this._widthPercentage[columnIndex] = percentageValue;
 		}
 	}
 
-	public void setHeightPercentage(int rowIndex, int percentageValue) {
+	void setHeightPercentage(int rowIndex, int percentageValue) {
 		if (percentageValue > this._heightPercentage[rowIndex]) {
 			this._heightPercentage[rowIndex] = percentageValue;
 		}
@@ -181,11 +191,11 @@
 		return this._widthPercentage;
 	}
 
-	public int[] getHeightPercentages() {
+	int[] getHeightPercentages() {
 		return this._heightPercentage;
 	}
 
-	public List getRows() {
+	List getRows() {
 		if (_rows == null) {
 			this._rows = new ArrayList();
 
@@ -213,7 +223,7 @@
 		return _rows;
 	}
 
-	public List getCells() {
+	List getCells() {
 		if (_cells == null) {
 			_cells = new ArrayList();
 
@@ -249,7 +259,7 @@
 	 */
 	public void calculateWidth(int contentWidth, int availableWidth) {
 		_tableWidth = contentWidth;
-		_availableWidth = availableWidth;
+		//_availableWidth = availableWidth;
 
 		// next calculate cell width
 		List cells = getCells();
@@ -259,7 +269,7 @@
 		}
 	}
 
-	public void calculateHeight(int contentHeight) {
+	void calculateHeight(int contentHeight) {
 		_tableHeight = contentHeight;
 
 		List rows = getRows();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableInfoContext.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableInfoContext.java
index 87ffa68..f28d3e0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableInfoContext.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableInfoContext.java
@@ -19,7 +19,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class TableInfoContext {
+/*package*/ class TableInfoContext {
 	static Logger _log = PDPlugin.getLogger(TableInfoContext.class);
 
 	int _currentCol = 0;
@@ -40,29 +40,35 @@
 	}
 
 	/**
-	 * @return
+	 * @return the flex array
 	 */
 	public IntFlexArray getIntFlexArray() {
 		return _array;
 	}
 
 	/**
-	 * @return
+	 * @return the current column
 	 */
 	public int getCurrentCol() {
 		return _currentCol;
 	}
 
+	/**
+	 * @param currentcol
+	 */
 	public void setCurrentCol(int currentcol) {
 		_currentCol = currentcol;
 	}
 
+	/**
+	 * @return the current row
+	 */
 	public int getCurrentRow() {
 		return _currentRow;
 	}
 
 	/**
-	 * @return
+	 * @return the column count
 	 */
 	public int getColumnCount() {
 		return _colCount;
@@ -106,7 +112,7 @@
 	}
 
 	/**
-	 * @return
+	 * @return the row count
 	 */
 	public int getRowCount() {
 		return _rowCount;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableItemInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableItemInfo.java
index 33c6e12..9f39064 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableItemInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableItemInfo.java
@@ -18,20 +18,27 @@
  * @author mengbo
  * @version 1.5
  */
-public class TableItemInfo {
-	public ICSSFigure _figure;
+/*package*/ class TableItemInfo 
+{
+	private ICSSFigure _figure;
 
 	/**
-	 * 
+	 * @param figure 
 	 */
 	public TableItemInfo(ICSSFigure figure) {
 		_figure = figure;
 	}
 
+	/**
+	 * @return the figure
+	 */
 	public ICSSFigure getFigure() {
 		return _figure;
 	}
 
+	/**
+	 * @return the style
+	 */
 	public ICSSStyle getStyle() {
 		return _figure.getCSSStyle();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableRowGroupInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableRowGroupInfo.java
index d9ae2fe..8ab83ff 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableRowGroupInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableRowGroupInfo.java
@@ -23,7 +23,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class TableRowGroupInfo extends TableItemInfo {
+/*package*/ class TableRowGroupInfo extends TableItemInfo {
 	List _rowList = new ArrayList();
 
 	private int _rowIndex;
@@ -37,15 +37,15 @@
 		super(figure);
 	}
 
-	public List getRowList() {
+	List getRowList() {
 		return _rowList;
 	}
 
-	public int getRowIndex() {
+	int getRowIndex() {
 		return _rowIndex;
 	}
 
-	public int getRowCount() {
+	int getRowCount() {
 		return this._rowCount;
 	}
 
@@ -89,7 +89,7 @@
 
 	/**
 	 * @param figure
-	 * @return
+	 * @return the table row info
 	 */
 	public TableRowInfo findRowInfo(CSSFigure figure) {
 		for (int i = 0, size = _rowList.size(); i < size; i++) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableRowInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableRowInfo.java
index f305d0d..75544e2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableRowInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/table/TableRowInfo.java
@@ -25,7 +25,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class TableRowInfo extends TableItemInfo {
+/*package*/ class TableRowInfo extends TableItemInfo {
 	List _cells = new ArrayList();
 
 	int _rowIndex;
@@ -39,15 +39,15 @@
 		super(figure);
 	}
 
-	public List getCells() {
+	List getCells() {
 		return _cells;
 	}
 
-	public int getRowIndex() {
+	int getRowIndex() {
 		return _rowIndex;
 	}
 
-	public int getSpecifiedRowHeight() {
+	int getSpecifiedRowHeight() {
 		return _rowHeight;
 	}
 
@@ -82,7 +82,7 @@
 	}
 
 	/**
-	 * @param _cells2
+	 * @param cells
 	 */
 	public void getCells(List cells) {
 		cells.addAll(this._cells);
@@ -90,7 +90,7 @@
 
 	/**
 	 * @param figure
-	 * @return
+	 * @return the table cell info
 	 */
 	public TableCellInfo getCellInfo(CSSFigure figure) {
 		for (int i = 0, size = _cells.size(); i < size; i++) {
@@ -104,7 +104,7 @@
 
 	/**
 	 * @param info
-	 * @param height
+	 * @param tableHeight
 	 */
 	public void calculateHeight(TableInfo info, int tableHeight) {
 		ICSSStyle style = this.getFigure().getCSSStyle();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CSSHtmlListStyleData.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CSSHtmlListStyleData.java
index 9711992..01465cd 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CSSHtmlListStyleData.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CSSHtmlListStyleData.java
@@ -18,24 +18,54 @@
  * @author mengbo
  */
 public class CSSHtmlListStyleData {
+	/**
+	 * Image
+	 */
 	public final static int LIST_T_IMAGE = 0;
 
+	/**
+	 * Disc
+	 */
 	public final static int LIST_T_DISC = 1;
 
+	/**
+	 * Circle
+	 */
 	public final static int LIST_T_CIRCLE = 2;
 
+	/**
+	 * Square
+	 */
 	public final static int LIST_T_SQUARE = 3;
 
+	/**
+	 * Decimal
+	 */
 	public final static int LIST_T_DECIMAL = 0x11;
 
+	/**
+	 * Decimial w/ leading zero
+	 */
 	public final static int LIST_T_DECIMAL_LEADING_ZERO = 0x12;
 
+	/**
+	 * Lower alpha
+	 */
 	public final static int LIST_T_LOWER_ALPHA = 0x13;
 
+	/**
+	 * Lower Roman
+	 */
 	public final static int LIST_T_LOWER_ROMAN = 0x14;
 
+	/**
+	 * Upper alpha
+	 */
 	public final static int LIST_T_UPPER_ALPHA = 0x15;
 
+	/**
+	 * Upper Roman
+	 */
 	public final static int LIST_T_UPPER_ROMAN = 0x16;
 
 	//private CSSMarkerStyleData _markerStyleData;
@@ -44,6 +74,9 @@
 
 	private int _type;
 
+	/**
+	 * @return if is a default picture type
+	 */
 	public boolean isDefaultPicture() {
 		return (_type & 0xf) != 0;
 	}
@@ -81,12 +114,16 @@
 		return _type;
 	}
 
+	/**
+	 * @param type
+	 */
 	public void setType(String type) {
 
 		this._type = toTypeInt(type);
 	}
 
 	/**
+	 * @param index 
 	 * @return Returns the markerString.
 	 */
 	public String getTextValue(int index) {
@@ -98,14 +135,24 @@
 
 	}
 
+	/**
+	 * @return true if is a text type
+	 */
 	public boolean isText() {
 		return (_type & 0xf0) != 0;
 	}
 
+	/**
+	 * @return true if is an image type
+	 */
 	public boolean isImage() {
 		return (_type == LIST_T_IMAGE);
 	}
 
+	/**
+	 * @param type
+	 * @return convert the 'type' String to one of LIST_T_*
+	 */
 	public static int toTypeInt(String type) {
 		if (type.equalsIgnoreCase(ICSSPropertyID.VAL_DECIMAL)) {
 			return LIST_T_DECIMAL;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CSSMarkerStyleData.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CSSMarkerStyleData.java
index 0fcbb6e..0383b52 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CSSMarkerStyleData.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CSSMarkerStyleData.java
@@ -35,7 +35,7 @@
 	}
 
 	/**
-	 * @param isOutside
+	 * @param position
 	 *            The isBefore to set.
 	 */
 	public void setPosition(String position) {
@@ -76,6 +76,10 @@
 		_textContent = value;
 	}
 
+	/**
+	 * @return the next element.  removes it from the content vector.  Returns
+	 * null if the content is empty
+	 */
 	public Object getNextElement() {
 		if (_content == null || _content.size() == 0) {
 			return null;
@@ -83,6 +87,9 @@
 		return _content.remove(0);
 	}
 
+	/**
+	 * @param content
+	 */
 	public void setContent(Vector content) {
 		_content = content;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ContentObject.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ContentObject.java
index 5d666f7..ad32149 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ContentObject.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ContentObject.java
@@ -28,7 +28,7 @@
 	}
 
 	/**
-	 * @param _counter
+	 * @param counter
 	 *            The _counter to set.
 	 */
 	public void setCounter(ICounterValueGenerator counter) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CounterHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CounterHelper.java
index b8d1138..b6913d7 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CounterHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CounterHelper.java
@@ -24,79 +24,76 @@
 /**
  * @author mengbo
  */
-public class CounterHelper {
+public final class CounterHelper {
+	/**
+	 * Image
+	 */
 	public final static int LIST_T_IMAGE = 0;
 
+	/**
+	 * Disc
+	 */
 	public final static int LIST_T_DISC = 1;
 
+	/**
+	 * Circle
+	 */
 	public final static int LIST_T_CIRCLE = 2;
 
+	/**
+	 * Square
+	 */
 	public final static int LIST_T_SQUARE = 3;
 
+	/**
+	 * Decimal
+	 */
 	public final static int LIST_T_DECIMAL = 0x11;
 
+	/**
+	 * Leading-zero decimal
+	 */
 	public final static int LIST_T_DECIMAL_LEADING_ZERO = 0x12;
 
+	/**
+	 * Lower alpha
+	 */
 	public final static int LIST_T_LOWER_ALPHA = 0x13;
 
+	/**
+	 * Lower roman
+	 */
 	public final static int LIST_T_LOWER_ROMAN = 0x14;
 
+	/**
+	 * Upper alpha
+	 */
 	public final static int LIST_T_UPPER_ALPHA = 0x15;
 
+	/**
+	 * Upper roman
+	 */
 	public final static int LIST_T_UPPER_ROMAN = 0x16;
 
+	/**
+	 * Lower greek
+	 */
 	public final static int LIST_T_LOWER_GREEK = 0x21;
 
+	/**
+	 * Armenian
+	 */
 	public final static int LIST_T_ARMENIAN = 0x22;
 
+	/**
+	 * Georgian
+	 */
 	public final static int LIST_T_GEORGIAN = 0x23;
 
+	/**
+	 * None
+	 */
 	public final static int LIST_T_NONE = 0x24;
-
-	// /**
-	// * Collect counters declaration from node and its parents
-	// *
-	// * @param style
-	// * @param counters
-	// * @return
-	// */
-	// public static void getCounters(ICSSStyle style, HashMap counters)
-	// {
-	// processCounterReset(style, counters);
-	// Object content = style.getStyleProperty(ICSSPropertyID.ATTR_CONTENT);
-	// // content counter could be reference or creation of new one.
-	// if (content != null && content != ICSSPropertyMeta.NOT_SPECIFIED)
-	// {
-	// // XXX: what 's the content.
-	// ContentObject contentObject = null;
-	// Object counter = null;
-	// if (content instanceof List)
-	// {
-	// // TODO: we only deal with one currently.
-	// contentObject = (ContentObject) ((List) content).get(0);
-	// }
-	// else if (content instanceof ContentObject)
-	// {
-	// contentObject = (ContentObject) content;
-	// }
-	// if (style.getParentStyle() != null)
-	// {
-	// String identifier = contentObject.getCounter().getIdentifier();
-	// counter = style.getParentStyle().findCounter(identifier, false);
-	// if (counter == null)
-	// {
-	// // no reference, then create it.
-	// counter = contentObject.getCounter();
-	// }
-	// }
-	// Assert.isTrue(counter != null);
-	// ((Counter2) counter).regist(style);
-	// counters.put(((Counter2) counter).getIdentifier(), counter);
-	// }
-	// // counter-increment is reference.
-	// processCounterIncrement(style/* , counters */);
-	// }
-
 	/**
 	 * @param style
 	 * @param counters
@@ -154,12 +151,8 @@
 
 	/**
 	 * @param style
-	 * @param counters
 	 */
-	public static void processCounterIncrement(ICSSStyle style/*
-																 * , HashMap
-																 * counters
-																 */) {
+	public static void processCounterIncrement(ICSSStyle style) {
 		Object counterIncrements = style
 				.getStyleProperty(ICSSPropertyID.ATTR_COUNTER_INCREMENT);
 		if (counterIncrements != null
@@ -191,10 +184,10 @@
 		}
 	}
 
-	public static boolean isImage(ICSSStyle style) {
-		return false;
-	}
-
+	/**
+	 * @param style
+	 * @return true if the style is a text style
+	 */
 	public static boolean isText(ICSSStyle style) {
 		String display = style.getDisplay();
 		Object styleType = style
@@ -205,10 +198,11 @@
 		&& !CounterValueGenerator.NON_STRING_TYPES.contains(styleType));
 	}
 
-	public static boolean isNodeImage(ICSSStyle style) {
-		return false;
-	}
-
+	/**
+	 * @param style
+	 * @return the type of the style.  One of the LIST_T_* values, or -1 if the
+	 * style is unknown
+	 */
 	public static int getType(ICSSStyle style) {
 		Object type = style
 				.getStyleProperty(ICSSPropertyID.ATTR_LIST_STYLE_TYPE);
@@ -218,6 +212,10 @@
         return -1;
 	}
 
+	/**
+	 * @param type
+	 * @return the type enumeration for the  type string
+	 */
 	public static int toTypeInt(String type) {
 
 		if (type.equalsIgnoreCase(ICSSPropertyID.VAL_DECIMAL)) {
@@ -257,41 +255,26 @@
 		return 0;
 	}
 
-	// TODO: for future use we need a new ContentObject to hold other objects
-	// declares in css style.
-
-	// public static ContentObject getContentObject(ICSSStyle style)
-	// {
-	// // TODO: currently we only fetch first counter in case there are more
-	// than one counters.
-	// if (style.getStyleProperty(ICSSPropertyID.ATTR_CONTENT) !=
-	// ICSSPropertyMeta.NOT_SPECIFIED)
-	// {
-	// Object content = style.getStyleProperty(ICSSPropertyID.ATTR_CONTENT);
-	// Object object = null;
-	// if (content instanceof List)
-	// {
-	// object = ((List) content).get(0);
-	// }
-	// else if (content instanceof ContentObject)
-	// {
-	// object = content;
-	// }
-	// if (object instanceof ContentObject)
-	// {
-	// return (ContentObject) content;
-	// }
-	// }
-	// return null;
-	// }
-
+	/**
+	 * @param cssValue
+	 * @return true if the cssValue is an IDENT
+	 */
 	public static boolean isIdentifier(Object cssValue) {
 		return (cssValue instanceof ICSSPrimitiveValue)
 				&& ((ICSSPrimitiveValue) cssValue).getPrimitiveType() == CSSPrimitiveValue.CSS_IDENT;
 	}
 
+	/**
+	 * @param cssValue
+	 * @return true if the css value is a number
+	 */
 	public static boolean isNumber(Object cssValue) {
 		return cssValue instanceof ICSSPrimitiveValue
 				&& ((ICSSPrimitiveValue) cssValue).getPrimitiveType() == ICSSPrimitiveValue.CSS_INTEGER;
 	}
+	
+	private  CounterHelper()
+	{
+	    //  util class; no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CounterValueGenerator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CounterValueGenerator.java
index 1776993..a05bb7b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CounterValueGenerator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/CounterValueGenerator.java
@@ -30,9 +30,9 @@
 public class CounterValueGenerator implements ICounterValueGenerator {
 	private final static int DEFAULT_INITIAL_VALUE = 0;
 
-	public static final Set STRING_TYPES = new HashSet();
+	private static final Set STRING_TYPES = new HashSet();
 
-	public static final Set NON_STRING_TYPES = new HashSet();
+	static final Set NON_STRING_TYPES = new HashSet();
 	static {
 		NON_STRING_TYPES.add("disc");
 		NON_STRING_TYPES.add("circle");
@@ -74,6 +74,12 @@
 
 	private ICSSStyle _style;
 
+	/**
+	 * @param identifier
+	 * @param styleType
+	 * @param seperator
+	 * @param style
+	 */
 	public CounterValueGenerator(String identifier, String styleType,
 			String seperator, ICSSStyle style) {
 		_identifier = identifier;
@@ -96,17 +102,16 @@
 		return _identifier;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
+	/**
+	 * @return the style  type 
 	 * @see org.w3c.dom.css.Counter#getListStyle()
 	 */
 	public String getListStyle() {
 		return _styleType;
 	}
 
-	/*
-	 * (non-Javadoc)
+	/**
+	 * @return the separator
 	 * 
 	 * @see org.w3c.dom.css.Counter#getSeparator()
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/HTMLListInfoHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/HTMLListInfoHelper.java
index 01b660f..c352f96 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/HTMLListInfoHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/HTMLListInfoHelper.java
@@ -23,7 +23,7 @@
  * 
  * @author mengbo
  */
-public class HTMLListInfoHelper {
+/*package*/ final class HTMLListInfoHelper {
 	/**
 	 * @return Returns the start.
 	 */
@@ -40,6 +40,10 @@
 		return null;
 	}
 
+	/**
+	 * @param style
+	 * @return the start int
+	 */
 	public static Integer getStartInt(ICSSStyle style) {
 		try {
 			return new Integer(getStart(style));
@@ -61,6 +65,10 @@
 		return null;
 	}
 
+	/**
+	 * @param style
+	 * @return the Integer value or null if not parsable
+	 */
 	public static Integer getValueInt(ICSSStyle style) {
 		try {
 			return Integer.valueOf(getValue(style));
@@ -68,4 +76,9 @@
 			return null;
 		}
 	}
+	
+	private HTMLListInfoHelper()
+	{
+	    // no external instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ICounterValueGenerator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ICounterValueGenerator.java
index 86c9793..67d0197 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ICounterValueGenerator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ICounterValueGenerator.java
@@ -15,31 +15,50 @@
  * @author mengbo
  */
 public interface ICounterValueGenerator {
+	/**
+	 * @return the identifier
+	 */
 	public String getIdentifier();
 
+	/**
+	 * @param initial
+	 * @return the reset count
+	 */
 	public ICounterValueGenerator resetCount(int initial);
 
+	/**
+	 * @return the generator
+	 */
 	public ICounterValueGenerator resetCount();
 
-	/*
+	/**
 	 * Set the counter based on value.
+	 * @param value 
 	 */
 	public void setCount(Integer value);
 
 	// public void regist(Object caller);
 	// public void unregist(Object caller);
 
-	/*
+	/**
 	 * Increase counter based on declared increment number
+	 * @param increment 
 	 */
 	public void increase(int increment);
 
-	/*
+	/**
 	 * Increase counter with default increment number(1)
 	 */
 	public void increase();
 
+	/**
+	 * @param caller
+	 * @return the count
+	 */
 	public Integer getCount(Object caller);
 
+	/**
+	 * @return the current count
+	 */
 	public int getCurrentCount();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/IIndexConverter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/IIndexConverter.java
index 152d1dd..5e220a1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/IIndexConverter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/IIndexConverter.java
@@ -15,5 +15,9 @@
  * @author mengbo
  */
 public interface IIndexConverter {
+	/**
+	 * @param index
+	 * @return the string at index
+	 */
 	String getString(int index);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/IncrementObject.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/IncrementObject.java
index 4b2ac8a..71c9140 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/IncrementObject.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/IncrementObject.java
@@ -19,6 +19,10 @@
 
 	private Integer _increment;
 
+	/**
+	 * @param name
+	 * @param increment
+	 */
 	public IncrementObject(String name, Integer increment) {
 		_counterName = name;
 		_increment = increment;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ListStyleUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ListStyleUtil.java
index 5412580..ccab58f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ListStyleUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ListStyleUtil.java
@@ -14,7 +14,12 @@
 /**
  * @author mengbo
  */
-public class ListStyleUtil {
+/*package*/ final class ListStyleUtil {
+	/**
+	 * @param type
+	 * @param index
+	 * @return the type as a string
+	 */
 	public static String convertTypeToString(int type, int index) {
 		if (type == CSSHtmlListStyleData.LIST_T_LOWER_ROMAN
 				|| type == CSSHtmlListStyleData.LIST_T_UPPER_ROMAN) {
@@ -27,4 +32,8 @@
 		return null;
 	}
 
+	private ListStyleUtil()
+	{
+	    // no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ResetObject.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ResetObject.java
index bfaabf5..0cc1138 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ResetObject.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/list/ResetObject.java
@@ -19,6 +19,10 @@
 
 	private Integer _initial;
 
+	/**
+	 * @param name
+	 * @param initial
+	 */
 	public ResetObject(String name, Integer initial) {
 		_counterName = name;
 		_initial = initial;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/CounterFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/CounterFactory.java
index 9a08dd3..32dec84 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/CounterFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/CounterFactory.java
@@ -23,6 +23,9 @@
 
 	private static CounterFactory _instance;
 
+	/**
+	 * @return the factory singelton
+	 */
 	public static CounterFactory getInstance() {
 		if (_instance == null) {
 			_instance = new CounterFactory();
@@ -30,6 +33,10 @@
 		return _instance;
 	}
 
+	/**
+	 * @param type
+	 * @return the counter for type
+	 */
 	public ICounter getCounter(int type) {
 		switch (type) {
 		case CSSHtmlListStyleData.LIST_T_DECIMAL:
@@ -49,4 +56,9 @@
 
 		}
 	}
+	
+	private CounterFactory()
+	{
+	    // singleton, no external instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/CounterUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/CounterUtil.java
index d1627c7..4864dd3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/CounterUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/CounterUtil.java
@@ -16,7 +16,12 @@
 /**
  * @author mengbo
  */
-public class CounterUtil {
+public final class CounterUtil {
+	/**
+	 * @param count
+	 * @param type
+	 * @return the converter count
+	 */
 	public static String convertCount(int count, int type) {
 		// XXX: currently we only support style that IE supported.for type that
 		// does not
@@ -64,4 +69,9 @@
 		}
 		return buffer.toString();
 	}
+	
+	private CounterUtil()
+	{
+	    // no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/DecimalCounter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/DecimalCounter.java
index 4e8c88f..ddce690 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/DecimalCounter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/DecimalCounter.java
@@ -16,9 +16,12 @@
 /**
  * @author mengbo
  */
-public class DecimalCounter extends EnumerableCounter {
-	protected DecimalCounter() {
-	    // do nothing; restrict construction to child classes
+/*package*/ class DecimalCounter extends EnumerableCounter 
+{
+	
+    DecimalCounter() 
+    {
+	    // do nothing; only nee
 	}
 
 	/*
@@ -34,7 +37,7 @@
 
 		case CSSHtmlListStyleData.LIST_T_DECIMAL_LEADING_ZERO:
 			StringBuffer sb = new StringBuffer();
-			int count = getChildrenCount();
+			int count = 1;
 			for (int i = sb.length(); i < count; i++) {
 				sb.append('0');
 			}
@@ -44,8 +47,4 @@
 			return null;
 		}
 	}
-
-	public int getChildrenCount() {
-		return 1;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/EnumerableCounter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/EnumerableCounter.java
index 190d9a3..3dfbef8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/EnumerableCounter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/EnumerableCounter.java
@@ -25,18 +25,22 @@
 	 * @see org.eclipse.jst.pagedesigner.css2.list.ICounter#getNextObject(org.w3c.dom.Element,
 	 *      java.lang.String)
 	 */
-	public Object getNextObject(Element element, int type) {
+	public final Object getNextObject(Element element, int type) {
 		int index = calculateIndex(element);
 		return getNextString(index, type);
 	}
 
-	public int calculateIndex(Element element) {
-		String tag = element.getLocalName();
-		Node parent = element.getParentNode();
-		NodeList children = parent.getChildNodes();
+	/**
+	 * @param element
+	 * @return the index of the element in its parent
+	 */
+	public final int calculateIndex(Element element) {
+		final String tag = element.getLocalName();
+		final Node parent = element.getParentNode();
+		final NodeList children = parent.getChildNodes();
 		int index = 1;
 		for (int i = 0; i < children.getLength(); i++) {
-			Node child = children.item(i);
+			final Node child = children.item(i);
 			if (child == element) {
 				break;
 			}
@@ -47,5 +51,10 @@
 		return index;
 	}
 
+	/**
+	 * @param index
+	 * @param type
+	 * @return the string for the next index
+	 */
 	public abstract String getNextString(int index, int type);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/ICounter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/ICounter.java
index 93d06bb..cc06af3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/ICounter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/ICounter.java
@@ -17,5 +17,10 @@
  * @author mengbo
  */
 public interface ICounter {
+	/**
+	 * @param element
+	 * @param type
+	 * @return the next object for element, type
+	 */
 	public Object getNextObject(Element element, int type);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/RomanCounter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/RomanCounter.java
index b9e9c41..52e4626 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/RomanCounter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/marker/RomanCounter.java
@@ -16,9 +16,10 @@
 /**
  * @author mengbo
  */
-public class RomanCounter extends EnumerableCounter {
-	protected RomanCounter() {
-	    // do nothing; restrict construction to sub-classes
+/*package*/ class RomanCounter extends EnumerableCounter {
+	RomanCounter() 
+	{
+	    // do nothing
 	}
 
 	/*
@@ -43,7 +44,7 @@
 	 * 
 	 * @see org.eclipse.jst.pagedesigner.css2.list.NumberCounter#getString(int)
 	 */
-	public String getString(int index) {
+	/*package*/ String getString(int index) {
 		// FIXME: Need to enhance more.
 		StringBuffer roman = new StringBuffer();
 		int a, b, c, d;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BackgroundColorMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BackgroundColorMeta.java
index d2674e6..f738c47 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BackgroundColorMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BackgroundColorMeta.java
@@ -24,8 +24,6 @@
 	private static final String[] _keywords = new String[] { ICSSPropertyID.VAL_TRANSPARENT };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public BackgroundColorMeta() {
 		super(false, ICSSPropertyID.VAL_TRANSPARENT);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderCollapseMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderCollapseMeta.java
index 874a137..f2cbe1d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderCollapseMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderCollapseMeta.java
@@ -19,8 +19,6 @@
 			ICSSPropertyID.VAL_SEPARATE };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public BorderCollapseMeta() {
 		// XXX: the spec says COLLAPSE is initial value, but seemed that IE
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderColorMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderColorMeta.java
index e91fdbf..d493a71 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderColorMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderColorMeta.java
@@ -26,8 +26,6 @@
 	private static final String[] _keywords = new String[] { ICSSPropertyID.VAL_TRANSPARENT };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public BorderColorMeta() {
 		super(false, ICSSPropertyID.VAL_TRANSPARENT);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderSpacingMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderSpacingMeta.java
index 601ec79..22313c3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderSpacingMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderSpacingMeta.java
@@ -25,11 +25,9 @@
  * @author mengbo
  */
 public class BorderSpacingMeta extends CSSPropertyMeta {
-	public static final int[] INITIAL_SPACING = new int[] { 3, 3 };
+	private static final int[] INITIAL_SPACING = new int[] { 3, 3 };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public BorderSpacingMeta() {
 		// the specification says "border-spacing" is inherited. But seemed
@@ -108,6 +106,11 @@
 				propertyName, style);
 	}
 
+	/**
+	 * @param valuetext
+	 * @param style
+	 * @return the integer value for value text
+	 */
 	protected int toIntValue(String valuetext, ICSSStyle style) {
 		Object length = LengthMeta.toLength(valuetext, style, PERCENTAGE_NONE,
 				style.getCSSFont());
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderStyleMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderStyleMeta.java
index e71ff76..bae4612 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderStyleMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderStyleMeta.java
@@ -29,8 +29,6 @@
 			ICSSPropertyID.VAL_OUTSET };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public BorderStyleMeta() {
 		super(false, ICSSPropertyID.VAL_NONE);
@@ -168,7 +166,7 @@
 
 	/**
 	 * @param propertyName
-	 * @return
+	 * @return true if property name is a border style
 	 */
 	public static boolean isBorderStyle(String propertyName) {
 		return ICSSPropertyID.ATTR_BORDER_BOTTOM_STYLE
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderWidthMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderWidthMeta.java
index 8de7cf2..4a2d68c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderWidthMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/BorderWidthMeta.java
@@ -32,8 +32,6 @@
 			ICSSPropertyID.VAL_THICK };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public BorderWidthMeta() {
 		super(false, LENGTH_4); // medium length.
@@ -207,7 +205,7 @@
 
 	/**
 	 * @param propertyName
-	 * @return
+	 * @return true if property name is a border width
 	 */
 	public static boolean isBorderWidth(String propertyName) {
 		return ICSSPropertyID.ATTR_BORDER_BOTTOM_WIDTH
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSMetaRegistry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSMetaRegistry.java
index be3e05b..670f3dd 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSMetaRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSMetaRegistry.java
@@ -26,7 +26,10 @@
 		initialize();
 	}
 
-	public void initialize() {
+	/**
+	 * class initiallizer
+	 */
+	private void initialize() {
 		_map.put(ICSSPropertyID.ATTR_DISPLAY, new DisplayMeta());
 		_map.put(ICSSPropertyID.ATTR_TEXTALIGN, new TextAlignMeta());
 		_map.put(ICSSPropertyID.ATTR_HORIZONTAL_ALIGN,
@@ -105,10 +108,17 @@
 		_map.put(ICSSPropertyID.ATTR_OVERFLOW, new OverflowMeta());
 	}
 
+	/**
+	 * @param property
+	 * @return the meta
+	 */
 	public ICSSPropertyMeta getMeta(String property) {
 		return (ICSSPropertyMeta) _map.get(property);
 	}
 
+	/**
+	 * @return the singleton instance
+	 */
 	public static final CSSMetaRegistry getInstance() {
 		if (_instance == null) {
 			_instance = new CSSMetaRegistry();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSPropertyMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSPropertyMeta.java
index 110b994..ad426a4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSPropertyMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CSSPropertyMeta.java
@@ -19,12 +19,16 @@
  * @author mengbo
  */
 public abstract class CSSPropertyMeta implements ICSSPropertyMeta {
-	public static final String[] EMPTY_KEYWORDS = new String[0];
+	static final String[] EMPTY_KEYWORDS = new String[0];
 
 	boolean _inherited;
 
 	Object _initialValue;
 
+	/**
+	 * @param inherit
+	 * @param initvalue
+	 */
 	public CSSPropertyMeta(boolean inherit, Object initvalue) {
 		this._inherited = inherit;
 		this._initialValue = initvalue;
@@ -84,7 +88,7 @@
 	/**
 	 * for many properties, they have a set of keyword property values.
 	 * 
-	 * @return
+	 * @return the keyword values
 	 */
 	protected abstract String[] getKeywordValues();
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ColorPropertyMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ColorPropertyMeta.java
index 776b1ce..8562288 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ColorPropertyMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ColorPropertyMeta.java
@@ -18,7 +18,6 @@
 import org.eclipse.jst.pagedesigner.css2.ICSSStyle;
 import org.eclipse.jst.pagedesigner.css2.color.CSSColorManager;
 import org.eclipse.jst.pagedesigner.utils.DOMUtil;
-import org.eclipse.swt.graphics.Color;
 import org.w3c.dom.Element;
 import org.w3c.dom.css.CSSValue;
 
@@ -36,13 +35,7 @@
 			IHTMLConstants.TAG_H2, IHTMLConstants.TAG_H3,
 			IHTMLConstants.TAG_H4, IHTMLConstants.TAG_H5, IHTMLConstants.TAG_H6 };
 
-	public Color getDefaultColor() {
-		return null;
-	}
-
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public ColorPropertyMeta() {
 		super(true, DEFAULT_COLOR);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ContentMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ContentMeta.java
index 01e9652..0b190e9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ContentMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ContentMeta.java
@@ -16,8 +16,6 @@
  */
 public class ContentMeta extends CSSPropertyMeta {
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public ContentMeta() {
 		// why inherit this??
@@ -32,21 +30,4 @@
 	protected String[] getKeywordValues() {
 		return null;
 	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyMeta#calculateCSSValueResult(org.w3c.dom.css.CSSValue,
-	 *      java.lang.String,
-	 *      org.eclipse.jst.pagedesigner.css2.style.AbstractStyle)
-	 */
-	/*
-	 * public Object calculateCSSValueResult(CSSValue value, String
-	 * propertyName, AbstractStyle style) { if (value instanceof Counter) {
-	 * Counter c = (Counter)value; ContentObject object = new ContentObject();
-	 * 
-	 * MyCounter counter = new MyCounter(c.getIdentifier(), c.getListStyle(),
-	 * c.getSeparator()); object.setCounter(counter); return object; } return
-	 * value; }
-	 */
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CounterIncrementMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CounterIncrementMeta.java
index c6e2012..660c822 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CounterIncrementMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CounterIncrementMeta.java
@@ -28,6 +28,9 @@
  * @author mengbo
  */
 public class CounterIncrementMeta extends CSSPropertyMeta {
+	/**
+	 * 
+	 */
 	public CounterIncrementMeta() {
 		super(false, null);
 	}
@@ -54,6 +57,10 @@
 		return getCounter(value);
 	}
 
+	/**
+	 * @param value
+	 * @return the counter
+	 */
 	public List getCounter(CSSValue value) {
 		if (value == null) {
 			return null;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CounterResetMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CounterResetMeta.java
index a362774..ac51249 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CounterResetMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/CounterResetMeta.java
@@ -25,6 +25,9 @@
  * @author mengbo
  */
 public class CounterResetMeta extends CSSPropertyMeta {
+	/**
+	 * 
+	 */
 	public CounterResetMeta() {
 		super(false, null);
 	}
@@ -51,6 +54,10 @@
 		return getCounter(value);
 	}
 
+	/**
+	 * @param value
+	 * @return the counter
+	 */
 	public List getCounter(CSSValue value) {
 		if (value == null) {
 			return null;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/DisplayMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/DisplayMeta.java
index c72f927..8997129 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/DisplayMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/DisplayMeta.java
@@ -32,8 +32,6 @@
 			ICSSPropertyID.VAL_TABLE_CAPTION, ICSSPropertyID.VAL_NONE };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public DisplayMeta() {
 		super(false, ICSSPropertyID.VAL_INLINE);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/EmptyCellsMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/EmptyCellsMeta.java
index 50785b3..b2d5654 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/EmptyCellsMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/EmptyCellsMeta.java
@@ -16,15 +16,13 @@
  * @version 1.5
  */
 public class EmptyCellsMeta extends CSSPropertyMeta {
-	public static final String SHOW = "show";
+	private static final String SHOW = "show";
 
-	public static final String HIDE = "hide";
+	static final String HIDE = "hide";
 
-	public static final String[] _keywords = new String[] { SHOW, HIDE };
+	private static final String[] _keywords = new String[] { SHOW, HIDE };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public EmptyCellsMeta() {
 		// FIXME: on CSS spec, initial value should be "show".
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FloatInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FloatInfo.java
index 12ad19f..6758aa3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FloatInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FloatInfo.java
@@ -21,7 +21,7 @@
  */
 public final class FloatInfo {
 	/**
-	 * 
+	 * @param text 
 	 */
 	public FloatInfo(String text) {
 		parse(text);
@@ -55,6 +55,7 @@
 	}
 
 	/**
+	 * @return the value
 	 * 
 	 */
 	public float getValue() {
@@ -69,7 +70,7 @@
 	}
 
 	/**
-	 * 
+	 * @return the value type
 	 */
 	public short getValueType() {
 		return _type;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontFamilyMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontFamilyMeta.java
index 68cfc8b..c54b41d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontFamilyMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontFamilyMeta.java
@@ -27,6 +27,9 @@
  * @author mengbo
  */
 public class FontFamilyMeta extends CSSPropertyMeta {
+	/**
+	 * the default font name
+	 */
 	public static final String DEFAULT_FONT = "Times New Roman";
 
 	private static FontData[] _FontData;
@@ -44,8 +47,6 @@
 	}
 
 	/**
-	 * @param inherit
-	 * @param initvalue
 	 */
 	public FontFamilyMeta() {
 		super(true, DEFAULT_FONT);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontSizeMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontSizeMeta.java
index 774204b..498e52a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontSizeMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontSizeMeta.java
@@ -37,24 +37,26 @@
 			ICSSPropertyID.VAL_X_LARGE, ICSSPropertyID.VAL_XX_LARGE,
 			ICSSPropertyID.VAL_LARGER, ICSSPropertyID.VAL_SMALLER };
 
+	/**
+	 * font size
+	 */
 	public static final double MEDIUM_VAL_INT = 16;
 
-	public static final double SCALING_FACTOR = 1.2;
+	private static final double SCALING_FACTOR = 1.2;
 
-	public static final double FACTORS[] = { 0.6, 0.89, 1, 1.2, 1.5, 2.0, 3.0 };
+	private static final double FACTORS[] = { 0.6, 0.89, 1, 1.2, 1.5, 2.0, 3.0 };
 
 	// The scaling factors in IE is different from CSS definition. Here we
 	// follow IE.
-	public static final double CSS_ABSOLUTE_FACTORS[] = { 0.63, 0.82, 1, 1.12,
+	private static final double CSS_ABSOLUTE_FACTORS[] = { 0.63, 0.82, 1, 1.12,
 			1.5, 2.0, 3.0 };
 
-	public static final int MIN_SIZE_FOR_SMALLER = 1;
+	private static final int MIN_SIZE_FOR_SMALLER = 1;
 
-	public static final int MIN_SIZE_FOR_LARGER = 9;
+	private static final int MIN_SIZE_FOR_LARGER = 9;
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public FontSizeMeta() {
 		super(true, new Length((int) MEDIUM_VAL_INT, false));
@@ -104,6 +106,11 @@
 		return convertKeyword(obj, style);
 	}
 
+	/**
+	 * @param fontsizeobj
+	 * @param style
+	 * @return the length
+	 */
 	protected Length convertKeyword(Object fontsizeobj, ICSSStyle style) {
 		int fontsize;
 		int parentfontsize = style.getParentStyle().getCSSFont().getFontSize();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontStyleMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontStyleMeta.java
index 8464868..7d46ab2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontStyleMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontStyleMeta.java
@@ -19,8 +19,7 @@
 			ICSSPropertyID.VAL_ITALIC, ICSSPropertyID.VAL_OBLIQUE };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public FontStyleMeta() {
 		super(true, ICSSPropertyID.VAL_NORMAL);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontWeightMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontWeightMeta.java
index 3163be9..9a90f3d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontWeightMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/FontWeightMeta.java
@@ -25,19 +25,21 @@
  */
 public class FontWeightMeta extends CSSPropertyMeta {
 
+	/**
+	 * normal weight value
+	 */
 	public static final Integer NORMAL_WEIGHT = new Integer(400);
 
-	public static final Integer BOLD_WEIGHT = new Integer(700);
+	private static final Integer BOLD_WEIGHT = new Integer(700);
 
-	static final String[] KEYWORDS = new String[] { ICSSPropertyID.VAL_NORMAL,
+	private static final String[] KEYWORDS = new String[] { ICSSPropertyID.VAL_NORMAL,
 			ICSSPropertyID.VAL_BOLD, ICSSPropertyID.VAL_BOLDER,
 			ICSSPropertyID.VAL_LIGHTER };
 
 	private Logger _log = PDPlugin.getLogger(FontWeightMeta.class);
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public FontWeightMeta() {
 		super(true, NORMAL_WEIGHT);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/HeightMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/HeightMeta.java
index 2c635ff..13860d3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/HeightMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/HeightMeta.java
@@ -20,8 +20,7 @@
  */
 public class HeightMeta extends LengthMeta {
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public HeightMeta() {
 		super(false, ICSSPropertyID.VAL_AUTO);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/HorizontalAlignMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/HorizontalAlignMeta.java
index c549528..6dd075c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/HorizontalAlignMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/HorizontalAlignMeta.java
@@ -32,8 +32,7 @@
 	};
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * default constructor
 	 */
 	public HorizontalAlignMeta() {
 		super(true, NOT_SPECIFIED);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyID.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyID.java
index 2939923..efce31d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyID.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyID.java
@@ -15,368 +15,908 @@
  * @author mengbo
  */
 public interface ICSSPropertyID {
+	/**
+	 * display attribute name
+	 */
 	public static final String ATTR_DISPLAY = "display";
 
+	/**
+	 * whitespace attribute name
+	 */
 	public static final String ATTR_WHITESPACE = "white-space";
 
+	/**
+	 * text decoration attribute name
+	 */
 	public static final String ATTR_TEXTDECORATION = "text-decoration";
 
+	/**
+	 * text align attribute name
+	 */
 	public static final String ATTR_TEXTALIGN = "text-align";
 
+	/**
+	 * width attribute name
+	 */
 	public static final String ATTR_WIDTH = "width";
 
+	/**
+	 * min-width attribute name
+	 */
 	public static final String ATTR_MIN_WIDTH = "min-width";
 
+	/**
+	 * height attribute name
+	 */
 	public static final String ATTR_HEIGHT = "height";
 
+	/**
+	 * min height attribute name
+	 */
 	public static final String ATTR_MIN_HEIGHT = "min-height";
 
+	/**
+	 * border-left-width attribute name
+	 */
 	public static final String ATTR_BORDER_LEFT_WIDTH = "border-left-width";
 
+	/**
+	 * border-right-width attribute name
+	 */
 	public static final String ATTR_BORDER_RIGHT_WIDTH = "border-right-width";
 
+	/**
+	 * border bottom width
+	 */
 	public static final String ATTR_BORDER_BOTTOM_WIDTH = "border-bottom-width";
 
+	/**
+	 * css style attribute
+	 */
 	public static final String ATTR_BORDER_TOP_WIDTH = "border-top-width";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_FONT_FAMILY = "font-family";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_FONT_SIZE = "font-size";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_FONT_STYLE = "font-style";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_FONT_WEIGHT = "font-weight";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BORDER_LEFT_STYLE = "border-left-style";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BORDER_RIGHT_STYLE = "border-right-style";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BORDER_BOTTOM_STYLE = "border-bottom-style";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BORDER_TOP_STYLE = "border-top-style";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BORDER_LEFT_COLOR = "border-left-color";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BORDER_RIGHT_COLOR = "border-right-color";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BORDER_BOTTOM_COLOR = "border-bottom-color";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BORDER_TOP_COLOR = "border-top-color";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_PADDING_RIGHT = "padding-right";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_PADDING_BOTTOM = "padding-bottom";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_PADDING_LEFT = "padding-left";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_PADDING_TOP = "padding-top";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_MARGIN_RIGHT = "margin-right";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_MARGIN_BOTTOM = "margin-bottom";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_MARGIN_LEFT = "margin-left";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_MARGIN_TOP = "margin-top";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BACKGROUND_COLOR = "background-color";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_COLOR = "color";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_TEXTCOLOR = "text";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BORDER_COLLAPSE = "border-collapse";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BORDER_SPACING = "border-spacing";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_LIST_STYLE_TYPE = "list-style-type";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_LIST_STYLE_POSITION = "list-style-position";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_LIST_STYLE_IMAGE = "list-style-image";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_COUNTER_RESET = "counter-reset";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_COUNTER_INCREMENT = "counter-increment";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_EMPTY_CELLS = "empty-cells";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_VISIBILITY = "visibility";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_VERTICAL_ALIGN = "vertical-align";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_HORIZONTAL_ALIGN = "horizontal-align";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_CONTENT = "content";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BGCOLOR = "bgcolor";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_TEXT = "text";
 
+    /**
+     * css style attribute
+     */
 	public final static String ATTR_MULTIPLE = "multiple";
 
+    /**
+     * css style attribute
+     */
 	public final static String ATTR_ITEMLABEL = "itemLabel";
 
+    /**
+     * css style attribute
+     */
 	public final static String ATTR_BINDING = "binding";
 
+    /**
+     * css style attribute
+     */
 	public final static String ATTR_ITEMVALUE = "itemValue";
 
+    /**
+     * css style attribute
+     */
 	public final static String ATTR_VALUE = "value";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_URI = "uri";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_PREFIX = "prefix";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_STYLECLASS = "styleClass";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_SIZE = "size";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BASEFONT = "basefont";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_ROWSPAN = "rowSpan";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_COLSPAN = "colSpan";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_TYPE = "type";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_URL = "url";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_SRC = "src";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_TAGLIB_LOCATION = "taglib-location";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_TAGLIB_URI = "taglib-uri";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_IMAGE = "image";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_RESET = "reset";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_FOOTER = "footer";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_HEADER = "header";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_COLUMNS = "columns";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_COLUMNCLASSES = "columnClasses";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_CLASS = "class";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_STYLE = "style";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_PAGE = "page";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_HREF = "href";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_NAME = "name";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BASENAME = "basename";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_ACTION = "action";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_TARGET = "target";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_TOP = "top";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_BOTTOM = "bottom";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_LEFT = "left";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_RIGHT = "right";
 
+    /**
+     * css style attribute
+     */
 	public static final String ATTR_POSITION = "position";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TRANSPARENT = "transparent";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_COLLAPSE = "collapse";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_SEPARATE = "separate";
 
+    /**
+     * css style value
+     */
 	public static final String ATTR_OVERFLOW = "overflow";
 
+    /**
+     * css style value
+     */
 	// border style values
 	public static final String VAL_HIDDEN = "hidden";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_DOTTED = "dotted";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_DASHED = "dashed";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_SOLID = "solid";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_DOUBLE = "double";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_GROOVE = "groove";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_RIDGE = "ridge";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_INSET = "inset";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_OUTSET = "outset";
 
 	// XXX: we introduce a new style for TD default border style, since it
 	// seemed IE
 	// is using none of the above style for td.
+    /**
+     * css style value
+     */
 	public static final String VAL_TDBORDERSTYLE = "__td_border_style__";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_THIN = "thin";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_THICK = "thick";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_INLINE = "inline";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_BLOCK = "block";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_INLINE_BLOCK = "inline-block";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_LIST_ITEM = "list-item";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_RUN_IN = "run-in";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_COMPACT = "compact";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_MARKER = "marker";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TABLE = "table";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_INLINE_TABLE = "inline-table";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TABLE_ROW_GROUP = "table-row-group";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TABLE_HEADER_GROUP = "table-header-group";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TABLE_FOOTER_GROUP = "table-footer-group";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TABLE_ROW = "table-row";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TABLE_COLUMN_GROUP = "table-column-group";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TABLE_COLUMN = "table-column";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TABLE_CELL = "table-cell";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TABLE_CAPTION = "table-caption";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_NONE = "none";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_XX_SMALL = "xx-small";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_X_SMALL = "x-small";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_SMALL = "small";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_MEDIUM = "medium";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_LARGE = "large";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_X_LARGE = "x-large";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_XX_LARGE = "xx-large";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_LARGER = "larger";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_SMALLER = "smaller";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_ITALIC = "italic";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_OBLIQUE = "oblique";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_NORMAL = "normal";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_BOLD = "bold";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_BOLDER = "bolder";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_LIGHTER = "lighter";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_AUTO = "auto";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_OUTSIDE = "outside";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_INSIDE = "inside";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_LEFT = "left";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_RIGHT = "right";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_CENTER = "center";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_JUSTIFY = "justify";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_UNDERLINE = "underline";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_OVERLINE = "overline";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_LINETHROUGH = "line-through";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_BLINK = "blink";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_PRE = "pre";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_NOWRAP = "nowrap";
 
+    /**
+     * css style value
+     */
 	public final static String VAL_DISC = "disc"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_CIRCLE = "circle"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_DECIMAL = "decimal"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_CJK_IDEOGRAPHIC = "cjk-ideographic"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_DECIMAL_LEADING_ZERO = "decimal-leading-zero"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_ARMENIAN = "armenian"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_LOWER_ALPHA = "lower-alpha"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_LOWER_GREEK = "lower-greek"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_LOWER_LATIN = "lower-latin"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_LOWER_ROMAN = "lower-roman"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_UPPER_ALPHA = "upper-alpha"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_UPPER_LATIN = "upper-latin"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_UPPER_ROMAN = "upper-roman"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_HIRAGANA = "hiragana"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_HIRAGANA_IROHA = "hiragana-iroha"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_HEBREW = "hebrew"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_GEORGIAN = "georgian"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_KATAKANA = "katakana"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_KATAKANA_IROHA = "katakana-iroha"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_SQUARE = "square"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public final static String VAL_IMAGE = "image"; //$NON-NLS-1$
 
+    /**
+     * css style value
+     */
 	public static final String VAL_MULTIPLE = "multiple";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_BUTTON = "button";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_CHECKBOX = "checkbox";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_RADIO = "radio";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_FILE = "file";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_RESET = "reset";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_SUBMIT = "submit";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_PASSWORD = "password";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_TEXT = "text";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_VISIBLE = "visible";
 
+    /**
+     * css style value
+     */
 	public static final String VAL_SCROLL = "scroll";
 
+    /**
+     * css style value
+     */
 	public static final String TAG_TAGLIB = "taglib";
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyMeta.java
index 6f93c9a..74ae04f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ICSSPropertyMeta.java
@@ -19,39 +19,64 @@
  * @author mengbo
  */
 public interface ICSSPropertyMeta {
-	public static final int PERCENTAGE_NONE = 0;
+	/**
+	 * 
+	 */
+	static final int PERCENTAGE_NONE = 0;
 
-	public static final int PERCENTAGE_BOXSIZE = 1;
+	/**
+	 * 
+	 */
+	static final int PERCENTAGE_BOXSIZE = 1;
 
-	public static final int PERCENTAGE_HEIGHT_CONTAININGBLOCK = 2;
+	/**
+	 * 
+	 */
+	static final int PERCENTAGE_HEIGHT_CONTAININGBLOCK = 2;
 
-	public static final int PERCENTAGE_FONT = 3;
+	/**
+	 * 
+	 */
+	static final int PERCENTAGE_FONT = 3;
 
-	public static final int PERCENTAGE_WIDTH_CONTAININGBLOCK = 4;
+	/**
+	 * 
+	 */
+	static final int PERCENTAGE_WIDTH_CONTAININGBLOCK = 4;
 
-	public static final Object NOT_SPECIFIED = "NOT_SPECIFIED";
+	/**
+	 * 
+	 */
+	static final Object NOT_SPECIFIED = "NOT_SPECIFIED";
 
 	/**
 	 * whether default inherit.
 	 * 
-	 * @return
+	 * @return true if is inherited
 	 */
 	public boolean isInherited();
 
 	/**
-	 * initial value
+	 * @param propertyName 
+	 * @param style 
 	 * 
-	 * @return
+	 * @return the initial value object
 	 */
 	public Object getInitialValue(String propertyName, ICSSStyle style);
 
+	/**
+	 * @param element
+	 * @param htmltag
+	 * @param propertyName
+	 * @return the initial value object
+	 */
 	public Object getHTMLElementInitialValue(Element element, String htmltag,
 			String propertyName);
 
 	/**
 	 * what's percentage value based on.
 	 * 
-	 * @return
+	 * @return the percentage value
 	 */
 	public int getPercentageType();
 
@@ -78,7 +103,7 @@
 	 * @param value
 	 * @param propertyName
 	 * @param style
-	 * @return
+	 * @return the value result
 	 */
 	public Object calculateCSSValueResult(CSSValue value, String propertyName,
 			ICSSStyle style);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/LengthMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/LengthMeta.java
index 65eb53c..ec9f9e5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/LengthMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/LengthMeta.java
@@ -77,6 +77,13 @@
 				getBaseFont(style));
 	}
 
+	/**
+	 * @param lengthStr
+	 * @param style
+	 * @param percenttype
+	 * @param font
+	 * @return the object
+	 */
 	public static Object toLength(String lengthStr, ICSSStyle style,
 			int percenttype, ICSSFont font) {
 		try {
@@ -91,11 +98,12 @@
 	/**
 	 * Will not calculate percentage value. Used for calculate the "width" and
 	 * "height" css property
-	 * 
-	 * @param value
-	 * @param parentValue
+	 * @param result 
+	 * @param unitType 
+	 * @param style 
+	 * @param percenttype 
 	 * @param font
-	 * @return
+	 * @return an object?
 	 */
 	public static Object toLength(float result, short unitType,
 			ICSSStyle style, int percenttype, ICSSFont font) {
@@ -143,7 +151,7 @@
 	 * parent style's font.
 	 * 
 	 * @param style
-	 * @return
+	 * @return the base font
 	 */
 	protected ICSSFont getBaseFont(ICSSStyle style) {
 		return style.getCSSFont();
@@ -195,6 +203,10 @@
 		return Display.getCurrent().getDPI().x;
 	}
 
+	/**
+	 * @param result
+	 * @return true if is auto
+	 */
 	public static boolean isAuto(Object result) {
 		if (result == ICSSPropertyID.VAL_AUTO) {
 			return true;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStyleImageMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStyleImageMeta.java
index e872080..c275340 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStyleImageMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStyleImageMeta.java
@@ -22,8 +22,7 @@
 	private static final String INITIAL_VALUE = ICSSPropertyID.VAL_NONE;
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public ListStyleImageMeta() {
 		super(true, INITIAL_VALUE);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStylePositionMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStylePositionMeta.java
index c6c8cef..355a173 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStylePositionMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStylePositionMeta.java
@@ -18,8 +18,7 @@
 	private static final String INITIAL_VALUE = ICSSPropertyID.VAL_OUTSIDE;
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public ListStylePositionMeta() {
 		super(true, INITIAL_VALUE);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStyleTypeMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStyleTypeMeta.java
index bf6d464..78ee887 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStyleTypeMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/ListStyleTypeMeta.java
@@ -23,8 +23,7 @@
 	private static final String INITIAL_VALUE = ICSSPropertyID.VAL_DISC;
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public ListStyleTypeMeta() {
 		super(true, INITIAL_VALUE);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/MarginWidthMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/MarginWidthMeta.java
index f5d23c4..fddf276 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/MarginWidthMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/MarginWidthMeta.java
@@ -17,8 +17,7 @@
 public class MarginWidthMeta extends LengthMeta {
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public MarginWidthMeta() {
 		super(false, ICSSPropertyID.VAL_AUTO);
@@ -26,7 +25,7 @@
 
 	/**
 	 * @param propertyName
-	 * @return
+	 * @return true if the property is the margin width
 	 */
 	public static boolean isMarginWidth(String propertyName) {
 		return ICSSPropertyID.ATTR_MARGIN_BOTTOM.equalsIgnoreCase(propertyName)
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/OverflowMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/OverflowMeta.java
index 6014eb6..23a0038 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/OverflowMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/OverflowMeta.java
@@ -24,6 +24,9 @@
 			ICSSPropertyID.VAL_HIDDEN, ICSSPropertyID.VAL_SCROLL,
 			ICSSPropertyID.VAL_AUTO };
 
+	/**
+	 * Default constructor
+	 */
 	public OverflowMeta() {
 		super(false, ICSSPropertyID.VAL_VISIBLE);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PaddingWidthMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PaddingWidthMeta.java
index 96558a7..dd295e6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PaddingWidthMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PaddingWidthMeta.java
@@ -26,8 +26,7 @@
     private static int MIN_PADDING_THRESHOLD = 4;
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public PaddingWidthMeta() {
 		super(false, ICSSPropertyID.VAL_AUTO);
@@ -55,18 +54,15 @@
 				}
 			}
 			if (tableEle != null) {
+				//TODO:  Why is only cellpadding being checked?  Why does this class even exist?  What is difference with BorderWidthMeta?   
 				String padding = DOMUtil.getAttributeIgnoreCase(tableEle,
 						"cellpadding");//$NON-NLS-1$
-				if (padding != null) {
-					Length length = (Length) LengthMeta.toLength(padding, style, this
-							.getPercentageType(), getBaseFont(style));
-                    // TODO should not be hardcoded value.  Either should change to a pref
-                    // or a per-component customization.
-                    if (length.getValue() < MIN_PADDING_THRESHOLD)
-                    {
-                        return new Length(MIN_PADDING_THRESHOLD, false);
-                    }
-                    return length;
+				if (padding != null && padding.trim().length() > 0) {//fix for 200592						
+					Object length = LengthMeta.toLength(padding, style, this
+								.getPercentageType(), getBaseFont(style));
+                    if (length instanceof Length && ((Length)length).getValue() >= MIN_PADDING_THRESHOLD)                    
+                        return length;
+                    
 				}
                 // TODO should not be hardcoded value.  Either should change to a pref
                 // or a per-component customization.
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PositionMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PositionMeta.java
index 28cafba..f99dcfe 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PositionMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PositionMeta.java
@@ -16,20 +16,28 @@
  * @version 1.5
  */
 public class PositionMeta extends CSSPropertyMeta {
+	/**
+	 * static keyword
+	 */
 	public static final String STATIC = "static";
 
+	/**
+	 * absolute keyword
+	 */
 	public static final String ABSOLUTE = "absolute";
 
-	public static final String RELATIVE = "relative";
+	private static final String RELATIVE = "relative";
 
+	/**
+	 * fixed keyword
+	 */
 	public static final String FIXED = "fixed";
 
-	public static final String[] _keywords = new String[] { STATIC, ABSOLUTE,
+	private static final String[] _keywords = new String[] { STATIC, ABSOLUTE,
 			RELATIVE, FIXED };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public PositionMeta() {
 		super(false, STATIC);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PositionOffsetMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PositionOffsetMeta.java
index f96864d..81147cc 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PositionOffsetMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/PositionOffsetMeta.java
@@ -17,8 +17,7 @@
  */
 public class PositionOffsetMeta extends LengthMeta {
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public PositionOffsetMeta() {
 		super(false, ICSSPropertyID.VAL_AUTO);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TableUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TableUtil.java
index 1415cef..1366164 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TableUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TableUtil.java
@@ -30,6 +30,11 @@
 
 	static final String RIGHT = "right";
 
+	/**
+	 * @param edge
+	 * @param frame
+	 * @return true if there is a match
+	 */
 	public static boolean matchFrame(String edge, String frame) {
 		if ("above".equalsIgnoreCase(frame)) {
 			return TOP.equalsIgnoreCase(edge);
@@ -52,9 +57,9 @@
 	}
 
 	/**
-	 * @param string
+	 * @param edge 
 	 * @param rules
-	 * @return
+	 * @return true if rules match
 	 */
 	public static boolean matchRules(String edge, String rules) {
 		// TODO: "groups" not supported.
@@ -73,8 +78,8 @@
 
 	/**
 	 * @param element
-	 * @return
-	 * @see http://www.w3.org/TR/CSS21/tables.html#empty-cells
+	 * @return true if cell is empty
+	 * see http://www.w3.org/TR/CSS21/tables.html#empty-cells
 	 */
 	public static boolean isEmptyCell(Element element) {
 		NodeList children = element.getChildNodes();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TextAlignMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TextAlignMeta.java
index 2e07141..e4e537e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TextAlignMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TextAlignMeta.java
@@ -34,8 +34,7 @@
 			IHTMLConstants.TAG_CAPTION };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public TextAlignMeta() {
 		super(true, NOT_SPECIFIED);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TextDecorationMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TextDecorationMeta.java
index 05b10a4..7813463 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TextDecorationMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/TextDecorationMeta.java
@@ -19,23 +19,31 @@
  * @author mengbo
  */
 public class TextDecorationMeta extends CSSPropertyMeta {
-	public static final int NONE = 0;
+	private static final int NONE = 0;
 
+	/**
+	 * 
+	 */
 	public static final int UNDERLINE = 1;
 
+	/**
+	 * 
+	 */
 	public static final int OVERLINE = 1 << 1;
 
+	/**
+	 * 
+	 */
 	public static final int LINETHROUGH = 1 << 2;
 
-	public static final int BLINK = 1 << 3;
+	private static final int BLINK = 1 << 3;
 
 	static final String[] KEYWORDS = new String[] { ICSSPropertyID.VAL_NONE,
 			ICSSPropertyID.VAL_UNDERLINE, ICSSPropertyID.VAL_OVERLINE,
 			ICSSPropertyID.VAL_LINETHROUGH, ICSSPropertyID.VAL_BLINK };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public TextDecorationMeta() {
 		// the spec say text-decoration is not inherited. but the description
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/VerticalAlignMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/VerticalAlignMeta.java
index 5720b84..d4bb569 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/VerticalAlignMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/VerticalAlignMeta.java
@@ -20,24 +20,54 @@
  * @author mengbo
  */
 public class VerticalAlignMeta extends LengthMeta {
+	/**
+	 * baseline keyword
+	 */
 	public static final String BASELINE = "baseline"; //$NON-NLS-1$
 
+	/**
+	 * middle keyword
+	 */
 	public static final String MIDDLE = "middle"; //$NON-NLS-1$
 
+	/**
+	 * sub keyword
+	 */
 	public static final String SUB = "sub"; //$NON-NLS-1$
 
+	/**
+	 * super keyword
+	 */
 	public static final String SUPER = "super"; //$NON-NLS-1$
 
+	/**
+	 * text-top keyword
+	 */
 	public static final String TEXT_TOP = "text-top"; //$NON-NLS-1$
 
+	/**
+	 * text-bottom keyword
+	 */
 	public static final String TEXT_BOTTOM = "text-bottom"; //$NON-NLS-1$
 
+	/**
+	 * top keyword
+	 */
 	public static final String TOP = "top"; //$NON-NLS-1$
 
+	/**
+	 * bottom keyword
+	 */
 	public static final String BOTTOM = "bottom"; //$NON-NLS-1$
 
+	/**
+	 * center keyword
+	 */
 	public static final String CENTER = "center"; //$NON-NLS-1$
 
+	/**
+	 * default vertical align
+	 */
 	public static final String DEFAULT_VERTICAL_ALIGN = BASELINE;
 
 	private static final String[] KEYWORDS = new String[] { BASELINE, MIDDLE,
@@ -46,8 +76,7 @@
 	private static final String[] htmlAttributes = new String[] { IHTMLConstants.ATTR_VALIGN };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public VerticalAlignMeta() {
 		super(true, DEFAULT_VERTICAL_ALIGN);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/VisibilityMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/VisibilityMeta.java
index 668bbd3..17236d6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/VisibilityMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/VisibilityMeta.java
@@ -16,18 +16,26 @@
  * @version 1.5
  */
 public class VisibilityMeta extends CSSPropertyMeta {
+	/**
+	 * visible keyword
+	 */
 	public static final String VISIBLE = "visible";
 
+	/**
+	 * hidden keyword
+	 */
 	public static final String HIDDEN = "hidden";
 
+	/**
+	 * collapse keyword
+	 */
 	public static final String COLLAPSE = "collapse";
 
-	public static final String[] KEYWORDS = new String[] { VISIBLE, HIDDEN,
+	private static final String[] KEYWORDS = new String[] { VISIBLE, HIDDEN,
 			COLLAPSE };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public VisibilityMeta() {
 		super(true, VISIBLE);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/WhiteSpaceMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/WhiteSpaceMeta.java
index afcb81e..c94481f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/WhiteSpaceMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/WhiteSpaceMeta.java
@@ -24,8 +24,7 @@
 			ICSSPropertyID.VAL_PRE, ICSSPropertyID.VAL_NOWRAP };
 
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public WhiteSpaceMeta() {
 		super(true, ICSSPropertyID.VAL_NORMAL);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/WidthMeta.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/WidthMeta.java
index 1f5851e..f38e765 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/WidthMeta.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/property/WidthMeta.java
@@ -21,8 +21,7 @@
  */
 public class WidthMeta extends LengthMeta {
 	/**
-	 * @param inherit
-	 * @param initvalue
+	 * Default constructor
 	 */
 	public WidthMeta() {
 		super(false, ICSSPropertyID.VAL_AUTO);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/DimensionInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/DimensionInfo.java
index 74454aa..4531ace 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/DimensionInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/DimensionInfo.java
@@ -20,9 +20,9 @@
  * @version 1.5
  */
 public class DimensionInfo {
-	Dimension _dimension;
+	private final Dimension _dimension;
 
-	int _ascent;
+	private final int _ascent;
 
 	/**
 	 * 
@@ -44,10 +44,16 @@
 		this(new Dimension(width, height), i);
 	}
 
+	/**
+	 * @return the dimension
+	 */
 	public Dimension getDimension() {
 		return _dimension;
 	}
 
+	/**
+	 * @return the ascent
+	 */
 	public int getAscent() {
 		return _ascent;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/ICSSTextProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/ICSSTextProvider.java
index f5446ae..c646cc9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/ICSSTextProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/ICSSTextProvider.java
@@ -27,14 +27,14 @@
 	 * this is the final data to be displayed. There is no need for the
 	 * CSSTextFigure to normalize it.
 	 * 
-	 * @return
+	 * @return the text data
 	 */
 	public String getTextData();
 
 	/**
 	 * get the selected information.
 	 * 
-	 * @return
+	 * @return the selected range
 	 */
 	public int[] getSelectedRange();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/ICSSWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/ICSSWidgetProvider.java
index b1b8a12..81e7b9c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/ICSSWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/provider/ICSSWidgetProvider.java
@@ -22,10 +22,13 @@
 	/**
 	 * can be null
 	 * 
-	 * @return
+	 * @return the style
 	 */
 	public ICSSStyle getCSSStyle();
 
+	/**
+	 * @return true if is handling border
+	 */
 	public boolean isHandlingBorder();
 
 	/**
@@ -36,7 +39,7 @@
 	 *            -1 means no suggested value
 	 * @param height
 	 *            -1 means no suggested value
-	 * @return
+	 * @return the dimension info
 	 */
 	public DimensionInfo getPreferredDimension(int width, int height);
 
@@ -46,13 +49,13 @@
 	 * 
 	 * If isHandlingBorder returns true, then "rect" include border, and this
 	 * method should also paint its own border.
-	 * 
+	 * @param g 
 	 * @param rect
 	 */
 	public void paintFigure(Graphics g, Rectangle rect);
 
 	/**
-	 * @return
+	 * @return true if is inline
 	 */
 	public boolean isInline();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/AbstractStyle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/AbstractStyle.java
index fd00a16..db251dd 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/AbstractStyle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/AbstractStyle.java
@@ -38,12 +38,9 @@
 /**
  * @author mengbo
  */
-public class AbstractStyle implements ICSSStyle {
-	public static final String ATTR_NAME = "name";
-
-	public static final String ATTR_ID = "id";
-
-	protected Element _element;
+public class AbstractStyle implements ICSSStyle 
+{
+	private final Element _element;
 
 	private Map _cachedValues = new HashMap();
 
@@ -63,10 +60,16 @@
 
 	private HashMap _counters = null;
 
+	/**
+	 * @return the element this style if for
+	 */
 	public Element getElement() {
 		return _element;
 	}
 
+	/**
+	 * @param element
+	 */
 	public AbstractStyle(Element element) {
 		_element = element;
 	}
@@ -106,7 +109,7 @@
 	 * get a style property value.
 	 * 
 	 * @param property
-	 * @return
+	 * @return the style property
 	 */
 	public Object getStyleProperty(String property) {
 		Object value = _cachedValues.get(property);
@@ -123,7 +126,7 @@
 	 * in this method, should first check the "style" attribute, then combine
 	 * that with document style.
 	 * 
-	 * @return
+	 * @return the style
 	 */
 	protected CSSStyleDeclaration calculateDeclaration() {
 		String name = getHtmlElement().getAttribute("id");
@@ -133,10 +136,16 @@
 		return CSSUtil.getCSSDeclaration(this.getHtmlElement(), name);
 	}
 
+	/**
+	 * @return the style
+	 */
 	protected CSSStyleDeclaration calculateDefaultDeclaration() {
 		return CSSUtil.getDefaultCSSDeclaration(this.getHtmlElement(), null);
 	}
 
+	/**
+	 * @return the style declaration
+	 */
 	public CSSStyleDeclaration getDeclaration() {
 		// FIXME:may need to be change, boolean variable is not a best way.
 		if (!_cssDeclareWasSearched) {
@@ -146,6 +155,9 @@
 		return _cache;
 	}
 
+	/**
+	 * @return the default declaration
+	 */
 	public CSSStyleDeclaration getDefaultDeclaration() {
 		// FIXME:may need to be change, boolean variable is not a best way.
 		if (!_cssDefaultDeclareWasSearched) {
@@ -155,6 +167,9 @@
 		return _defaultCache;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.jst.pagedesigner.css2.ICSSStyle#getHTMLelementInitValue(java.lang.String)
+	 */
 	public Object getHTMLelementInitValue(String propertyName) {
 		ICSSPropertyMeta meta = getPropertyMeta(propertyName);
 		if (meta != null) {
@@ -168,6 +183,10 @@
 		return ICSSPropertyMeta.NOT_SPECIFIED;
 	}
 
+	/**
+	 * @param propertyName
+	 * @return the property
+	 */
 	protected Object calculateProperty(String propertyName) {
 		ICSSPropertyMeta meta = getPropertyMeta(propertyName);
 		Object result = null;
@@ -218,7 +237,7 @@
 	 * get the corresponding HTML tag for this style. This is for certain HTML
 	 * tag can also provide style information.
 	 * 
-	 * @return
+	 * @return the html tag
 	 */
 	protected String getHTMLTag() {
 		return _element.getTagName();
@@ -226,7 +245,7 @@
 
 	/**
 	 * @param propertyName
-	 * @return
+	 * @return the property meta for property name
 	 */
 	protected ICSSPropertyMeta getPropertyMeta(String propertyName) {
 		return CSSMetaRegistry.getInstance().getMeta(propertyName);
@@ -235,6 +254,7 @@
 	/**
 	 * convert the CSSValue to the property type specified data result.
 	 * 
+	 * @param meta 
 	 * @param value
 	 * @param propertyName
 	 * @return should not return null.
@@ -255,6 +275,7 @@
 	 * you don't directly or indirectly call getStyleProperty() to avoid
 	 * deadloop.
 	 * 
+	 * @param meta 
 	 * @param propertyName
 	 * @return null means no style information in other attributes. Otherwise
 	 *         return property specific data result -- normally will use meta to
@@ -281,8 +302,9 @@
 	/**
 	 * This is only called when inherit value from parent.
 	 * 
+	 * @param meta 
 	 * @param propertyName
-	 * @return
+	 * @return the result value
 	 */
 	protected Object getParentResultValue(ICSSPropertyMeta meta,
 			String propertyName) {
@@ -290,6 +312,9 @@
 		return style.getStyleProperty(propertyName);
 	}
 
+	/**
+	 * @param parentStyle
+	 */
 	public void setParentStyle(ICSSStyle parentStyle) {
 		this._parentStyle = parentStyle;
 		reset();
@@ -314,7 +339,7 @@
 	/**
 	 * Will not return null
 	 * 
-	 * @return
+	 * @return the font
 	 */
 	public ICSSFont getCSSFont() {
 		if (_font == null) {
@@ -465,6 +490,9 @@
 		return _backgroundColor;
 	}
 
+	/**
+	 * @return the html element
+	 */
 	public Element getHtmlElement() {
 		// if (_element instanceof IDOMElement)
 		// {
@@ -533,7 +561,7 @@
 	/**
 	 * Get named counter from counters.
 	 * 
-	 * @see org.eclipse.jst.pagedesigner.css2.ICSSStyle#getCounter(java.lang.String)
+	 * see org.eclipse.jst.pagedesigner.css2.ICSSStyle#getCounter(java.lang.String)
 	 */
 	public ICounterValueGenerator findCounter(String name, boolean must) {
 		Map counters = getCounters();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/ControlOverrideSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/ControlOverrideSupport.java
deleted file mode 100644
index d8d67df..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/ControlOverrideSupport.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.css2.style;
-
-import org.eclipse.draw2d.ColorConstants;
-import org.eclipse.jst.pagedesigner.css2.property.BorderStyleMeta;
-import org.eclipse.jst.pagedesigner.css2.property.BorderWidthMeta;
-import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyID;
-import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyMeta;
-import org.eclipse.jst.pagedesigner.css2.property.TextDecorationMeta;
-import org.eclipse.jst.pagedesigner.css2.value.Length;
-import org.eclipse.swt.graphics.Color;
-
-/**
- * This class provides support for setting default styles of certain UI
- * controls.
- * 
- * @author mengbo
- */
-public class ControlOverrideSupport {
-	static Color _buttonBackground = ColorConstants.button;
-
-	public static Object handleButtonOverride(ICSSPropertyMeta meta,
-			String propertyName) {
-		// if (BorderStyleMeta.isBorderStyle(propertyName))
-		// {
-		// return ICSSPropertyID.VAL_RIDGE;
-		// }
-		// else if (BorderWidthMeta.isBorderWidth(propertyName))
-		// {
-		// return Length.LENGTH_3;
-		// }
-		// else if
-		// (ICSSPropertyID.ATTR_TEXTDECORATION.equalsIgnoreCase(propertyName))
-		// {
-		// return new Integer(TextDecorationMeta.NONE);
-		// }
-		// else if
-		// (ICSSPropertyID.ATTR_BACKGROUND_COLOR.equalsIgnoreCase(propertyName))
-		// {
-		// return _buttonBackground;
-		// }
-		// else if
-		// (ICSSPropertyID.ATTR_PADDING_LEFT.equalsIgnoreCase(propertyName) ||
-		// ICSSPropertyID.ATTR_PADDING_RIGHT.equalsIgnoreCase(propertyName))
-		// {
-		// return Length.LENGTH_8;
-		// }
-
-		return null;
-	}
-
-	public static Object handleInputTextOverride(ICSSPropertyMeta meta,
-			String propertyName) {
-		if (BorderStyleMeta.isBorderStyle(propertyName)) {
-			return ICSSPropertyID.VAL_GROOVE;
-		} else if (BorderWidthMeta.isBorderWidth(propertyName)) {
-			return Length.LENGTH_3;
-		} else if (ICSSPropertyID.ATTR_TEXTDECORATION
-				.equalsIgnoreCase(propertyName)) {
-			return new Integer(TextDecorationMeta.NONE);
-		}
-
-		return null;
-	}
-
-	public static Object handleHighlightBorderOverride(ICSSPropertyMeta meta,
-			String propertyName) {
-		if (BorderStyleMeta.isBorderStyle(propertyName)) {
-			return ICSSPropertyID.VAL_DOTTED;
-		} else if (BorderWidthMeta.isBorderWidth(propertyName)) {
-			return Length.LENGTH_1;
-		}
-		return null;
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/DefaultStyle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/DefaultStyle.java
index 8c25a45..2a2d482 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/DefaultStyle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/DefaultStyle.java
@@ -24,6 +24,8 @@
 
 /**
  * @author mengbo
+ * 
+ * TODO: why doesn't this sub-class AbstractStyle
  */
 public class DefaultStyle implements ICSSStyle {
 
@@ -129,7 +131,7 @@
 	}
 
 	/**
-	 * @return
+	 * @return the singleton instance
 	 */
 	public static ICSSStyle getInstance() {
 		if (_instance == null) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/HiddenElementStyle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/HiddenElementStyle.java
index 46c1907..f5783f6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/HiddenElementStyle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/HiddenElementStyle.java
@@ -15,6 +15,10 @@
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.w3c.dom.Element;
 
+/**
+ * A style for hidden elements
+ *
+ */
 public class HiddenElementStyle extends DefaultStyle {
 	private EditProxyAdapter _editProxyAdapter;
 
@@ -43,10 +47,16 @@
 		}
 	};
 
+	/**
+	 * @param adapter
+	 */
 	public HiddenElementStyle(EditProxyAdapter adapter) {
 		this._editProxyAdapter = adapter;
 	}
 
+	/**
+	 * @param convertedElement
+	 */
 	public HiddenElementStyle(Element convertedElement) {
 		this._convertedElement = convertedElement;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/IRangeSelectionProxy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/IRangeSelectionProxy.java
index 499193e..5bf6fb8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/IRangeSelectionProxy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/IRangeSelectionProxy.java
@@ -18,7 +18,7 @@
 public interface IRangeSelectionProxy {
 
 	/**
-	 * @return
+	 * @return true if the range is selected
 	 */
 	boolean isRangeSelected();
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/ITagEditInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/ITagEditInfo.java
index d19b982..e2ac601 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/ITagEditInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/ITagEditInfo.java
@@ -12,14 +12,25 @@
 package org.eclipse.jst.pagedesigner.css2.style;
 
 /**
+ * TODO: TagConversion decorator should augment/replace
  * @author mengbo
  * @version 1.5
  */
-public interface ITagEditInfo {
+public interface ITagEditInfo 
+{
+	/**
+	 * @return true if is a widget
+	 */
 	public boolean isWidget();
 
+	/**
+	 * @return true if a border decorator is needed
+	 */
 	public boolean needBorderDecorator();
 
+	/**
+	 * @return true if a table decorator is needed
+	 */
 	public boolean needTableDecorator();
 
 	/**
@@ -30,5 +41,8 @@
 	 */
 	public int getMinWidth();
 
+	/**
+	 * @return the minimum height
+	 */
 	public int getMinHeight();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/ImageStyleHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/ImageStyleHelper.java
deleted file mode 100644
index 6072010..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/ImageStyleHelper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.css2.style;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.wst.sse.core.internal.util.URIResolver;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
-import org.w3c.dom.Element;
-
-/**
- * @author mengbo
- */
-public class ImageStyleHelper {
-	public static Image loadImage(String url, Element source) {
-		if (source instanceof IDOMElement) {
-			IDOMModel model = ((IDOMElement) source).getModel();
-            // TODO: the new resolver is not compatible with model
-			URIResolver resolver = model.getResolver();
-			if (resolver != null)
-				url = resolver.getLocationByURI(url);
-		}
-		if (url != null) {
-			return new Image(null, url);
-		}
-		return null;
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/StyleUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/StyleUtil.java
index 9f1e0c5..635576f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/StyleUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/style/StyleUtil.java
@@ -17,7 +17,11 @@
  * @author mengbo
  * @version 1.5
  */
-public class StyleUtil {
+public final class StyleUtil {
+	/**
+	 * @param style
+	 * @return true if the style is in a widget
+	 */
 	public static boolean isInWidget(ICSSStyle style) {
 		while (style != null && style != DefaultStyle.getInstance()) {
 			ITagEditInfo info = (ITagEditInfo) style
@@ -30,4 +34,9 @@
 		}
 		return false;
 	}
+	
+	private StyleUtil()
+	{
+	    // util class
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/value/Length.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/value/Length.java
index 47afe93..be19387 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/value/Length.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/value/Length.java
@@ -15,29 +15,54 @@
  * @author mengbo
  */
 public class Length {
+	/**
+	 * Constant for 0 length
+	 */
 	public static final Length LENGTH_0 = new Length(0, false);
 
+	/**
+	 * Constant for 1 length
+	 */
 	public static final Length LENGTH_1 = new Length(1, false);
 
+	/**
+	 * Constant for 2 length
+	 */
 	public static final Length LENGTH_2 = new Length(2, false);
 
+	/**
+	 * Constant for 3 length
+	 */
 	public static final Length LENGTH_3 = new Length(3, false);
 
+	/**
+	 * Constant for 8 length
+	 */
 	public static final Length LENGTH_8 = new Length(8, false);
 
-	boolean _percentage;
+	private final boolean _percentage;
 
-	int _value;
+	private final int _value;
 
+	/**
+	 * @param value
+	 * @param percentage
+	 */
 	public Length(int value, boolean percentage) {
 		_value = value;
 		_percentage = percentage;
 	}
 
+	/**
+	 * @return true if value is a percentage
+	 */
 	public boolean isPercentage() {
 		return _percentage;
 	}
 
+	/**
+	 * @return the length value
+	 */
 	public int getValue() {
 		return _value;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/AbstractWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/AbstractWidgetProvider.java
index f380d71..c29d39f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/AbstractWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/AbstractWidgetProvider.java
@@ -19,10 +19,13 @@
  * @version 1.5
  */
 public abstract class AbstractWidgetProvider implements ICSSWidgetProvider {
-	public static int BORDERTHICK = 2;
+	final static int BORDERTHICK = 2;
 
-	ICSSStyle _style;
+	private final ICSSStyle _style;
 
+	/**
+	 * @param style
+	 */
 	public AbstractWidgetProvider(ICSSStyle style) {
 		_style = style;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/BorderUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/BorderUtil.java
index 367ab1e..65659f6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/BorderUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/BorderUtil.java
@@ -26,23 +26,39 @@
  * @author mengbo
  * @version 1.5
  */
-public class BorderUtil {
+public final class BorderUtil {
+	/**
+	 * vertical bar style
+	 */
 	public final static int VERTICAL_BAR = 0;
 
+	/**
+	 * horizontal bar style
+	 */
 	public final static int HORIZONTAL_BAR = 1;
 
+	/**
+	 * both scroll bar style
+	 */
 	public final static int BOTH = 2;
 
+	/**
+	 * The scroll width
+	 */
 	public final static int SCROLL_WIDTH = 16;
 
+	/**
+	 * the border thickness
+	 */
 	public final static int BORDER_THICK = 2;
 
 	/**
 	 * draw a mask to a rectangle
 	 * 
-	 * @param Graphics
-	 * @param Rectangle
-	 * @param Color
+	 * @param g 
+	 * @param rect 
+	 * @param color 
+	 * 
 	 */
 	public static void maskRectangle(Graphics g, Rectangle rect, Color color) {
 		// set default if one not provided
@@ -67,6 +83,12 @@
 		g.setForegroundColor(foregroundColor);
 	}
 
+	/**
+	 * @param g
+	 * @param rect
+	 * @param thick
+	 * @param inset
+	 */
 	public static void drawBorder(Graphics g, Rectangle rect, int thick,
 			boolean inset) {
 		drawBorder(g, rect.x, rect.y, rect.width, rect.height, thick, inset);
@@ -117,11 +139,24 @@
 		}
 	}
 
+	/**
+	 * @param g
+	 * @param scrollWidth
+	 * @param rect
+	 * @param style
+	 */
 	public static void drawScrollBar(Graphics g, int scrollWidth,
 			Rectangle rect, int style) {
 		drawScrollBar(g, scrollWidth, BORDER_THICK, rect, style);
 	}
 
+	/**
+	 * @param g
+	 * @param scrollWidth
+	 * @param borderThick
+	 * @param rect
+	 * @param style
+	 */
 	public static void drawScrollBar(Graphics g, int scrollWidth,
 			int borderThick, Rectangle rect, int style) {
 		if (style == BOTH) {
@@ -230,6 +265,13 @@
 		}
 	}
 
+	/**
+	 * @param g
+	 * @param arrawWidth
+	 * @param arrawHeight
+	 * @param borderThick
+	 * @param rect
+	 */
 	public static void drawVertialBar(Graphics g, int arrawWidth,
 			int arrawHeight, int borderThick, Rectangle rect) {
 		drawScrollBar(g, arrawWidth, borderThick, rect, VERTICAL_BAR);
@@ -247,7 +289,7 @@
 		for (int i = 0, size = fragments.size(); i < size; i++) {
 			FlowBox box = (FlowBox) fragments.get(i);
 			// XXX: why -1?
-			graphics.drawRectangle(box._x, box._y, box.getWidth() - 1, box
+			graphics.drawRectangle(box.getX(), box.getY(), box.getWidth() - 1, box
 					.getHeight() - 1);
 		}
 		graphics.restoreState();
@@ -261,8 +303,13 @@
 		List fragments = figure.getFragmentsForRead();
 		for (int i = 0, size = fragments.size(); i < size; i++) {
 			FlowBox box = (FlowBox) fragments.get(i);
-			maskRectangle(g, new Rectangle(box._x, box._y, box.getWidth(), box
+			maskRectangle(g, new Rectangle(box.getX(), box.getY(), box.getWidth(), box
 					.getHeight()), null);
 		}
 	}
+	
+	private BorderUtil()
+	{
+	    // util class, no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ButtonWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ButtonWidgetProvider.java
index e4a8ed8..98bfaf9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ButtonWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ButtonWidgetProvider.java
@@ -48,14 +48,12 @@
 	// character height.
 	private final static double VERTICAL_PADDING_RATE = 0.36;
 
-	static final String[] DEFAULTLINES = new String[] { "  " };
+	private static final String[] DEFAULTLINES = new String[] { "  " };
 
 	private String _value = "";
 
 	private String[] _lines = DEFAULTLINES;
 
-//	private List _fragments = new ArrayList();
-
 	/**
 	 * @param style
 	 */
@@ -83,7 +81,7 @@
 	 * by default, the combo's width will be calculated from the longest option
 	 * value.
 	 * 
-	 * @return
+	 * @return the default width value
 	 */
 	public int getDefaultWidth() {
 		int longestStringWidth = 0;
@@ -107,7 +105,7 @@
 
 	/**
 	 * 
-	 * @return
+	 * @return the default height value
 	 * @see TextInputWidgetProvider#getDefaultHeight()
 	 */
 	public int getDefaultHeight() {
@@ -174,6 +172,9 @@
 		}
 	}
 
+	/**
+	 * @param value
+	 */
 	public void setValue(String value) {
 		if (value == null) {
 			value = "";
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/CheckboxWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/CheckboxWidgetProvider.java
index 2bbd8f6..54e319e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/CheckboxWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/CheckboxWidgetProvider.java
@@ -26,6 +26,9 @@
 public class CheckboxWidgetProvider extends AbstractWidgetProvider {
 	private boolean isChecked;
 
+	/**
+	 * @param style
+	 */
 	public CheckboxWidgetProvider(ICSSStyle style) {
 		super(style);
 	}
@@ -80,7 +83,10 @@
 		}
 	}
 
-	public int getDefaultWidth() {
+	/**
+	 * @return the default width
+	 */
+	private int getDefaultWidth() {
 		// FIXME: don't know the how to define the default width yet.
 		return 15;
 	}
@@ -92,6 +98,9 @@
 		return isChecked;
 	}
 
+	/**
+	 * @param checked
+	 */
 	public void setChecked(boolean checked) {
 		this.isChecked = checked;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ComboWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ComboWidgetProvider.java
index cd8720f..645ac6f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ComboWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ComboWidgetProvider.java
@@ -27,7 +27,6 @@
 
 /**
  * @author mengbo
- * @author mengbo
  * @version 1.5
  */
 public class ComboWidgetProvider extends AbstractWidgetProvider {
@@ -45,6 +44,9 @@
 
 	private String _label;
 
+	/**
+	 * @param style
+	 */
 	public ComboWidgetProvider(ICSSStyle style) {
 		super(style);
 	}
@@ -70,9 +72,9 @@
 	 * by default, the combo's width will be calculated from the longest option
 	 * value.
 	 * 
-	 * @return
+	 * @return the default width
 	 */
-	public int getDefaultWidth() {
+	private int getDefaultWidth() {
 		int textareaWidth;
 		if (this._longestString == null || this._longestString.length() == 0) {
 			textareaWidth = 20;
@@ -91,7 +93,7 @@
 
 	/**
 	 * 
-	 * @return
+	 * @return the default height
 	 * @see TextInputWidgetProvider#getDefaultHeight()
 	 */
 	public int getDefaultHeight() {
@@ -194,6 +196,9 @@
 		}
 	}
 
+	/**
+	 * @param label
+	 */
 	public void setSelectedLabel(String label) {
 		this._label = label;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/HiddenProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/HiddenProvider.java
index 2472c92..965d7ac 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/HiddenProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/HiddenProvider.java
@@ -38,12 +38,16 @@
     
 	/**
 	 * @param image
-	 * @param style
+	 * @param convertedElement 
 	 */
 	public HiddenProvider(Image image, Element convertedElement) {
 		super(image, new HiddenElementStyle(convertedElement));
 	}
 
+	/**
+	 * @param image
+	 * @param editPart
+	 */
 	public HiddenProvider(Image image, ElementEditPart editPart) {
 		super(image, new HiddenElementStyle(new EditProxyAdapter(editPart)));
 	}
@@ -86,6 +90,9 @@
 		return 0;
 	}
 
+	/**
+	 * @return the label width
+	 */
 	public int getLabelWidth() {
 		if (_labelVisible && _label != null && !_label.equals("")
 				&& _fontMetrics != null) {
@@ -101,7 +108,7 @@
 		g.setClip(rect);
 		int imageAreaWidth = Math.min(rect.width, _imageWidth);
 		int imageAreaHeight = Math.min(rect.height, _imageHeight);
-		if (_image != null) {
+		if (_image != null && !_image.isDisposed()) {
 			g.drawImage(_image, 0, 0, _imageWidth, _imageHeight, rect.x, rect.y
 					+ (rect.height - imageAreaHeight) / 2, imageAreaWidth,
 					imageAreaHeight);
@@ -121,18 +128,30 @@
 		}
 	}
 
+	/**
+	 * @return the label text
+	 */
 	public String getLabel() {
 		return _label;
 	}
 
+	/**
+	 * @param label
+	 */
 	public void setLabel(String label) {
 		this._label = label;
 	}
 
+	/**
+	 * @return whether the label is visible
+	 */
 	public boolean isLabelVisible() {
 		return _labelVisible;
 	}
 
+	/**
+	 * @param labelVisible
+	 */
 	public void setLabelVisible(boolean labelVisible) {
 		this._labelVisible = labelVisible;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ImageWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ImageWidgetProvider.java
index 510cf42..03d41b8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ImageWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ImageWidgetProvider.java
@@ -31,12 +31,25 @@
 
 	private static int _noPicHeight;
 
+	/**
+	 * the image
+	 */
 	protected Image _image;
 
+	/**
+	 * image width
+	 */
 	protected int _imageWidth;
 
+	/**
+	 * image height
+	 */
 	protected int _imageHeight;
 
+	/**
+	 * @param image
+	 * @param style
+	 */
 	public ImageWidgetProvider(Image image, ICSSStyle style) {
 		super(style);
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/InputFileWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/InputFileWidgetProvider.java
index c21eb5c..af8704d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/InputFileWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/InputFileWidgetProvider.java
@@ -37,6 +37,8 @@
 
 	/**
 	 * @param style
+	 * @param sub1 
+	 * @param sub2 
 	 */
 	public InputFileWidgetProvider(ICSSStyle style, ICSSWidgetProvider sub1,
 			ICSSWidgetProvider sub2) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ListWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ListWidgetProvider.java
index 3906425..23cee34 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ListWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/ListWidgetProvider.java
@@ -43,6 +43,9 @@
 
 	private int _rows = DEFAULTSIZE;
 
+	/**
+	 * @param style
+	 */
 	public ListWidgetProvider(ICSSStyle style) {
 		super(style);
 	}
@@ -67,7 +70,7 @@
 	 * by default, the combo's width will be calculated from the longest option
 	 * value.
 	 * 
-	 * @return
+	 * @return the default width
 	 */
 	public int getDefaultWidth() {
 		int longestStringWidth = 0;
@@ -91,7 +94,7 @@
 
 	/**
 	 * 
-	 * @return
+	 * @return the default height
 	 * @see TextInputWidgetProvider#getDefaultHeight()
 	 */
 	public int getDefaultHeight() {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/RadioWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/RadioWidgetProvider.java
index 195c860..980171f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/RadioWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/RadioWidgetProvider.java
@@ -24,6 +24,9 @@
 public class RadioWidgetProvider extends AbstractWidgetProvider {
 	private boolean isChecked;
 
+	/**
+	 * @param style
+	 */
 	public RadioWidgetProvider(ICSSStyle style) {
 		super(style);
 	}
@@ -89,7 +92,10 @@
 		}
 	}
 
-	public int getDefaultWidth() {
+	/**
+	 * @return the default width
+	 */
+	public final int getDefaultWidth() {
 		// FIXME: don't know the how to define the default width yet.
 		return 15;
 	}
@@ -101,6 +107,9 @@
 		return isChecked;
 	}
 
+	/**
+	 * @param checked
+	 */
 	public void setChecked(boolean checked) {
 		this.isChecked = checked;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/TextAreaWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/TextAreaWidgetProvider.java
index e1b1616..77aea65 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/TextAreaWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/TextAreaWidgetProvider.java
@@ -188,14 +188,23 @@
 		return end;
 	}
 
+	/**
+	 * @param columns
+	 */
 	public void setColumns(int columns) {
 		this._columns = (columns > 0 ? columns : DEFAULTCOLUMN);
 	}
 
+	/**
+	 * @param rows
+	 */
 	public void setRows(int rows) {
 		this._rows = (rows > 0 ? rows : DEFAULTROWS);
 	}
 
+	/**
+	 * @param value
+	 */
 	public void setValue(String value) {
 		this._value = value;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/TextInputWidgetProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/TextInputWidgetProvider.java
index d4f9508..966c5b8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/TextInputWidgetProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/widget/TextInputWidgetProvider.java
@@ -33,6 +33,9 @@
 public class TextInputWidgetProvider extends AbstractWidgetProvider {
 	private static final int VERTICAL_INCREMENT = 2;
 
+	/**
+	 * password size
+	 */
 	public static final int PWD_SIZE = 18;
 
 	private int DEFAULTSIZE = 20;
@@ -41,10 +44,17 @@
 
 	private String _value;
 
+	/**
+	 * @param style
+	 */
 	public TextInputWidgetProvider(ICSSStyle style) {
 		this(style, 20);
 	}
 
+	/**
+	 * @param style
+	 * @param size
+	 */
 	public TextInputWidgetProvider(ICSSStyle style, int size) {
 		super(style);
 		DEFAULTSIZE = size;
@@ -81,6 +91,9 @@
 		return fontSize + VERTICAL_INCREMENT;
 	}
 
+	/**
+	 * @return the default width
+	 */
 	public int getDefaultWidth() {
 		ICSSStyle style = this.getCSSStyle();
 		if (style == null) {
@@ -149,6 +162,9 @@
 		this._value = value;
 	}
 
+	/**
+	 * @param size
+	 */
 	public void setSize(int size) {
 		this._size = (size <= 0 ? DEFAULTSIZE : size);
 	}
@@ -156,7 +172,7 @@
 	/**
 	 * get current value in this text input control
 	 * 
-	 * @return
+	 * @return the value
 	 */
 	public String getValue() {
 		return _value;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/FeedBackInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/FeedBackInfo.java
index dcd8b80..f405bbc 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/FeedBackInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/FeedBackInfo.java
@@ -20,7 +20,8 @@
 	private int _order;
 
 	/**
-	 * 
+	 * @param desc 
+	 * @param order 
 	 */
 	public FeedBackInfo(String desc, int order) {
 		this._description = desc;
@@ -30,7 +31,7 @@
 	 * the description may be used in tooltip or wizard dialog selection to tell
 	 * user the effect of the drop.
 	 * 
-	 * @return
+	 * @return the description
 	 */
 	public String getDescription() {
 		return _description;
@@ -42,7 +43,7 @@
 	 * 
 	 * range from 0-10, the bigger, the more important.
 	 * 
-	 * @return
+	 * @return the order
 	 */
 	public int getOrder() {
 		return _order;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/ILocalDropHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/ILocalDropHandler.java
index 54cd48b..11378a1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/ILocalDropHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/ILocalDropHandler.java
@@ -23,17 +23,22 @@
 	/**
 	 * whether this handler will use wizard for user to config detail
 	 * 
-	 * @return
+	 * @return true if should use wizard
 	 */
 	public boolean useWizard();
 
+	/**
+	 * @param localData
+	 * @param viewer
+	 * @return true if should use wizard
+	 */
 	public boolean useWizard(Object localData, IHTMLGraphicalViewer viewer);
 
 	/**
 	 * 
 	 * @param localData
 	 * @param widget
-	 * @return
+	 * @return the feed back info
 	 */
 	public FeedBackInfo supportUpdateWidget(Object localData, Node widget);
 
@@ -44,7 +49,7 @@
 	 * @param localData
 	 * @param widget
 	 * @param viewer
-	 * @return
+	 * @return the wizard
 	 */
 	public IWizard getWizard(Object localData, Node widget,
 			IHTMLGraphicalViewer viewer);
@@ -63,7 +68,7 @@
 	 * 
 	 * @param localData
 	 * @param position
-	 * @return
+	 * @return the feedback info
 	 */
 	public FeedBackInfo supportInsertElements(Object localData,
 			IDOMPosition position);
@@ -73,11 +78,16 @@
 	 * @param localData
 	 * @param position
 	 * @param viewer
-	 * @return
+	 * @return the wizard
 	 */
 	public IWizard getWizard(Object localData, IDOMPosition position,
 			IHTMLGraphicalViewer viewer);
 
+	/**
+	 * @param localData
+	 * @param position
+	 * @param viewer
+	 */
 	public void doInsertElements(Object localData, IDOMPosition position,
 			IHTMLGraphicalViewer viewer);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/LocalDropRequest.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/LocalDropRequest.java
index 453f10e..bcb165d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/LocalDropRequest.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/LocalDropRequest.java
@@ -20,6 +20,9 @@
  */
 public class LocalDropRequest extends Request implements DropRequest {
 	// XXX: need move this constant to somewhere else.
+	/**
+	 * the request name for local drops
+	 */
 	public static final String REQ_LOCAL_DROP = "Local Drop";
 
 	private Point _location;
@@ -52,10 +55,16 @@
 		this._location = location;
 	}
 
+	/**
+	 * @return the  local object
+	 */
 	public Object getLocalObject() {
 		return _localObject;
 	}
 
+	/**
+	 * @param local
+	 */
 	public void setLocalObject(Object local) {
 		this._localObject = local;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceDropTargetListener.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceDropTargetListener.java
index 37a3bec..bd19857 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceDropTargetListener.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceDropTargetListener.java
@@ -35,6 +35,9 @@
 
 	private StructuredTextEditor _textEditor;
 
+	/**
+	 * @param textEditor
+	 */
 	public DesignerSourceDropTargetListener(StructuredTextEditor textEditor) {
 		super(false);
 		_textEditor = textEditor;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceMouseTrackAdapter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceMouseTrackAdapter.java
index 6446e6a..636460b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceMouseTrackAdapter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DesignerSourceMouseTrackAdapter.java
@@ -37,6 +37,10 @@
 
 	private EditDomain _domain;
 
+	/**
+	 * @param textEditor
+	 * @param domain
+	 */
 	public DesignerSourceMouseTrackAdapter(StructuredTextEditor textEditor,
 			EditDomain domain) {
 		super(false);
@@ -98,7 +102,7 @@
 	 * @see org.eclipse.gef.palette.PaletteListener#activeToolChanged(org.eclipse.gef.ui.palette.PaletteViewer,
 	 *      org.eclipse.gef.palette.ToolEntry)
 	 */
-	public Object getPaletteObject() {
+	private Object getPaletteObject() {
 		if (_domain.getPaletteViewer() != null) {
 			Object tool = _domain.getPaletteViewer().getActiveTool();
 			if (tool instanceof TagToolPaletteEntry) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DropSelectionWizard.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DropSelectionWizard.java
index 344ea07..8960639 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DropSelectionWizard.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/DropSelectionWizard.java
@@ -56,7 +56,10 @@
 	}
 
 	/**
-	 * 
+	 * @param viewer 
+	 * @param localData 
+	 * @param handlers 
+	 * @param widget 
 	 */
 	public DropSelectionWizard(IHTMLGraphicalViewer viewer, Object localData,
 			Map handlers, Node widget) {
@@ -67,6 +70,12 @@
 		_firstPage.setWidget(widget);
 	}
 
+	/**
+	 * @param viewer
+	 * @param localData
+	 * @param handlers
+	 * @param position
+	 */
 	public DropSelectionWizard(IHTMLGraphicalViewer viewer, Object localData,
 			Map handlers, IDOMPosition position) {
 		this(viewer, localData, handlers);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalDropCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalDropCommand.java
index ef366ee..6b6a802 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalDropCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalDropCommand.java
@@ -45,6 +45,9 @@
 
 	/**
 	 * constructor
+	 * @param viewer 
+	 * @param localObject 
+	 * @param feedbackHandlers 
 	 */
 	public LocalDropCommand(IHTMLGraphicalViewer viewer, Object localObject,
 			Map feedbackHandlers) {
@@ -53,10 +56,16 @@
 		_feedbackToHandlers = feedbackHandlers;
 	}
 
+	/**
+	 * @param widget
+	 */
 	public void setWidget(Node widget) {
 		_widget = widget;
 	}
 
+	/**
+	 * @param position
+	 */
 	public void setDOMPosition(IDOMPosition position) {
 		_position = position;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalDropEditPolicy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalDropEditPolicy.java
index f1f73fb..5076d6c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalDropEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalDropEditPolicy.java
@@ -49,6 +49,12 @@
 	// indicate whether update is checked
 	private static boolean _checkUpdate = true;
 
+	/**
+	 * @param widgetEditPart
+	 * @param request
+	 * @param results
+	 * @return true if should update widget
+	 */
 	public boolean checkUpdateWidget(EditPart widgetEditPart,
 			LocalDropRequest request, Map results) {
 		if (!(widgetEditPart instanceof ElementEditPart)) {
@@ -67,6 +73,14 @@
 		return !results.isEmpty();
 	}
 
+	/**
+	 * @param request
+	 * @param host
+	 * @param results
+	 * @param dpHolder
+	 * @param position
+	 * @return true if should insert element
+	 */
 	public boolean checkInsertElement(LocalDropRequest request,
 			EditPart[] host, Map results, DesignPosition[] dpHolder,
 			IDOMPosition[] position) {
@@ -198,6 +212,9 @@
 		}
 	}
 
+	/**
+	 * @return the feedback figure
+	 */
 	protected RectangleFigure getFeedbackFigure() {
 		if (_feedbackFigure == null) {
 			_feedbackFigure = new RectangleFigure();
@@ -212,6 +229,9 @@
 		return _feedbackFigure;
 	}
 
+	/**
+	 * @param rect
+	 */
 	protected void showFeedbackRect(Rectangle rect) {
 		RectangleFigure pf = getFeedbackFigure();
 		pf.translateToRelative(rect);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalSelectionDropTargetListener.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalSelectionDropTargetListener.java
index 91ff8b5..14fcf31 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalSelectionDropTargetListener.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/LocalSelectionDropTargetListener.java
@@ -24,7 +24,7 @@
 import org.eclipse.jst.jsf.common.ui.internal.guiutils.Alerts;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.dnd.LocalDropRequest;
-import org.eclipse.jst.pagedesigner.viewer.HTMLGraphicalViewer;
+import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DropTargetEvent;
 import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
@@ -53,7 +53,10 @@
 		return request;
 	}
 
-	public Object getCurrentLocalObject() {
+	/**
+	 * @return the current local object
+	 */
+	private Object getCurrentLocalObject() {
 		ISelection sel = LocalSelectionTransfer.getInstance().getSelection();
 		if (sel instanceof IStructuredSelection) {
 			return ((IStructuredSelection) sel).getFirstElement();
@@ -107,7 +110,7 @@
 	 * @see org.eclipse.swt.dnd.DropTargetListener#drop(org.eclipse.swt.dnd.DropTargetEvent)
 	 */
 	public void drop(DropTargetEvent event) {
-		String path = ((HTMLGraphicalViewer) getViewer()).getModel()
+		String path = ((IHTMLGraphicalViewer) getViewer()).getModel()
 				.getBaseLocation();
 		IWorkspace workspace = ResourcesPlugin.getWorkspace();
 		IWorkspaceRoot root = workspace.getRoot();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/Messages.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/Messages.java
index ade06ab..f7baa6e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/Messages.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/Messages.java
@@ -14,7 +14,11 @@
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
-public class Messages {
+/**
+ * A message bundle for dnd
+ *
+ */
+/*package*/ class Messages {
 	private static final String BUNDLE_NAME = "org.eclipse.jst.pagedesigner.dnd.internal.messages"; //$NON-NLS-1$
 
 	private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
@@ -24,6 +28,10 @@
         // no external instantiation
 	}
 
+	/**
+	 * @param key
+	 * @return the message for key
+	 */
 	public static String getString(String key) {
 		try {
 			return RESOURCE_BUNDLE.getString(key);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/RegistryReader.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/RegistryReader.java
index 3edb8bd..c364c7f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/RegistryReader.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/RegistryReader.java
@@ -34,6 +34,9 @@
 
 	private static ILocalDropHandler[] _handlers = null;
 
+	/**
+	 * @return all registered drop handlers
+	 */
 	public static synchronized ILocalDropHandler[] getAllHandlers() {
 		if (_handlers == null) {
 			_handlers = readAllHandlers();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/ResouceDropTargetListener.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/ResouceDropTargetListener.java
index c3e0c73..873c641 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/ResouceDropTargetListener.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/ResouceDropTargetListener.java
@@ -28,6 +28,9 @@
 public class ResouceDropTargetListener extends
 		AbstractTransferDropTargetListener {
 
+	/**
+	 * @param viewer
+	 */
 	public ResouceDropTargetListener(EditPartViewer viewer) {
 		super(viewer, FileTransfer.getInstance());
 	}
@@ -44,7 +47,7 @@
 		return request;
 	}
 
-	public Object getCurrentLocalObject() {
+	private Object getCurrentLocalObject() {
 		Object result = null;
 		try {
 			Object data = ((FileTransfer) getTransfer())
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SimpleWizardSelectionPage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SimpleWizardSelectionPage.java
index c19ebc7..c507c2a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SimpleWizardSelectionPage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SimpleWizardSelectionPage.java
@@ -75,7 +75,9 @@
 	// useWizard.
 
 	/**
-	 * @param pageName
+	 * @param viewer 
+	 * @param localData 
+	 * @param handlers 
 	 */
 	public SimpleWizardSelectionPage(IHTMLGraphicalViewer viewer,
 			Object localData, Map handlers) {
@@ -224,14 +226,14 @@
 
 	/**
 	 * @param element
-	 * @return
+	 * @return the text
 	 */
 	protected String getText(Object element) {
 		return ((FeedBackInfo) element).getDescription();
 	}
 
 	/**
-	 * @return
+	 * @return the elements
 	 */
 	protected List getElements() {
 		return new ArrayList(this._feedbackToHandlers.keySet());
@@ -254,7 +256,7 @@
 	}
 
 	/**
-	 * @return
+	 * @return the current handler
 	 */
 	public Object getCurrentHandler() {
 		return _currentHandler;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SourceViewLocalDropCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SourceViewLocalDropCommand.java
index 4363916..b4e7fd4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SourceViewLocalDropCommand.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SourceViewLocalDropCommand.java
@@ -29,6 +29,9 @@
 	private Object _data;
 
 	/**
+	 * @param textEditor 
+	 * @param data 
+	 * @param location 
 	 * 
 	 */
 	public SourceViewLocalDropCommand(StructuredTextEditor textEditor,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SourceViewerDragDropHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SourceViewerDragDropHelper.java
index 17d8c35..d596a2c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SourceViewerDragDropHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/SourceViewerDragDropHelper.java
@@ -43,9 +43,12 @@
  * 
  * @author mengbo
  */
-public class SourceViewerDragDropHelper {
+public final class SourceViewerDragDropHelper {
 	private static SourceViewerDragDropHelper _instance;
 
+	/**
+	 * @return the singleton instance
+	 */
 	public static SourceViewerDragDropHelper getInstance() {
 		if (_instance == null) {
 			_instance = new SourceViewerDragDropHelper();
@@ -53,6 +56,11 @@
 		return _instance;
 	}
 
+	private SourceViewerDragDropHelper()
+	{
+	    // singleton, no external instantiation
+	}
+	
 	private Point toControl(TextViewer textViewer, Point point) {
 		return (textViewer != null ? textViewer.getTextWidget()
 				.toControl(point) : point);
@@ -102,6 +110,11 @@
 		return offset;
 	}
 
+	/**
+	 * @param textEditor
+	 * @param location
+	 * @param caret
+	 */
 	public void updateCaret(StructuredTextEditor textEditor, Point location,
 			Point caret) {
 		TextViewer textViewer = textEditor.getTextViewer();
@@ -135,7 +148,7 @@
 			Point size = ct.getSize();
 
 			GC gc = new GC(st);
-			gc.setXORMode(true);
+			//gc.setXORMode(true);
 			gc.setLineWidth(size.x);
 
 			// erase old caret
@@ -166,6 +179,10 @@
 		}
 	}
 
+	/**
+	 * @param textEditor
+	 * @param location
+	 */
 	public void updateCaret(StructuredTextEditor textEditor, Point location) {
 		TextViewer textViewer = textEditor.getTextViewer();
 		if (textViewer != null) {
@@ -191,6 +208,11 @@
 		}
 	}
 
+	/**
+	 * @param textEditor
+	 * @param location
+	 * @return the caret offset
+	 */
 	public int showCaret(StructuredTextEditor textEditor, int location) {
 		StyledText text = textEditor.getTextViewer().getTextWidget();
 		text.setCursor(SharedCursors.CURSOR_TREE_ADD);
@@ -201,6 +223,10 @@
 		return text.getCaretOffset();
 	}
 
+	/**
+	 * @param node
+	 * @return the model query for the node or null if not available
+	 */
 	protected ModelQuery getModelQuery(Node node) {
 		if (node.getNodeType() == Node.DOCUMENT_NODE) {
 			return ModelQueryUtil.getModelQuery((Document) node);
@@ -208,6 +234,11 @@
         return ModelQueryUtil.getModelQuery(node.getOwnerDocument());
 	}
 
+	/**
+	 * @param caretPos
+	 * @param element
+	 * @return the position 
+	 */
 	public IDOMPosition findPosition(int caretPos, Node element) {
 		EditValidateUtil.validNode(element);
 		IDOMPosition position = EditModelQuery.getInstance().createDomposition(
@@ -215,6 +246,10 @@
 		return position;
 	}
 
+	/**
+	 * @param viewer
+	 * @param node
+	 */
 	public void format(TextViewer viewer, Node node) {
 		if (node == null) {
 			return;
@@ -239,6 +274,10 @@
 		viewer.doOperation(ISourceViewer.FORMAT);
 	}
 
+	/**
+	 * @param textEditor
+	 * @param reset
+	 */
 	public void changeCaret(StructuredTextEditor textEditor, boolean reset) {
 		if (reset) {
 			StyledText text = textEditor.getTextViewer().getTextWidget();
@@ -246,6 +285,11 @@
 		}
 	}
 
+	/**
+	 * @param textEditor
+	 * @param locationOffset
+	 * @return the location offset
+	 */
 	public int getValidLocation(StructuredTextEditor textEditor,
 			int locationOffset) {
 		Node node = getCaretNode(textEditor, locationOffset);
@@ -259,6 +303,11 @@
 		return calculateCaretLocation(node, locationOffset);
 	}
 
+	/**
+	 * @param textEditor
+	 * @param location
+	 * @return the offset
+	 */
 	public int getOffset(StructuredTextEditor textEditor, Point location) {
 		StyledText text = textEditor.getTextViewer().getTextWidget();
 		return text.getOffsetAtLocation(location);
@@ -295,7 +344,9 @@
 	// }
 
 	/**
-	 * IExtendedMarkupEditor method
+	 * @param textEditor
+	 * @param pos
+	 * @return the node
 	 */
 	public Node getCaretNode(StructuredTextEditor textEditor, int pos) {
         // TODO: getModel is deprecated
@@ -316,7 +367,7 @@
 	 * 
 	 * @param node
 	 * @param location
-	 * @return
+	 * @return the location
 	 */
 	public int calculateCaretLocation(Node node, int location) {
 		int pos[][] = new int[2][2];
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/CaretMoveIterator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/CaretMoveIterator.java
index ce4db59..d4e8d63 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/CaretMoveIterator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/CaretMoveIterator.java
@@ -39,7 +39,10 @@
 	private boolean _forward;
 
 	/**
-	 * constructor
+	 * @param nodeIterator 
+	 * @param validator 
+	 * @param position 
+	 * @param forward 
 	 */
 	public CaretMoveIterator(NodeIterator nodeIterator,
 			IMovementMediator validator, IDOMPosition position, boolean forward) {
@@ -50,6 +53,9 @@
 		_forward = forward;
 	}
 
+	/**
+	 * @return the node iterator
+	 */
 	public NodeIterator getNodeIterator() {
 		return _nodeIterator;
 	}
@@ -80,6 +86,10 @@
 		return result;
 	}
 
+	/**
+	 * @param node
+	 * @return the dom position
+	 */
 	public IDOMPosition moveIn(Node node) {
 		IDOMPosition result = null;
 		if (INNER_DEBUG) {
@@ -236,11 +246,10 @@
 	 * it based on operation ID and direction. We need to pack transparent
 	 * string.
 	 * 
-	 * @param operation
 	 * @param currentPosition
 	 * @param forward
 	 * @param validator
-	 * @return
+	 * @return the dom position
 	 */
 	public IDOMPosition moveToNextEditPosition(IDOMPosition currentPosition,
 			boolean forward, IMovementMediator validator) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMPosition.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMPosition.java
index ee50acd..ca840d2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMPosition.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMPosition.java
@@ -23,6 +23,10 @@
 
 	int _offset;
 
+	/**
+	 * @param containerNode
+	 * @param offset
+	 */
 	public DOMPosition(Node containerNode, int offset) {
 		_containerNode = containerNode;
 		_offset = offset;
@@ -35,7 +39,7 @@
 	 * when parent is not text node, then the offset is the index in
 	 * getIDOMNode().getChildNodes()
 	 * 
-	 * @return
+	 * @return the offset
 	 */
 	public int getOffset() {
 		return _offset;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMPositionHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMPositionHelper.java
index e40e02a..d0e77f8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMPositionHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMPositionHelper.java
@@ -28,6 +28,10 @@
  * @author mengbo
  */
 public class DOMPositionHelper {
+	/**
+	 * @param position
+	 * @return the design position
+	 */
 	public static DesignPosition toDesignRefPosition(DOMRefPosition position) {
 		Node node = position.getReferenceNode();
 		do {
@@ -89,7 +93,7 @@
 	 * pos.
 	 * 
 	 * @param position
-	 * @return
+	 * @return the design position
 	 */
 	public static DesignPosition toDesignPosition1(IDOMPosition position) {
 		if (position instanceof DOMRefPosition) {
@@ -145,7 +149,7 @@
 	 * convert a DesignPosition into DOMPosition.
 	 * 
 	 * @param position
-	 * @return
+	 * @return the dom position
 	 */
 	public static IDOMPosition toDOMRefPosition(DesignRefPosition position) {
 		// ok, it is not text.
@@ -163,7 +167,7 @@
 	 * convert a DesignPosition into DOMPosition.
 	 * 
 	 * @param position
-	 * @return
+	 * @return the dom position
 	 */
 	public static IDOMPosition toDOMPosition(DesignPosition position) {
 		if (!EditValidateUtil.validPosition(position)) {
@@ -238,7 +242,7 @@
 	 * Remove all the content in the range. And return the new position.
 	 * 
 	 * @param range
-	 * @return
+	 * @return the dom position
 	 */
 	public static IDOMPosition removeRange(DOMRange range) {
 		boolean ordered = range.isOrdered();
@@ -255,7 +259,7 @@
 	 * try to merge the position in adjacent text node (if it is not already in)
 	 * 
 	 * @param position
-	 * @return
+	 * @return the dom position
 	 */
 	public static IDOMPosition mergeIntoText(IDOMPosition position) {
 		if (position.getContainerNode() instanceof Text)
@@ -275,7 +279,7 @@
 	 * @param displayData
 	 * @param nodeData
 	 * @param offset
-	 * @return
+	 * @return the offset
 	 */
 	// FIXME: this method is still buggy
 	public static int displayOffsetToTextDataOffset(String displayData,
@@ -326,10 +330,10 @@
 	}
 
 	/**
-	 * @param textData
+	 * @param nodeData 
 	 * @param displayData
 	 * @param offset
-	 * @return
+	 * @return the offset
 	 */
 	// FIXME: this method is still buggy
 	public static int textDataOffsetToDisplayOffset(String nodeData,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRange.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRange.java
index bd80539..f35dfda 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRange.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRange.java
@@ -22,29 +22,39 @@
 	IDOMPosition _end;
 
 	/**
-	 * 
+	 * @param p1
+	 * @param p2
 	 */
 	public DOMRange(IDOMPosition p1, IDOMPosition p2) {
 		_start = p1;
 		_end = p2;
 	}
 
+	/**
+	 * @return the start position
+	 */
 	public IDOMPosition getStartPosition() {
 		return _start;
 	}
 
+	/**
+	 * @return the end position
+	 */
 	public IDOMPosition getEndPosition() {
 		return _end;
 	}
 
 	/**
-	 * @return
+	 * @return true if is empty
 	 */
 	public boolean isEmpty() {
 		return _start.getContainerNode() == _end.getContainerNode()
 				&& _start.getOffset() == _end.getOffset();
 	}
 
+	/**
+	 * @return true if is ordered
+	 */
 	public boolean isOrdered() {
 		Node common = DOMUtil.findCommonAncester(_start.getContainerNode(),
 				_end.getContainerNode());
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRangeHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRangeHelper.java
index fcc8fb9..1c7a33c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRangeHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRangeHelper.java
@@ -18,7 +18,11 @@
 /**
  * @author mengbo
  */
-public class DOMRangeHelper {
+public final class DOMRangeHelper {
+	/**
+	 * @param range
+	 * @return the dom range
+	 */
 	public static DOMRange toDOMRange(DesignRange range) {
 		if (range.getStartPosition() == range.getEndPosition()) {
 			IDOMPosition dp = DOMPositionHelper.toDOMPosition(range
@@ -30,6 +34,10 @@
         		.getEndPosition()));
 	}
 
+	/**
+	 * @param range
+	 * @return the design range
+	 */
 	public static DesignRange toDesignRange(DOMRange range) {
 		if (range.getStartPosition() == range.getEndPosition()) {
 			DesignPosition dp = DOMPositionHelper.toDesignPosition(range
@@ -41,6 +49,12 @@
 				.getEndPosition()));
 	}
 
+	/**
+	 * @param range
+	 * @param original
+	 * @param replacement
+	 * @return the dom range
+	 */
 	public static DOMRange handleReplacement(DOMRange range, Node original,
 			Node replacement) {
 		if (range.getStartPosition() == range.getEndPosition()) {
@@ -52,4 +66,9 @@
         		original, replacement), range.getEndPosition()
         		.handleReplacement(original, replacement));
 	}
+	
+	private DOMRangeHelper()
+	{
+	    // util class, no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRefPosition.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRefPosition.java
index b82e145..634e855 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRefPosition.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRefPosition.java
@@ -136,6 +136,9 @@
 		return _refNode;
 	}
 
+	/**
+	 * @return true if is forward
+	 */
 	public boolean isForward() {
 		return _forward;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRefPosition2.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRefPosition2.java
index b037fbc..3da9127 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRefPosition2.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMRefPosition2.java
@@ -26,8 +26,8 @@
 	boolean _last;
 
 	/**
-	 * @param replacement
-	 * @param _last2
+	 * @param parent 
+	 * @param last 
 	 */
 	public DOMRefPosition2(Node parent, boolean last) {
 		_parentNode = parent;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMStyleUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMStyleUtil.java
index b9eefd4..637d6d4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMStyleUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMStyleUtil.java
@@ -26,7 +26,12 @@
  * @author mengbo
  * @version 1.5
  */
-public class DOMStyleUtil {
+public final class DOMStyleUtil {
+	/**
+	 * @param original
+	 * @param cssProperty
+	 * @return the inline style property
+	 */
 	public static String getInlineStyleProperty(Element original,
 			String cssProperty) {
 		if (original instanceof ElementCSSInlineStyle) {
@@ -159,7 +164,7 @@
 
 	/**
 	 * @param ele
-	 * @return
+	 * @return true if supports the style attribute
 	 */
 	public static boolean supportStyleAttribute(IDOMElement ele) {
 		CMElementDeclaration decl = CMUtil.getElementDeclaration(ele);
@@ -168,5 +173,10 @@
 		}
         return false;
 	}
+	
+	private DOMStyleUtil()
+	{
+	    // util class, no external instantiation
+	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMUtil.java
index b0f3fd8..eec0a33 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/DOMUtil.java
@@ -63,7 +63,7 @@
 	 * 
 	 * @param node1
 	 * @param node2
-	 * @return
+	 * @return the common ancestor
 	 */
 	public static Node findCommonAncester(Node node1, Node node2) {
 		List list1 = getAncesters(node1);
@@ -102,7 +102,7 @@
 	 * 
 	 * @param destDoc
 	 * @param sourceNode
-	 * @return
+	 * @return the node
 	 */
 	public static Node cloneNodeDeepIgnoreError(Document destDoc,
 			Node sourceNode) {
@@ -152,6 +152,11 @@
 		}
 	}
 
+	/**
+	 * @param destDoc
+	 * @param sourceNode
+	 * @return the node
+	 */
 	public static Node cloneNodeDeep(Document destDoc, Node sourceNode) {
 		switch (sourceNode.getNodeType()) {
 		case Node.ELEMENT_NODE:
@@ -195,7 +200,7 @@
 	 * 
 	 * @param ancester
 	 * @param child
-	 * @return
+	 * @return true if ancester is an ancestor of child
 	 */
 	public static boolean isAncester(Node ancester, Node child) {
 		while (child != null) {
@@ -210,8 +215,8 @@
 	/**
 	 * insert the node at specified position.
 	 * 
-	 * @param insertPosition
-	 * @param insert
+	 * @param domPosition 
+	 * @param node 
 	 * @return null if fail, otherwise return the inserted node.
 	 */
 	public static Node insertNode(IDOMPosition domPosition, Node node) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditHelper.java
index 0c522cb..e8e2171 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditHelper.java
@@ -25,7 +25,6 @@
 import org.eclipse.jst.pagedesigner.validation.caret.InlineEditingNavigationMediator;
 import org.eclipse.jst.pagedesigner.viewer.DesignPosition;
 import org.eclipse.jst.pagedesigner.viewer.DesignRefPosition;
-import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -36,19 +35,22 @@
  * @author mengbo
  */
 public class EditHelper {
-	public final static boolean INNER_DEBUG = false;
+//	public final static boolean INNER_DEBUG = false;
 
-	public final static int OUT_OF_LEFT = 1;
+	private final static int OUT_OF_LEFT = 1;
 
-	public final static int LEFT_NAME = 2;
+	private final static int LEFT_NAME = 2;
 
+	/**
+	 * indicates a position in the middle
+	 */
 	public final static int IN_MIDDLE = 3;
 
-	public final static int RIGHT_NAME = 4;
+	private final static int RIGHT_NAME = 4;
 
-	public final static int OUT_OF_RIGHT = 5;
+	private final static int OUT_OF_RIGHT = 5;
 
-	public static final EditHelper _instance = new EditHelper();
+	private static final EditHelper _instance = new EditHelper();
 
 	//private static Logger _log = PDPlugin.getLogger(EditHelper.class);
 
@@ -64,7 +66,7 @@
 	 * @param position
 	 * @param forward
 	 * @param forEmpty
-	 * @return
+	 * @return the offset
 	 */
 	public int getTextNextOffset(IDOMPosition position, boolean forward,
 			boolean forEmpty) {
@@ -89,6 +91,9 @@
 
 	}
 
+	/**
+	 * @return the singleton instance
+	 */
 	public static EditHelper getInstance() {
 		return _instance;
 	}
@@ -102,7 +107,7 @@
 	 * @param action
 	 * @param currentPosition
 	 * @param forward
-	 * @return
+	 * @return the dom position
 	 */
 	public static DesignPosition moveToNextEditPosition(int action,
 			DesignPosition currentPosition, boolean forward) {
@@ -124,11 +129,10 @@
 	 * it based on operation ID and direction. We need to pack transparent
 	 * string.
 	 * 
-	 * @param operation
 	 * @param currentPosition
 	 * @param forward
 	 * @param validator
-	 * @return
+	 * @return the dom position
 	 */
 	public static IDOMPosition moveToNextEditPosition(
 			IDOMPosition currentPosition, boolean forward,
@@ -147,7 +151,7 @@
 	 * Delete a node, in case it is 'body' or 'html', it won't perform delete.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the node
 	 */
 	public static Node deleteNode(Node node) {
 		if (node == null || node.getNodeName() == null) {
@@ -176,7 +180,7 @@
 	 * Order the IDOMPositions in a range in ascending order.
 	 * 
 	 * @param range
-	 * @return
+	 * @return the dom range
 	 */
 	public static DOMRange normal(DOMRange range) {
 		EditValidateUtil.validRange(range);
@@ -193,8 +197,9 @@
 	 * Move position in to node from its outside, the node should be breakble.
 	 * 
 	 * @param node
+	 * @param validator 
 	 * @param forward
-	 * @return
+	 * @return the dom position
 	 */
 	public static IDOMPosition moveInto(Node node, IMovementMediator validator,
 			boolean forward) {
@@ -207,7 +212,7 @@
 	 * Convert a DomRefPosition into DOMPosition.
 	 * 
 	 * @param position
-	 * @return
+	 * @return the dom position
 	 */
 	public static IDOMPosition ensureDOMPosition(IDOMPosition position) {
 		if (position instanceof DOMRefPosition) {
@@ -217,6 +222,13 @@
 		return position;
 	}
 
+	/**
+	 * @param currentNode
+	 * @param pos1
+	 * @param pos2
+	 * @param top
+	 * @param workNode
+	 */
 	public void processText(Text currentNode, final int pos1, final int pos2,
 			Node top, Stack workNode) {
 		// the text could be tranparent, or 0 length.
@@ -233,6 +245,13 @@
 		}
 	}
 
+	/**
+	 * @param currentNode
+	 * @param pos1
+	 * @param pos2
+	 * @param top
+	 * @param result
+	 */
 	public void collectNodes(Node currentNode, final int pos1, final int pos2,
 			Node top, Stack result) {
 		Assert.isTrue(pos1 <= pos2);
@@ -280,6 +299,12 @@
 		}
 	}
 
+	/**
+	 * @param currentNode
+	 * @param pos
+	 * @param isOffset
+	 * @return the location
+	 */
 	public int getLocation(Node currentNode, int pos, boolean isOffset) {
 		if (EditModelQuery.getInstance().isSingleRegionNode(currentNode)) {
 			// if (EditModelQuery.isText(currentNode))
@@ -354,6 +379,11 @@
 //		}
 //	}
 
+	/**
+	 * @param position
+	 * @param forward
+	 * @return the edit part for position
+	 */
 	public EditPart getEditPart(DesignPosition position, boolean forward) {
 		if (position instanceof DesignRefPosition) {
 			return ((DesignRefPosition) position).getRefPart();
@@ -381,6 +411,10 @@
 		return null;
 	}
 
+	/**
+	 * @param position
+	 * @return the resulting dom position
+	 */
 	public static IDOMPosition splitNode(IDOMPosition position) {
 		if (EditValidateUtil.validPosition(position)) {
 			Node container = null;
@@ -446,8 +480,9 @@
 		return position;
 	}
 
-	/*
-	 * Return the position of this 'position' in relative to it's container.
+	/**
+	 * @param position 
+	 * @return the position of this 'position' in relative to it's container.
 	 */
 	public static int getLocation(IDOMPosition position) {
 		if (position.getOffset() == 0) {
@@ -466,11 +501,4 @@
         }
         return 0;
 	}
-
-	public static EditPart getPart(Node node) {
-		if (node instanceof INodeNotifier) {
-			((INodeNotifier) node).getAdapterFor(EditPart.class);
-		}
-		return null;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditModelQuery.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditModelQuery.java
index 85f43ba..54668b1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditModelQuery.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditModelQuery.java
@@ -50,28 +50,34 @@
 /**
  * @author mengbo
  */
-public class EditModelQuery {
+public final class EditModelQuery {
 	private static Logger _log = PDPlugin.getLogger(EditModelQuery.class);
 
 	private static EditModelQuery _instance;
 
-	public static final int START_INDEX_BEFORE_TAG = 1;
+	private static final int START_INDEX_BEFORE_TAG = 1;
 
-	public static final int END_INDEX_WITHIN_TAG = 2;
+	private static final int END_INDEX_WITHIN_TAG = 2;
 
-	public static final HashSet SPECIAL_EMPTY_CHARS = new HashSet();
+	private static final HashSet SPECIAL_EMPTY_CHARS = new HashSet();
 
+	/**
+	 * Maps unicode Characters to html equivalents
+	 */
 	public static final HashMap CHAR_NODE_MAP = new HashMap();
 
 	// Cursor can't go outside of these container.
-	public static final HashSet HTML_CONSTRAINED_CONTAINERS = new HashSet();
+	private static final HashSet HTML_CONSTRAINED_CONTAINERS = new HashSet();
 
+	/**
+	 * HTML tags that control style
+	 */
 	public static final HashSet HTML_STYLE_NODES = new HashSet();
 
-	public static final HashSet UNREMOVEBLE_TAGS = new HashSet();
+	static final HashSet UNREMOVEBLE_TAGS = new HashSet();
 
 	// Nodes that can hold other nodes.
-	public static final String[] HTML_CONTAINER_NODES = {
+	static final String[] HTML_CONTAINER_NODES = {
 	//
 			IHTMLConstants.TAG_BODY, //
 			IHTMLConstants.TAG_HTML, //
@@ -85,7 +91,7 @@
 			IHTMLConstants.TAG_UL //
 	};
 
-	public static final String[] NON_HTML_CONTAINER_NODES = {
+	static final String[] NON_HTML_CONTAINER_NODES = {
 			IJSFConstants.TAG_VIEW, //
 			IJSFConstants.TAG_PANELGRID, //
 			IJSFConstants.TAG_PANELGROUP, //
@@ -129,6 +135,9 @@
         // no  external instantiation
 	}
 
+	/**
+	 * @return the singleton instance
+	 */
 	public static EditModelQuery getInstance() {
 		if (_instance == null) {
 			_instance = new EditModelQuery();
@@ -140,7 +149,7 @@
 	 * Get previous sibling, or if sibling is null then get previous neighbor.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the node
 	 */
 	public Node getPreviousNeighbor(Node node) {
 		if (!EditValidateUtil.validNode(node)) {
@@ -160,7 +169,7 @@
 	 * rightmost child, which is adjacent to 'node'.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the node
 	 */
 	public Node getPreviousLeafNeighbor(Node node) {
 		return getLastLeafChild(getPreviousNeighbor(node));
@@ -170,7 +179,7 @@
 	 * Get next sibling, or if sibling is null get next neighbor.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the node
 	 */
 	public Node getNextNeighbor(Node node) {
 		if (!EditValidateUtil.validNode(node)) {
@@ -191,7 +200,7 @@
 	 * child which will be adjacent to 'node'.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the node
 	 */
 	public Node getNextLeafNeighbor(Node node) {
 		return getFirstLeafChild(getNextNeighbor(node));
@@ -201,7 +210,7 @@
 	 * Get node's rightmost leaf child.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the node
 	 */
 	private Node getLastLeafChild(Node node) {
 		if (node == null) {
@@ -217,9 +226,9 @@
 	 * Get node's leftmost leaf child.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the node
 	 */
-	protected Node getFirstLeafChild(Node node) {
+	private Node getFirstLeafChild(Node node) {
 		if (node == null) {
 			return null;
 		}
@@ -234,7 +243,7 @@
 	 * To see if node is within a indexed region that is started from 'start',
 	 * ended at 'end'
 	 */
-	public static boolean within(int start, int end, Node theNode) {
+	static boolean within(int start, int end, Node theNode) {
 		return getNodeStartIndex(theNode) >= start
 				&& getNodeEndIndex(theNode) <= end;
 	}
@@ -247,7 +256,7 @@
 	 * @param position
 	 * @return
 	 */
-	public boolean within(int start, int end, IDOMPosition position) {
+	 boolean within(int start, int end, IDOMPosition position) {
 		int pos = getIndexedRegionLocation(position);
 		return start <= pos && pos <= end;
 	}
@@ -260,7 +269,7 @@
 	 * @param theNode
 	 * @return
 	 */
-	public static boolean outOf(int start, int end, Node theNode) {
+	static boolean outOf(int start, int end, Node theNode) {
 		if (getNodeLenth(theNode) > 0) {
 			return getNodeStartIndex(theNode) >= end
 					|| getNodeEndIndex(theNode) <= start;
@@ -272,12 +281,11 @@
 	 * Determine whether the position is at node's edge. When the offset is at
 	 * edge, it is in the leftmost or rightmost offset of node's region.
 	 * 
-	 * @param node
-	 * @param offset
-	 * @param direction
-	 * @return
+	 * @param position 
+	 * @param forward 
+	 * @return true if at edge
 	 */
-	public boolean atEdge(IDOMPosition position, boolean forward) {
+	boolean atEdge(IDOMPosition position, boolean forward) {
 		Node node = position.getContainerNode();
 		int offset = position.getOffset();
 		if (forward) {
@@ -295,9 +303,9 @@
 	 * 
 	 * @param node
 	 * @param forward
-	 * @return
+	 * @return the node
 	 */
-	public Node getNeighbor(Node node, boolean forward) {
+	Node getNeighbor(Node node, boolean forward) {
 		if (forward) {
 			return getNextNeighbor(node);
 		}
@@ -309,9 +317,9 @@
 	 * 
 	 * @param node
 	 * @param root
-	 * @return
+	 * @return the node
 	 */
-	public Node getPreviousNeighbor(Node node, Node root) {
+	Node getPreviousNeighbor(Node node, Node root) {
 		if (!EditValidateUtil.validNode(node)) {
 			return null;
 		}
@@ -330,9 +338,9 @@
 	 * 
 	 * @param node
 	 * @param root
-	 * @return
+	 * @return the node
 	 */
-	public Node getNextNeighbor(Node node, Node root) {
+	Node getNextNeighbor(Node node, Node root) {
 		if (!EditValidateUtil.validNode(node)) {
 			return null;
 		}
@@ -353,9 +361,9 @@
 	 * @param node
 	 * @param forward
 	 * @param root
-	 * @return
+	 * @return the node
 	 */
-	public Node getNeighbor(Node node, boolean forward, Node root) {
+	 Node getNeighbor(Node node, boolean forward, Node root) {
 		Assert.isTrue(root != null);
 		if (forward) {
 			return getNextNeighbor(node, root);
@@ -369,9 +377,9 @@
 	 * 
 	 * @param node
 	 * @param forward
-	 * @return
+	 * @return the node
 	 */
-	public Node getLeafNeighbor(Node node, boolean forward) {
+	Node getLeafNeighbor(Node node, boolean forward) {
 		if (node == null) {
 			return null;
 		}
@@ -387,9 +395,9 @@
 	 * @param node
 	 * @param childIndex
 	 * @param forward
-	 * @return
+	 * @return the node
 	 */
-	public Node getLeafNeighbor(Node node, int childIndex, boolean forward) {
+	 Node getLeafNeighbor(Node node, int childIndex, boolean forward) {
 		if (node == null) {
 			return null;
 		}
@@ -409,9 +417,9 @@
 	 * @param parent
 	 * @param childIndex
 	 * @param forward
-	 * @return
+	 * @return the node
 	 */
-	public Node getNeighbor(Node parent, int childIndex, boolean forward) {
+	 Node getNeighbor(Node parent, int childIndex, boolean forward) {
 		if (!EditValidateUtil.validNode(parent)) {
 			return null;
 		}
@@ -442,10 +450,9 @@
 	 * 
 	 * @param model
 	 * @param textSelection
-	 * @param lookForChildren
-	 * @return
+	 * @return the node
 	 */
-	public static boolean isSame(IStructuredModel model,
+	 static boolean isSame(IStructuredModel model,
 			TextSelection textSelection) {
 		if (model != null && textSelection != null) {
 			int t1 = textSelection.getOffset();
@@ -461,9 +468,9 @@
 	 * @param model
 	 * @param range
 	 * @param textSelection
-	 * @return
+	 * @return true if same
 	 */
-	public static boolean isSame(IStructuredModel model, DesignRange range,
+	static boolean isSame(IStructuredModel model, DesignRange range,
 			TextSelection textSelection) {
 		if (model != null && range != null && textSelection != null) {
 			int t1 = textSelection.getOffset();
@@ -484,11 +491,10 @@
 	/**
 	 * To see whether the selection is single point.
 	 * 
-	 * @param model
 	 * @param textSelection
-	 * @return
+	 * @return true if same point
 	 */
-	public static boolean isSamePoint(TextSelection textSelection) {
+	 static boolean isSamePoint(TextSelection textSelection) {
 		return textSelection.getLength() == 0;
 	}
 
@@ -497,7 +503,7 @@
 	 * 
 	 * @param p1
 	 * @param p2
-	 * @return
+	 * @return true if same
 	 */
 	public static boolean isSame(IDOMPosition p1, IDOMPosition p2) {
 		if (p1 == p2
@@ -513,17 +519,26 @@
 	 * location.
 	 * 
 	 * @param range
-	 * @return
+	 * @return true if is same
 	 */
 	public static boolean isSame(DOMRange range) {
 		EditValidateUtil.validRange(range);
 		return isSame(range.getStartPosition(), range.getEndPosition());
 	}
 
+	/**
+	 * @param range
+	 * @return true if same
+	 */
 	public static boolean isSame(DesignRange range) {
 		return isSame(range.getStartPosition(), range.getEndPosition());
 	}
 
+	/**
+	 * @param p1
+	 * @param p2
+	 * @return true if same
+	 */
 	public static boolean isSame(DesignPosition p1, DesignPosition p2) {
 		if (p1 == p2) {
 			return true;
@@ -535,7 +550,12 @@
 		return false;
 	}
 
-	public boolean isWithinSameText(IDOMPosition p1, IDOMPosition p2) {
+	/**
+	 * @param p1
+	 * @param p2
+	 * @return true if p1 and p2 are within same text node
+	 */
+	final boolean isWithinSameText(IDOMPosition p1, IDOMPosition p2) {
 		if (p1 == null || p2 == null) {
 			return false;
 		}
@@ -547,7 +567,7 @@
 	 * Get the node absolute start location in its residing IStructuredModel.
 	 * 
 	 * @param p
-	 * @return
+	 * @return the location
 	 */
 	public static int getIndexedRegionLocation(IDOMPosition p) {
 		if (!EditValidateUtil.validPosition(p)) {
@@ -586,12 +606,13 @@
 	/**
 	 * To determine whether the position is at the edge of a node. TODO: temp
 	 * func for later combination
+	 * @param nodePos 
 	 * 
-	 * @param node
 	 * @param position
-	 * @return
+	 * @param left 
+	 * @return true if linked
 	 */
-	public boolean isLinked(IDOMPosition nodePos, IDOMPosition position,
+	boolean isLinked(IDOMPosition nodePos, IDOMPosition position,
 			boolean left) {
 		int index = getIndexedRegionLocation(position);
 		if (left) {
@@ -619,13 +640,18 @@
 	 * 
 	 * @param location
 	 * @param node
-	 * @return
+	 * @return true if at edge
 	 */
-	public boolean isAtNodeNameEdge(int location, Node node, int posType) {
+	boolean isAtNodeNameEdge(int location, Node node, int posType) {
 		int start = getNodeEndNameStartIndex(node);
 		return location == start;
 	}
 
+	/**
+	 * @param location
+	 * @param node
+	 * @return true if at edge
+	 */
 	public boolean isAtNodeNameEdge(int location, Node node) {
 		return isAtNodeNameEdge(location, node, START_INDEX_BEFORE_TAG)
 				|| isAtNodeNameEdge(location, node, END_INDEX_WITHIN_TAG);
@@ -636,9 +662,9 @@
 	 * transparent.
 	 * 
 	 * @param node
-	 * @return
+	 * @return true if transparent text
 	 */
-	public static boolean isTransparentText(Node node) {
+	 public static boolean isTransparentText(Node node) {
 		// should valid non null?
 		Assert.isTrue(node != null);
 		if (node == null || !isText(node)) {
@@ -664,9 +690,9 @@
 	 * Get node index in its parent's children.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the node index or -1 if not found
 	 */
-	public static int getNodeIndex(Node node) {
+	 static int getNodeIndex(Node node) {
 		EditValidateUtil.validNode(node);
 		Node parent = node.getParentNode();
 		int index = 0;
@@ -686,9 +712,9 @@
 	 * children list.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the index
 	 */
-	public int getSameTypeNodeIndex(Node node) {
+	 public int getSameTypeNodeIndex(Node node) {
 		EditValidateUtil.validNode(node);
 		int i = 0;
 		while (node != null) {
@@ -709,9 +735,9 @@
 	 * @param value
 	 * @param position
 	 * @param forward
-	 * @return
+	 * @return the position
 	 */
-	public int getNextConcretePosition(String value, int position,
+	 int getNextConcretePosition(String value, int position,
 			boolean forward) {
 		if (value == null) {
 			return -1;
@@ -743,9 +769,9 @@
 	 * 
 	 * @param node1
 	 * @param node2
-	 * @return
+	 * @return the node
 	 */
-	public Node getCommonAncestor(Node node1, Node node2) {
+	 public Node getCommonAncestor(Node node1, Node node2) {
 		if (node1 == null || node2 == null) {
 			return null;
 		}
@@ -764,7 +790,7 @@
 	 * 
 	 * @param p1
 	 * @param p2
-	 * @return
+	 * @return the nodeh
 	 */
 	public Node getCommonAncestor(IDOMPosition p1, IDOMPosition p2) {
 		Node n1 = p1.getContainerNode();
@@ -776,9 +802,9 @@
 	 * Get lowest ancestor of a 'node' which is block type.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the node
 	 */
-	public Node getBlockAncestor(Node node) {
+	 Node getBlockAncestor(Node node) {
 		if (!EditValidateUtil.validNode(node)) {
 			return null;
 		}
@@ -795,13 +821,17 @@
 	 * To see whether a node is block type.
 	 * 
 	 * @param node
-	 * @return
+	 * @return true if is a block node
 	 */
 	public static boolean isBlockNode(Node node) {
 		return !isInline(node);
 	}
 
-	public static boolean isTableCell(Node node) {
+	/**
+	 * @param node
+	 * @return true if is table cell
+	 */
+	static boolean isTableCell(Node node) {
 		if (node instanceof INodeNotifier) {
 			Object adapter = ((INodeNotifier) node)
 					.getAdapterFor(ICSSStyle.class);
@@ -817,8 +847,8 @@
 	/**
 	 * To see if a node's display type is inline.
 	 * 
-	 * @param node
-	 * @return
+	 * @param refNode 
+	 * @return true if is inline
 	 */
 	public static boolean isInline(Node refNode) {
 		Node node = refNode;
@@ -846,6 +876,10 @@
 		return false;
 	}
 
+	/**
+	 * @param node
+	 * @return true if is list item
+	 */
 	public static boolean isListItem(Node node) {
 		if (node instanceof INodeNotifier) {
 			Object adapter = ((INodeNotifier) node)
@@ -918,7 +952,8 @@
 	 * 
 	 * @param name
 	 * @param node
-	 * @return
+	 * @param ignoreCase 
+	 * @return true if is child
 	 */
 	public static boolean isChild(String name, Node node, boolean ignoreCase) {
 		if (node == null) {
@@ -942,7 +977,7 @@
 	 * 
 	 * @param ancestor
 	 * @param node
-	 * @return
+	 * @return true if is child
 	 */
 	public static boolean isChild(Node ancestor, Node node) {
 		if (node == null || ancestor == null) {
@@ -968,9 +1003,9 @@
 	 * Get next sibling node to position's container node.
 	 * 
 	 * @param position
-	 * @return
+	 * @return the node
 	 */
-	public Node getNextSibling(IDOMPosition position) {
+	Node getNextSibling(IDOMPosition position) {
 		if (position.isText()) {
 			return position.getContainerNode().getNextSibling();
 		}
@@ -981,9 +1016,9 @@
 	 * Get previous sibling node to position's container node.
 	 * 
 	 * @param position
-	 * @return
+	 * @return the node
 	 */
-	public Node getPreviousSibling(IDOMPosition position) {
+	Node getPreviousSibling(IDOMPosition position) {
 		if (position.isText()) {
 			return position.getContainerNode().getPreviousSibling();
 		}
@@ -994,9 +1029,9 @@
 	 * Get position's container node's parent.
 	 * 
 	 * @param position
-	 * @return
+	 * @return the parent node
 	 */
-	public Node getParent(IDOMPosition position) {
+	Node getParent(IDOMPosition position) {
 		if (position.isText()) {
 			return position.getContainerNode().getParentNode();
 		}
@@ -1008,7 +1043,7 @@
 	 * 
 	 * @param node
 	 * @param forward
-	 * @return
+	 * @return the node
 	 */
 	public Node getSibling(Node node, boolean forward) {
 		EditValidateUtil.validNode(node);
@@ -1023,7 +1058,7 @@
 	 * 
 	 * @param position
 	 * @param forward
-	 * @return
+	 * @return the node
 	 */
 	public Node getSibling(IDOMPosition position, boolean forward) {
 		if (forward) {
@@ -1037,9 +1072,9 @@
 	 * functions for future use.
 	 * 
 	 * @param position
-	 * @return
+	 * @return the size
 	 */
-	public int getSize(IDOMPosition position) {
+	int getSize(IDOMPosition position) {
 		EditValidateUtil.validPosition(position);
 		if (position.isText()) {
 			return ((Text) position.getContainerNode()).getLength();
@@ -1054,7 +1089,7 @@
 	 * Valid position and return text, if it contains text node.
 	 * 
 	 * @param position
-	 * @return
+	 * @return the text
 	 */
 	public Text getText(IDOMPosition position) {
 		if (position.isText()) {
@@ -1065,6 +1100,10 @@
 		return null;
 	}
 
+	/**
+	 * @param node
+	 * @return the document for  node
+	 */
 	public static Document getDocumentNode(Node node) {
 		if (node != null) {
 			return isDocument(node) ? (Document) node : node.getOwnerDocument();
@@ -1077,9 +1116,9 @@
 	 * it is empty, for delete operation, it could be deleted.
 	 * 
 	 * @param node
-	 * @return
+	 * @return true if node empty
 	 */
-	public static boolean isEmptyNode(Node node) {
+	static boolean isEmptyNode(Node node) {
 		if (node.getNodeType() == Node.TEXT_NODE) {
 			return isTransparentText(node);
 		}
@@ -1094,7 +1133,7 @@
 	 * To see whther a node is text node.
 	 * 
 	 * @param node
-	 * @return
+	 * @return true if the node is a text node
 	 */
 	public static boolean isText(Node node) {
 		return node != null && node.getNodeType() == Node.TEXT_NODE;
@@ -1104,17 +1143,12 @@
 	 * To see whether a node is Document node.
 	 * 
 	 * @param node
-	 * @return
+	 * @return true if the node is a doc node
 	 */
 	public static boolean isDocument(Node node) {
 		return node != null && node.getNodeType() == Node.DOCUMENT_NODE;
 	}
 
-    // TODO: dead?
-//	private static boolean isHead(Node node) {
-//		return node.getNodeName().equalsIgnoreCase(IHTMLConstants.TAG_HEAD);
-//	}
-
 	/**
 	 * Get style from parent node. from first paret 'firstF', we will traverse
 	 * the tree up untile reaching Document node, get all style node's, we may
@@ -1123,9 +1157,8 @@
 	 * 
 	 * @param children
 	 * @param firstF
-	 * @return
 	 */
-	public void assignFather(Vector children, Node firstF) {
+	void assignFather(Vector children, Node firstF) {
 		if (children.size() == 0) {
 			return;
 		}
@@ -1148,9 +1181,9 @@
 	 * 
 	 * @param model
 	 * @param pos
-	 * @return
+	 * @return the
 	 */
-	public Object getPosNode(IStructuredModel model, int pos) {
+	IndexedRegion getPosNode(IStructuredModel model, int pos) {
 		IndexedRegion inode = model.getIndexedRegion(pos);
 		return inode;
 	}
@@ -1158,11 +1191,11 @@
 	/**
 	 * If the pos is at right edge within container.
 	 * 
-	 * @param model
+	 * @param node
 	 * @param pos
-	 * @return
+	 * @return true is at right edge
 	 */
-	public boolean isAtRightMostWithin(Node node, int pos) {
+	boolean isAtRightMostWithin(Node node, int pos) {
 		return getNodeEndNameStartIndex(node) == pos;
 	}
 
@@ -1173,10 +1206,10 @@
 	 * 
 	 * @param container
 	 * @param refNode
-	 * @param forward
-	 * @return
+	 * @param forward  
+	 * @return the dom position
 	 */
-	public IDOMPosition createDomposition(Node container, Node refNode,
+	IDOMPosition createDomposition(Node container, Node refNode,
 			boolean forward) {
 		if (refNode == null) {
 			if (forward && container.hasChildNodes()) {
@@ -1193,7 +1226,12 @@
         return new DOMPosition(container, index);
 	}
 
-	public static DesignRange convertToDesignRange(IStructuredModel fModel,
+	/**
+	 * @param fModel
+	 * @param textSelection
+	 * @return the design range
+	 */
+	static DesignRange convertToDesignRange(IStructuredModel fModel,
 			TextSelection textSelection) {
 		int start = textSelection.getOffset();
 		int end = textSelection.getLength() + start;
@@ -1223,9 +1261,10 @@
 	 * otherwize, simply create position pointed to container's children list's
 	 * edge.
 	 * 
-	 * @param container
+	 * @param model
 	 * @param position
-	 * @return
+	 * @param adjust 
+	 * @return the dom position
 	 */
 	public IDOMPosition createDomposition(IDOMModel model, int position,
 			boolean adjust) {
@@ -1238,16 +1277,14 @@
 	 * otherwize, simply create position pointed to container's children list's
 	 * edge.
 	 * 
-	 * @param container
+	 * @param model
 	 * @param position
-	 * @return
+	 * @param adjust 
+	 * @return the dom position
 	 */
 	public IDOMPosition createDomposition1(IDOMModel model, int position,
 			boolean adjust) {
 		try {
-            // TODO: never read
-//			IMovementMediator validator = new InlineEditingNavigationMediator(
-//					new ActionData(ActionData.INLINE_EDIT, null));
 			// get the container
 			Object object = getPosNode(model, position);
 			if (object == null && position > 0) {
@@ -1301,7 +1338,7 @@
 	 * Calculate node's Indexed length in model.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the node length
 	 */
 	public static int getNodeLenth(Node node) {
 		if (node != null
@@ -1317,7 +1354,7 @@
 	 * indicated by '|'
 	 * 
 	 * @param node
-	 * @return
+	 * @return the start index
 	 */
 	public static int getNodeStartIndex(Node node) {
 		if (EditValidateUtil.validNode(node) && node instanceof IndexedRegion) {
@@ -1331,7 +1368,7 @@
 	 * indicated by '|'
 	 * 
 	 * @param node
-	 * @return
+	 * @return the end index
 	 */
 	public static int getNodeEndIndex(Node node) {
 		if (EditValidateUtil.validNode(node) && node instanceof IndexedRegion) {
@@ -1343,10 +1380,11 @@
 	/**
 	 * Get node at indexed position.
 	 * 
+	 * @param model 
 	 * @param position
-	 * @return
+	 * @return the node at position
 	 */
-	public static Node getNodeAt(IStructuredModel model, int position) {
+	static Node getNodeAt(IStructuredModel model, int position) {
 		try {
 			IndexedRegion region = model.getIndexedRegion(position);
 			if (region instanceof Node) {
@@ -1365,7 +1403,7 @@
 	 * the position is indicated by '|'
 	 * 
 	 * @param node
-	 * @return
+	 * @return the index
 	 */
 	public static int getNodeStartNameEndIndex(Node node) {
 		if (isText(node)) {
@@ -1399,7 +1437,7 @@
 	 * to pair with <a>, the function return -1.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the start index
 	 */
 	public static int getNodeEndNameStartIndex(Node node) {
 		if (isText(node)) {
@@ -1426,7 +1464,7 @@
 	 * To see if a node is <a/>style.
 	 * 
 	 * @param node
-	 * @return
+	 * @return the single region node
 	 */
 	public boolean isSingleRegionNode(Node node) {
 		if (getNodeEndNameStartIndex(node) == getNodeEndIndex(node)
@@ -1440,9 +1478,9 @@
 	 * To see if a node has child that is not transparent child only.
 	 * 
 	 * @param node
-	 * @return
+	 * @return true if node has transparent children
 	 */
-	public boolean hasNonTransparentChild(Node node) {
+	boolean hasNonTransparentChild(Node node) {
         NodeList children = node.getChildNodes();
         for (int i = 0, n = children.getLength(); i < n; i++) {
         	Object child = children.item(i);
@@ -1461,7 +1499,8 @@
 	 * To see if a node has child that is not transparent child only.
 	 * 
 	 * @param node
-	 * @return
+	 * @param excludes 
+	 * @return true if has transparent child
 	 */
 	public boolean hasNonTransparentChild(Node node, String[] excludes) {
 		if (!node.hasChildNodes()) {
@@ -1486,7 +1525,7 @@
 	 * To see whether tag has whitespace char.
 	 * 
 	 * @param node
-	 * @return
+	 * @return true if has whitespace neighbor
 	 */
 	public boolean hasWhitespaceNeighbor(Node node) {
 		node = getNeighbor(node, true);
@@ -1500,7 +1539,7 @@
 
 	/**
 	 * @param host
-	 * @return
+	 * @return true if host is a widget
 	 */
 	public static boolean isWidget(Object host) {
 		boolean result = false;
@@ -1525,15 +1564,22 @@
 	 * To combind whitespace chars, only one whitespace string should be create.
 	 * 
 	 * @param node
-	 * @return
+	 * @return true if node is  redundant whitespace
 	 */
-	public boolean isRedundantWightspaces(Node node) {
+	boolean isRedundantWightspaces(Node node) {
 		if (isTransparentText(node) && hasWhitespaceNeighbor(node)) {
 			return true;
 		}
         return false;
 	}
 
+	/**
+	 * @param node
+	 * @param names
+	 * @param ignoreCase
+	 * @return true if node has ancestors in the name list
+	 * TODO: bad practice
+	 */
 	public static boolean hasAncestor(Node node, String names[],
 			boolean ignoreCase) {
 		Assert.isTrue(names != null);
@@ -1553,7 +1599,7 @@
 	 * @param node
 	 * @param name
 	 * @param ignoreCase
-	 * @return
+	 * @return true if node has the named ancestor
 	 */
 	public static boolean hasAncestor(Node node, String name, boolean ignoreCase) {
 		Assert.isTrue(name != null);
@@ -1572,9 +1618,9 @@
 	 * To see if 'node' has direct ancestors that has names listed in 'name[]'
 	 * 
 	 * @param node
-	 * @param name
+	 * @param top
 	 * @param ignoreCase
-	 * @return
+	 * @return the list of ancestors
 	 */
 	public static List getAncestors(Node node, String top, boolean ignoreCase) {
 		List result = new ArrayList();
@@ -1598,7 +1644,6 @@
 	 * 
 	 * @param old
 	 * @param newNode
-	 * @return
 	 */
 	public static void copyChildren(Node old, Node newNode) {
 		Node child = old.getFirstChild();
@@ -1614,7 +1659,11 @@
 		}
 	}
 
-	public static boolean isElement(Node node) {
+	/**
+	 * @param node
+	 * @return true if node is an element
+	 */
+	private static boolean isElement(Node node) {
 		return node.getNodeType() == Node.ELEMENT_NODE;
 	}
 
@@ -1624,10 +1673,10 @@
 	 * 
 	 * @param ancestor
 	 * @param childrenNames
-	 * @param maxLevelToSearch:
+	 * @param maxLevelToSearch
 	 *            the max level from ancestor to the offspring in family tree.
 	 * @param ignoreCase
-	 * @return
+	 * @return the node
 	 */
 	public static Node getChild(Node ancestor, String childrenNames[],
 			int maxLevelToSearch, boolean ignoreCase) {
@@ -1660,12 +1709,12 @@
 	 * 
 	 * @param ancestor
 	 * @param childrenNames
-	 * @param maxLevelToSearch:
+	 * @param maxLevelToSearch
 	 *            the max level from ancestor to the offspring in family tree.
 	 * @param ignoreCase
-	 * @return
+	 * @return the node
 	 */
-	public static Node getChildDeferredNode(Node ancestor,
+	static Node getChildDeferredNode(Node ancestor,
 			String childrenNames[], int maxLevelToSearch, boolean ignoreCase) {
 		if (ancestor == null || maxLevelToSearch < 0) {
 			return null;
@@ -1688,6 +1737,10 @@
 		return null;
 	}
 
+	/**
+	 * @param node
+	 * @return if has tranparent node only
+	 */
 	public static boolean hasTransparentNodeOnly(Node node) {
 		NodeList children = node.getChildNodes();
 		for (int i = 0, n = children.getLength(); i < n; i++) {
@@ -1698,6 +1751,12 @@
 		return true;
 	}
 
+	/**
+	 * @param name
+	 * @param node
+	 * @param ignoreCase
+	 * @return the node
+	 */
 	public static Node getParent(String name, Node node, boolean ignoreCase) {
 		if (node == null) {
 			return null;
@@ -1749,6 +1808,12 @@
 		}
 	}
 
+	/**
+	 * @param tags
+	 * @param node
+	 * @param ignoreCase
+	 * @return the true if contains item
+	 */
 	public static boolean containItem(String[] tags, Node node,
 			boolean ignoreCase) {
 		if (ignoreCase) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditValidateUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditValidateUtil.java
index b6e48a0..46409de 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditValidateUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/EditValidateUtil.java
@@ -28,7 +28,7 @@
  * 
  * @author mengbo
  */
-public class EditValidateUtil {
+public final class EditValidateUtil {
 	private static final Logger _logger = PDPlugin
 			.getLogger(EditValidateUtil.class);
 
@@ -40,7 +40,7 @@
 	 * A valid position means container node, offset are all valid.
 	 * 
 	 * @param position
-	 * @return
+	 * @return true if the position is valid
 	 */
 	public static boolean validPosition(IDOMPosition position) {
 		try {
@@ -77,6 +77,10 @@
 		}
 	}
 
+	/**
+	 * @param position
+	 * @return true if position is valid
+	 */
 	public static boolean validPosition(DesignPosition position) {
 		try {
 			boolean result = true;
@@ -117,7 +121,7 @@
 	 * Valid node is TextNode and it's valid node.
 	 * 
 	 * @param node
-	 * @return
+	 * @return true if node is valid
 	 */
 	public static boolean validText(Node node) {
 		try {
@@ -146,7 +150,7 @@
 	 * A valid node is resided in the model tree
 	 * 
 	 * @param node
-	 * @return
+	 * @return true if node is valid
 	 */
 	public static boolean validNode(Node node) {
 		try {
@@ -177,7 +181,7 @@
 	 * util, it should be checked by some edit valid helper.
 	 * 
 	 * @param range
-	 * @return
+	 * @return true if range is valid
 	 */
 	public static boolean validRange(DOMRange range) {
 		try {
@@ -209,6 +213,11 @@
 		}
 	}
 
+	/**
+	 * @param text
+	 * @param index
+	 * @return true if the index is valid
+	 */
 	public static boolean validStringIndex(Node text, int index) {
 		try {
 			Assert.isTrue(index >= 0 && ((Text) text).getLength() >= index);
@@ -229,6 +238,12 @@
 		}
 	}
 
+	/**
+	 * @param text
+	 * @param index
+	 * @param offset
+	 * @return true if the index offset is valid
+	 */
 	public static boolean validStringIndexOffset(Node text, int index,
 			int offset) {
 		try {
@@ -252,8 +267,8 @@
 		}
 	}
 
-	public static void dumpPosition(String message, IDOMPosition position,
-			boolean forward) {
+//	private static void dumpPosition(String message, IDOMPosition position,
+//			boolean forward) {
 		// for future internal debug
 		// message(message);
 		// _logger.debug("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
@@ -300,60 +315,45 @@
 		// }
 		// }
 		// _logger.debug("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
-	}
+//	}
 	
-    // TODO: dead?
-//	private static int getContainerLength(Node node) {
-//		if (node.getNodeType() == Node.TEXT_NODE) {
-//			return ((Text) node).getLength();
-//		} else {
-//			if (node.hasChildNodes()) {
-//				return node.getChildNodes().getLength();
-//			} else {
-//				return 0;
-//			}
-//		}
-//	}
-
-    //TODO: dead?
-//	private static void message(String text) {
-//		// internal debug
-//		_logger.info("+++++ message:" + text);
-//	}
-
+	/**
+	 * @param pos
+	 * @param forward
+	 * @return true if the position if vallid for editing relative to forward (true) or backward  (false)
+	 */
 	public static boolean isValidForEditing(IDOMPosition pos, boolean forward) {
-//		try {
-			if (pos == null) {
-				return false;
-			}
-			if (pos.isText()) {
-				return true;
-			}
-            Node container = pos.getContainerNode();
-            // only head can't be edited
-            if (EditModelQuery.isChild(IHTMLConstants.TAG_HEAD, container,
-            		true)) {
-            	return false;
-            }
-            Node sibling = EditModelQuery.getInstance().getSibling(pos,
-            		forward);
-            if (sibling != null) {
-            	if (EditModelQuery.isText(sibling)) {
-            		return true;
-            	}
-            	Assert.isTrue(sibling.getLocalName() != null);
-            	if (EditModelQuery.UNREMOVEBLE_TAGS.contains(sibling
-            			.getLocalName().toLowerCase())) {
-            		return false;
-            	}
-            }
-            return true;
-        // TODO: not sure what was being caught here
-//		} catch (Exception e) {
-//			return false;
-//		}
+		if (pos == null) {
+			return false;
+		}
+		if (pos.isText()) {
+			return true;
+		}
+        Node container = pos.getContainerNode();
+        // only head can't be edited
+        if (EditModelQuery.isChild(IHTMLConstants.TAG_HEAD, container,
+        		true)) {
+        	return false;
+        }
+        Node sibling = EditModelQuery.getInstance().getSibling(pos,
+        		forward);
+        if (sibling != null) {
+        	if (EditModelQuery.isText(sibling)) {
+        		return true;
+        	}
+        	Assert.isTrue(sibling.getLocalName() != null);
+        	if (EditModelQuery.UNREMOVEBLE_TAGS.contains(sibling
+        			.getLocalName().toLowerCase())) {
+        		return false;
+        	}
+        }
+        return true;
 	}
 
+	/**
+	 * @param node
+	 * @return true if node is valid for editing
+	 */
 	public static boolean isValidForEditing(Node node) {
 		if (EditModelQuery.isChild(IHTMLConstants.TAG_HEAD, node, true)) {
 			return false;
@@ -361,6 +361,10 @@
 		return true;
 	}
 
+	private EditValidateUtil()
+	{
+	    // do nothing
+	}
 	// Reserved for inner use.
 	//
 	// private static void errorNotice()
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/IDOMPosition.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/IDOMPosition.java
index bbff706..fa3169d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/IDOMPosition.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/IDOMPosition.java
@@ -29,18 +29,33 @@
 	 * @param forward
 	 *            if true, same as getNextSiblingNode(), if false, same as
 	 *            getPreviousSiblingNode
-	 * @return
+	 * @return the sibling
 	 */
 	public Node getSibling(boolean forward);
 
+	/**
+	 * @return the next sibling node
+	 */
 	public Node getNextSiblingNode();
 
+	/**
+	 * @return the previous sibling node
+	 */
 	public Node getPreviousSiblingNode();
 
+	/**
+	 * @return the container node
+	 */
 	public Node getContainerNode();
 
+	/**
+	 * @return the offset
+	 */
 	public int getOffset();
 
+	/**
+	 * @return true if is text
+	 */
 	public boolean isText();
 
 	/**
@@ -52,7 +67,7 @@
 	 * 
 	 * @param original
 	 * @param replacement
-	 * @return
+	 * @return the dom position
 	 */
 	public IDOMPosition handleReplacement(Node original, Node replacement);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/IDOMRefPosition.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/IDOMRefPosition.java
index 0a57462..5a841df 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/IDOMRefPosition.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/IDOMRefPosition.java
@@ -24,7 +24,7 @@
 public interface IDOMRefPosition extends IDOMPosition {
 	/**
 	 * 
-	 * @return
+	 * @return the reference (wrapped) node
 	 */
 	public Node getReferenceNode();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/JSFValidatorSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/JSFValidatorSupport.java
deleted file mode 100644
index 9abec6e..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/JSFValidatorSupport.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.dom;
-
-import javax.xml.namespace.QName;
-
-import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.utils.BodyHelper;
-import org.eclipse.jst.pagedesigner.validation.caret.JSFRootContainerPositionRule;
-import org.w3c.dom.Document;
-
-/**
- * This is a temparary class, for automatically insert "view" and "form" tag
- * when user drag from palette those controls that need them. it is still pretty
- * hardcoded, in the future we may need some extendable mechanism.
- * 
- * @author mengbo
- * @version 1.5
- */
-public class JSFValidatorSupport {
-	static private QName _qnameView = new QName(ITLDConstants.URI_JSF_CORE,
-			IJSFConstants.TAG_VIEW);
-
-	static private QName _qnameForm = new QName(ITLDConstants.URI_JSF_HTML,
-			IJSFConstants.TAG_FORM);
-
-//	static private QName[] _views = new QName[] { _qnameView,
-//			new QName(IJMTConstants.URI_JSF_CORE, IJSFConstants.TAG_SUBVIEW) };
-
-	/**
-	 * If not inside a view/subview, then f:view will be created. If
-	 * generateHForm is true, then will also generate h:form is no one exists.
-	 * 
-	 * @param position
-	 * @param uri
-	 * @param tagName
-	 * @param generateHForm
-	 * @return
-	 */
-	public static IDOMPosition prepareInsertJSFComponent(IDOMPosition position,
-			String uri, String tagName, boolean generateHForm) {
-		position = prepareView(position, uri, tagName);
-		if (position == null) {
-			return null;
-		}
-
-		if (generateHForm) {
-			return prepareForm(position);
-		}
-        return position;
-	}
-
-	/**
-	 * @param position
-	 * @param uri
-	 * @param localname
-	 * @return
-	 */
-	public static IDOMPosition prepareInsertJSFComponent(IDOMPosition position,
-			String uri, String localname) {
-		return prepareInsertJSFComponent(position, uri, localname, false);
-	}
-
-	public static IDOMPosition prepareForm(IDOMPosition position) {
-		boolean hasform = ValidatorSupport.checkContainer(position, _qnameForm);
-		IDOMPosition newPosition = position;
-		if (!hasform) {
-			newPosition = ValidatorSupport
-					.insertContainer(position, _qnameForm);
-			if (newPosition == null) {
-				newPosition = position;
-			}
-		}
-		return newPosition;
-	}
-
-	/**
-	 * If there is no view created, create one; If view exists, the caret
-	 * movement rules will ensured the position is within view.
-	 * 
-	 * @param position
-	 * @return
-	 */
-	public static IDOMPosition prepareView(IDOMPosition position, String uri,
-			String localname) {
-		//Node view = null;
-		Document document = EditModelQuery.getDocumentNode(position
-				.getContainerNode());
-		if (JSFRootContainerPositionRule.getBasicContainer(document) == null) {
-			if (!(IJSFConstants.TAG_VIEW.equals(localname))) {
-				position = BodyHelper.insertBody(position, _qnameView, "f");
-			}
-		} else if (IJSFConstants.TAG_VIEW.equals(localname)) {
-			position = null;
-		}
-
-		return position;
-	}
-
-	/**
-	 * @param position
-	 * @return
-	 */
-	public static IDOMPosition prepareView(IDOMPosition position) {
-		return prepareView(position, null, null);
-	}
-
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/ValidatorSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/ValidatorSupport.java
index 04a3fb5..19fda90 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/ValidatorSupport.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/ValidatorSupport.java
@@ -13,6 +13,7 @@
 
 import javax.xml.namespace.QName;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jst.jsf.core.internal.tld.CMUtil;
 import org.eclipse.jst.pagedesigner.adapters.IBodyInfo;
 import org.eclipse.jst.pagedesigner.adapters.internal.BodyInfo;
@@ -32,11 +33,29 @@
  * @author mengbo
  * @version 1.5
  */
-public class ValidatorSupport {
+public class ValidatorSupport 
+{
+	/**
+	 * Equivalent to checkContainer(position new QName[]{qname}
+	 * 
+	 * @param position
+	 * @param qname
+	 * @return true if the tag identified by qname is found as a parent
+     * of position.
+	 */
 	public static boolean checkContainer(IDOMPosition position, QName qname) {
 		return checkContainer(position, new QName[] { qname });
 	}
 
+	/**
+	 * Check for any of the containers listed in qname starting from qname and working
+	 * up the DOM parent chain.
+	 * 
+	 * @param position
+	 * @param qname
+	 * @return true if one of the tags identified by qname is found as a parent
+	 * of position.
+	 */
 	public static boolean checkContainer(IDOMPosition position, QName qname[]) {
 		Node node = position.getContainerNode();
 		while (node != null) {
@@ -70,13 +89,25 @@
 		return false;
 	}
 
+	/**
+	 * @param position
+	 * @param container
+	 * @param customizationData 
+	 * @return the new dom position for the inserted container or null if could
+	 * not insert
+	 */
 	public static IDOMPosition insertContainer(IDOMPosition position,
-			QName container) {
-		TaglibPaletteDrawer category = PaletteItemManager.getCurrentInstance().findCategoryByURI(container.getNamespaceURI());
+			QName container, IAdaptable customizationData) {
+		final TaglibPaletteDrawer category = 
+		    PaletteItemManager.getCurrentInstance().findCategoryByURI
+		        (container.getNamespaceURI());
 		if (category != null){
-			TagToolPaletteEntry tagItem = category.getTagPaletteEntryByTagName(container.getLocalPart());
-			IDOMModel model = ((IDOMNode) position.getContainerNode()).getModel();
-			Element form = CommandUtil.excuteInsertion(tagItem, model, position);
+			final TagToolPaletteEntry tagItem = 
+			    category.getTagPaletteEntryByTagName(container.getLocalPart());
+			final IDOMModel model = 
+			    ((IDOMNode) position.getContainerNode()).getModel();
+			final Element form = CommandUtil.excuteInsertion
+			    (tagItem, model, position, customizationData);
 			if (form != null) {
 				DOMPosition pos = new DOMPosition(form, 0);
 				return pos;
@@ -85,7 +116,11 @@
         return null;
 	}
 
+	/**
+	 * @return the body info
+	 */
 	public static IBodyInfo getBodyInfo() {
+	    //TODO: change this to be meta-data driven.
 		return BodyInfo.getInstance();
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/html/ColStructure.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/html/ColStructure.java
index b2495a8..2f4f9c1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/html/ColStructure.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/html/ColStructure.java
@@ -15,32 +15,34 @@
  * @author mengbo
  * @version 1.5
  */
-public class ColStructure implements Comparable {
-	private int _column;
+/*package*/ class ColStructure implements Comparable {
+	private final int _column;
 
-	private int _colSpan;
+	private final int _colSpan;
 
+	/**
+	 * @param column
+	 * @param colSpan
+	 */
 	public ColStructure(int column, int colSpan) {
 		this._column = column;
 		this._colSpan = colSpan;
 	}
 
+	/**
+	 * @return the column span
+	 */
 	public int getColSpan() {
 		return _colSpan;
 	}
 
-	public void setColSpan(int colSpan) {
-		this._colSpan = colSpan;
-	}
-
+	/**
+	 * @return the column
+	 */
 	public int getColumn() {
 		return _column;
 	}
 
-	public void setColumn(int column) {
-		this._column = column;
-	}
-
 	public int compareTo(Object o) {
 		ColStructure cs = (ColStructure) o;
 		if (this._column > cs.getColumn()) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/html/TableUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/html/TableUtil.java
index 4edf306..70216e0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/html/TableUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dom/html/TableUtil.java
@@ -38,7 +38,7 @@
 	 * 
 	 * @param tr
 	 *            TR element in a table
-	 * @return
+	 * @return true if there is rowspan>1 cell in the tr
 	 */
 	public static boolean hasRowSpanElement(Element tr) {
 		List list = DOMUtil.getElementChildren(tr);
@@ -62,7 +62,7 @@
 	 * @param tr
 	 * @param index
 	 *            tr index in the DOM tree
-	 * @return
+	 * @return true if tr is affected by row span cell in the previous trs
 	 */
 	public static boolean isAffectedByRowSpan(List trList, Element tr, int index) {
 		Node parent = tr.getParentNode();
@@ -114,7 +114,7 @@
 	 * 
 	 * @param table
 	 * @param displayIndex
-	 * @return
+	 * @return the row index
 	 */
 	public static int countRowIndexInDOMTree(Element table, int displayIndex) {
 
@@ -148,7 +148,7 @@
 	 * @param table
 	 * @param sectionName
 	 *            child element name of table, like THEAD or TFOOT
-	 * @return
+	 * @return the row count in the section
 	 */
 	public static int countSectionRows(Element table, String sectionName) {
 		NodeList nodeList = table.getChildNodes();
@@ -182,7 +182,7 @@
 	/**
 	 * get tr cells list
 	 * 
-	 * @return
+	 * @return the list of tr cells
 	 */
 	public List[] getTrCellLists() {
 		return this._trCellLists;
@@ -191,9 +191,9 @@
 	/**
 	 * calculate row and column index for tr or td/th
 	 * 
-	 * @param element
+	 * @param node
 	 *            tr or td/th
-	 * @return
+	 * @return the position
 	 */
 	public TableChildElementPosition getPosition(Node node) {
 		TableChildElementPosition position = new TableChildElementPosition();
@@ -245,7 +245,7 @@
 	/**
 	 * get column count
 	 * 
-	 * @return
+	 * @return the column count
 	 */
 	public int getColumnCount() {
 		List[] lists = this._trCellLists;
@@ -267,7 +267,7 @@
 	 * 
 	 * @param columnIndex
 	 *            column index in a table
-	 * @return
+	 * @return true if there is columnspan>1 cell in the column
 	 */
 	public boolean hasColumnSpanElement(int columnIndex) {
 		List cells = getColumnCells(columnIndex);
@@ -290,7 +290,8 @@
 	 * privious columns
 	 * 
 	 * @param columnIndex
-	 * @return
+	 * @return true if the column has cell affected by column span cell in
+     * privious columns 
 	 */
 	public boolean isAffectedByColSpan(int columnIndex) {
 		int index = columnIndex;
@@ -309,7 +310,7 @@
 	 * get cells in the specified column of the table
 	 * 
 	 * @param columnIndex
-	 * @return
+	 * @return the column cells
 	 */
 	public List getColumnCells(int columnIndex) {
 		List list = new ArrayList();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/DTManager.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/DTManager.java
index 5db2db9..f62e2a5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/DTManager.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/DTManager.java
@@ -29,7 +29,7 @@
 public class DTManager {
 
 	private static DTManager instance;
-	private IDTInfoFactory dtInfoFactory;
+	private IDTInfoFactory _dtInfoFactory;
 
 	private DTManager() {
         // no external instantiation
@@ -108,10 +108,10 @@
 	 * @return An IDTInfoFactory instance for the specified namespace URI.
 	 */
 	protected IDTInfoFactory getDTInfoFactory(String nsURI) {
-		if (dtInfoFactory == null) {
-			dtInfoFactory = new DefaultDTInfoFactory();
+		if (_dtInfoFactory == null) {
+			_dtInfoFactory = new DefaultDTInfoFactory();
 		}
-		return dtInfoFactory;
+		return _dtInfoFactory;
 	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/DTHTMLOutputRenderer.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/DTHTMLOutputRenderer.java
index c8454e6..b546750 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/DTHTMLOutputRenderer.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/DTHTMLOutputRenderer.java
@@ -84,7 +84,7 @@
 			String opID = operation.getId();
 			String[] params = getParamsArray(operation);
 			currentTransformOperation =
-				TransformOperationFactory.getInstance().getTransformOperation(opID, params, dtInfo.getTrait());
+				TransformOperationFactory.getInstance().getTransformOperation(opID, params);
 			if (currentTransformOperation != null) {
 				transformer.appendTransformOperation(currentTransformOperation);
 				EList childOperations = operation.getOperations();
@@ -108,7 +108,7 @@
 			String opID = operation.getId();
 			String[] params = getParamsArray(operation);
 			currentTransformOperation =
-				TransformOperationFactory.getInstance().getTransformOperation(opID, params, dtInfo.getTrait());
+				TransformOperationFactory.getInstance().getTransformOperation(opID, params);
 			if (currentTransformOperation != null) {
 				parentOperation.appendChildOperation(currentTransformOperation);
 				EList childOperations = operation.getOperations();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/DTTagConverterDecorator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/DTTagConverterDecorator.java
index f292dbd..59d6683 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/DTTagConverterDecorator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/internal/DTTagConverterDecorator.java
@@ -6,13 +6,22 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    Ian Trimble - initial API and implementation
+ *    Oracle Corporation - initial API and implementation
  *******************************************************************************/ 
 package org.eclipse.jst.pagedesigner.dtmanager.converter.internal;
 
+import java.net.URL;
+
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jst.jsf.common.metadata.Trait;
 import org.eclipse.jst.jsf.common.metadata.internal.IImageDescriptorProvider;
+import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider;
+import org.eclipse.jst.jsf.common.metadata.internal.IResourceURLProvider;
 import org.eclipse.jst.pagedesigner.converter.IConverterFactory;
 import org.eclipse.jst.pagedesigner.converter.ITagConverter;
 import org.eclipse.jst.pagedesigner.dtmanager.DTManager;
@@ -33,16 +42,17 @@
  */
 public class DTTagConverterDecorator implements ITagConverterDecorator {
 
-	private static final String DECORATE_INFO_ID_DESIGN = "vpd-decorate-design";
-	private static final String DECORATE_INFO_ID_PREVIEW = "vpd-decorate-preview";
+	private static final String DECORATE_INFO_ID_DESIGN = "vpd-decorate-design"; //$NON-NLS-1$
+	private static final String DECORATE_INFO_ID_PREVIEW = "vpd-decorate-preview"; //$NON-NLS-1$
+	private static final String MD_PLUGIN_LOCATION = "$metadata-plugin-location$"; //$NON-NLS-1$
 
 	/*
 	 * (non-Javadoc)
-	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.internal.provisional.ITagConverterDecorator#decorate(org.eclipse.jst.pagedesigner.converter.ITagConverter)
+	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.ITagConverterDecorator#decorate(org.eclipse.jst.pagedesigner.converter.ITagConverter)
 	 */
 	public void decorate(ITagConverter tagConverter) {
 		if (!(tagConverter instanceof DTTagConverter)) {
-			throw new IllegalArgumentException("ITagConverter argument must be an instance of DTTagConverter");
+			throw new IllegalArgumentException("ITagConverter argument must be an instance of DTTagConverter"); //$NON-NLS-1$
 		}
 		DTTagConverter dtTagConverter = (DTTagConverter)tagConverter;
 
@@ -79,7 +89,7 @@
 					setNonVisual(dtTagConverter, dtInfo, tdInfo.getNonVisualImagePath());
 				}
 				if (tdInfo.isResolveChildText()) {
-					resolveChildText(dtTagConverter.getResultElement());
+					resolveChildText(dtTagConverter.getResultElement(), dtInfo);
 				}
 				if (tdInfo.isSetNonVisualChildElements()) {
 					setNonVisualChildElements(dtTagConverter, srcElement);
@@ -91,7 +101,7 @@
 				if (resAttrValue != null) {
 					String attributeName = resAttrValue.getAttributeName();
 					if (attributeName != null && attributeName.length() > 0) {
-						resolveAttributeValue(dtTagConverter.getResultElement(), attributeName);
+						resolveAttributeValue(dtTagConverter.getResultElement(), attributeName, dtInfo);
 					}
 				}
 			}
@@ -104,9 +114,9 @@
 	 * @param dtTagConverter DTTagConverter instance.
 	 */
 	protected void createUnknownTagRepresentation(DTTagConverter dtTagConverter) {
-		Element element = dtTagConverter.createElement("span");
-		element.setAttribute("style", "color:red;font-weight:bold;");
-		Text text = dtTagConverter.createText("<" + dtTagConverter.getHostElement().getTagName() + "/>");
+		Element element = dtTagConverter.createElement("span"); //$NON-NLS-1$
+		element.setAttribute("style", "color:red;font-weight:bold;"); //$NON-NLS-1$ //$NON-NLS-2$
+		Text text = dtTagConverter.createText("<" + dtTagConverter.getHostElement().getTagName() + "/>"); //$NON-NLS-1$ //$NON-NLS-2$
 		element.appendChild(text);
 		dtTagConverter.setResultElement(element);
 		dtTagConverter.setWidget(true);
@@ -136,8 +146,9 @@
 	 * 
 	 * @param srcElement Source Element for which child Text Node EL resolution
 	 * is to be performed.
+	 * @param dtInfo IDTInfo instance.
 	 */
-	protected void resolveChildText(Element srcElement) {
+	protected void resolveChildText(Element srcElement, IDTInfo dtInfo) {
 		if (srcElement != null) {
 			NodeList childNodes = srcElement.getChildNodes();
 			for (int i = 0; i < childNodes.getLength(); i++) {
@@ -146,8 +157,13 @@
 					Text textNode = (Text)childNode;
 					String textNodeValue = textNode.getNodeValue();
 					try {
-						String newTextNodeValue = (String)PageExpressionContext.getCurrent().evaluateExpression(textNodeValue, String.class, null);
-						if (!textNodeValue.equals(newTextNodeValue)) {
+						String newTextNodeValue;
+						if (textNodeValue.contains(MD_PLUGIN_LOCATION)) {
+							newTextNodeValue = resolveMDPluginLocation(textNodeValue, dtInfo);
+						} else {
+							newTextNodeValue = (String)PageExpressionContext.getCurrent().evaluateExpression(textNodeValue, String.class, null);
+						}
+						if (newTextNodeValue != null && !textNodeValue.equals(newTextNodeValue)) {
 							textNode.setNodeValue(newTextNodeValue);
 						}
 					} catch(Exception ex) {
@@ -165,15 +181,38 @@
 	 * @param srcElement Source Element instance.
 	 * @param attributeName Name of attribute for which the value should be
 	 * resolved.
+	 * @param dtInfo IDTInfo instance.
 	 */
-	protected void resolveAttributeValue(Element srcElement, String attributeName) {
+	protected void resolveAttributeValue(Element srcElement, String attributeName, IDTInfo dtInfo) {
 		if (srcElement != null) {
-			String oldAttributeValue = srcElement.getAttribute(attributeName);
+			Element targetElement = srcElement;
+			String targetAttributeName = attributeName;
+			//determine if attributeName is XPath and re-target as appropriate
+			if (attributeName.contains("/")) { //$NON-NLS-1$
+				int lastSlashPos = attributeName.lastIndexOf("/"); //$NON-NLS-1$
+				String xPathExpression = attributeName.substring(0, lastSlashPos);
+				XPath xPath = XPathFactory.newInstance().newXPath();
+				try {
+					Object resultObject = xPath.evaluate(xPathExpression, srcElement, XPathConstants.NODE);
+					if (resultObject instanceof Element) {
+						targetElement = (Element)resultObject;
+						targetAttributeName = attributeName.substring(lastSlashPos + 1);
+					}
+				} catch(XPathExpressionException xee) {
+					//could not evaluate - leave targetElement and targetAttributeName unchanged
+				}
+			}
+			String oldAttributeValue = targetElement.getAttribute(targetAttributeName);
 			if (oldAttributeValue != null && oldAttributeValue.length() > 0) {
 				try {
-					String newAttributeValue = (String)PageExpressionContext.getCurrent().evaluateExpression(oldAttributeValue, String.class, null);
-					if (!oldAttributeValue.equals(newAttributeValue)) {
-						srcElement.setAttribute(attributeName, newAttributeValue);
+					String newAttributeValue;
+					if (oldAttributeValue.contains(MD_PLUGIN_LOCATION)) {
+						newAttributeValue = resolveMDPluginLocation(oldAttributeValue, dtInfo);
+					} else {
+						newAttributeValue = (String)PageExpressionContext.getCurrent().evaluateExpression(oldAttributeValue, String.class, null);
+					}
+					if (newAttributeValue != null && !oldAttributeValue.equals(newAttributeValue)) {
+						targetElement.setAttribute(targetAttributeName, newAttributeValue);
 					}
 				} catch(Exception ex) {
 					//ignore - could not resolve, do not change existing value
@@ -183,13 +222,38 @@
 	}
 
 	/**
+	 * Resolves any instance of MD_PLUGIN_LOCATION in input String.
+	 * 
+	 * @param input Input String.
+	 * @param dtInfo IDTInfo instance.
+	 * @return Input String with any instance of MD_PLUGIN_LOCATION resolved.
+	 */
+	protected String resolveMDPluginLocation(String input, IDTInfo dtInfo) {
+		String output = input;
+		if (input != null && input.contains(MD_PLUGIN_LOCATION)) {
+			int tokenStart = input.indexOf(MD_PLUGIN_LOCATION);
+			int tokenEnd = tokenStart + MD_PLUGIN_LOCATION.length();
+			String prefix = input.substring(0, tokenStart);
+			String suffix = input.substring(tokenEnd);
+			Trait trait = dtInfo.getTrait();
+			IMetaDataSourceModelProvider mdSourceModelProvider = trait.getSourceModelProvider();
+			IResourceURLProvider resourceURLProvider = (IResourceURLProvider)mdSourceModelProvider.getAdapter(IResourceURLProvider.class);
+			URL url = resourceURLProvider.getResourceURL("/META-INF/"); //$NON-NLS-1$
+			String resolvedToken = url.toExternalForm();
+			resolvedToken = resolvedToken.substring(0, resolvedToken.length() - 10);
+			output = prefix + resolvedToken + suffix;
+		}
+		return output;
+	}
+
+	/**
 	 * Sets DTTagConverter instance as non-visual as HTML and sets the
 	 * ImageDescriptor instance that DTTagConverter will use to return an Image
 	 * for rendering.
 	 * 
 	 * @param dtTagConverter DTTagConverter instance.
 	 * @param dtInfo IDTInfo instance.
-	 * @param imagePath Image path, relative to declaring plugin.
+	 * @param imagePath Image path, relative to declaring plug-in.
 	 */
 	protected void setNonVisual(DTTagConverter dtTagConverter, IDTInfo dtInfo, String imagePath) {
 		dtTagConverter.setVisualByHTML(false);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/AbstractTransformOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/AbstractTransformOperation.java
index 48f1a80..82b7c0b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/AbstractTransformOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/AbstractTransformOperation.java
@@ -14,6 +14,8 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
+import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.ITagConverterContext;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.ITransformOperation;
 import org.w3c.dom.Element;
@@ -40,6 +42,56 @@
 	 */
 	protected List childOperations;
 
+	private String[] params;
+
+	private String id = "<not set>";
+	
+	/**
+	 * Zero-argument constructor
+	 */
+	public AbstractTransformOperation(){
+		//
+	}
+	
+	/**
+	 * Called by TransformOperationFactory
+	 * @param params for the operation
+	 */
+	void setParameters(String[] params) {
+		if (params != null) {
+			this.params = new String[params.length];
+			System.arraycopy(params, 0, this.params, 0, params.length);
+		}
+	}
+	
+	/**
+	 * @return parameters for the operation
+	 */
+	protected String[] getParameters(){
+		return params;
+	}
+	
+	/**
+	 * Called by TransformOperationFactory
+	 * @param id for the operation
+	 */
+	void setTransformOperationID(String id){
+		this.id = id;
+	}
+	
+	/**
+	 * @return id for the operation
+	 */
+	protected String getTransformOperationID(){
+		return id;
+	}
+	
+	/**
+	 * @return Logger
+	 */
+	protected Logger getLog() {
+		return PDPlugin.getLogger(TransformOperationFactory.class);
+	}
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.ITransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
@@ -160,7 +212,7 @@
 			Node curNode = childNodes.item(i);
 			if (curNode.getNodeType() == Node.ELEMENT_NODE) {
 				String curNodeName = curNode.getLocalName();
-				if (curNode != null && curNodeName.equals(tagName)) {
+				if (curNodeName != null && curNodeName.equals(tagName)) {
 					childElements.add(curNode);
 				}
 			}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/TransformOperationFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/TransformOperationFactory.java
index 363dc58..0c8e6ed 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/TransformOperationFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/TransformOperationFactory.java
@@ -10,118 +10,119 @@
  *******************************************************************************/ 
 package org.eclipse.jst.pagedesigner.dtmanager.converter.operations;
 
-import org.eclipse.jst.jsf.common.metadata.Trait;
-import org.eclipse.jst.jsf.common.metadata.internal.IClassLoaderProvider;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.InvalidRegistryObjectException;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
+import org.eclipse.jst.pagedesigner.IJMTConstants;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.ITransformOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.AppendChildElementOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.AppendChildTextFromXPathOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.AppendChildTextOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.ConvertAttributeToTextOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CopyAllAttributesOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CopyAttributeOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CopyChildrenOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CreateAttributeFromXPathOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CreateAttributeOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.CreateElementOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.IfNotOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.IfOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.IterateOverElementsOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.MakeParentElementCurrentOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.RemoveAttributeOperation;
-import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.RenameAttributeOperation;
+import org.osgi.framework.Bundle;
 
 /**
- * Factory responsible for producing ITransformOperation instances from a known
- * set.
- * 
+ * Factory responsible for producing {@link org.eclipse.jst.pagedesigner.dtmanager.converter.ITransformOperation} instances from the <br>
+ * <code>org.eclipse.jst.pagedesigner.pageDesignerExtension.tagTransformOperation</code> extensions 
+ * <br>
  * <p><b>Provisional API - subject to change</b></p>
  * 
  * @author Ian Trimble - Oracle
  */
-public class TransformOperationFactory {
-
+public final class TransformOperationFactory {
 	/**
 	 * AppendChildElementOperation
 	 */
-	public static final String OP_AppendChildElementOperation = "AppendChildElementOperation";
+	public static final String OP_AppendChildElementOperation = PDPlugin.getPluginId()+".AppendChildElementOperation"; //$NON-NLS-1$
 	/**
 	 * AppendChildTextFromXPathOperation
 	 */
-	public static final String OP_AppendChildTextFromXPathOperation = "AppendChildTextFromXPathOperation";
+	public static final String OP_AppendChildTextFromXPathOperation = PDPlugin.getPluginId()+".AppendChildTextFromXPathOperation"; //$NON-NLS-1$
 	/**
 	 * AppendChildTextOperation
 	 */
-	public static final String OP_AppendChildTextOperation = "AppendChildTextOperation";
+	public static final String OP_AppendChildTextOperation = PDPlugin.getPluginId()+".AppendChildTextOperation"; //$NON-NLS-1$
 	/**
 	 * ConvertAttributeToTextOperation
 	 */
-	public static final String OP_ConvertAttributeToTextOperation = "ConvertAttributeToTextOperation";
+	public static final String OP_ConvertAttributeToTextOperation = PDPlugin.getPluginId()+".ConvertAttributeToTextOperation"; //$NON-NLS-1$
 	/**
 	 * CopyAllAttributesOperation
 	 */
-	public static final String OP_CopyAllAttributesOperation = "CopyAllAttributesOperation";
+	public static final String OP_CopyAllAttributesOperation = PDPlugin.getPluginId()+".CopyAllAttributesOperation"; //$NON-NLS-1$
 	/**
 	 * CopyAttributeOperation
 	 */
-	public static final String OP_CopyAttributeOperation = "CopyAttributeOperation";
+	public static final String OP_CopyAttributeOperation = PDPlugin.getPluginId()+".CopyAttributeOperation"; //$NON-NLS-1$
+	/**
+	 * CopyAttributeWithRenameOperation
+	 */
+	public static final String OP_CopyAttributeWithRenameOperation = PDPlugin.getPluginId()+".CopyAttributeWithRenameOperation"; //$NON-NLS-1$
 	/**
 	 * CopyChildrenOperation
 	 */
-	public static final String OP_CopyChildrenOperation = "CopyChildrenOperation";
+	public static final String OP_CopyChildrenOperation = PDPlugin.getPluginId()+".CopyChildrenOperation"; //$NON-NLS-1$
 	/**
 	 * CreateAttributeFromXPathOperation
 	 */
-	public static final String OP_CreateAttributeFromXPathOperation = "CreateAttributeFromXPathOperation";
+	public static final String OP_CreateAttributeFromXPathOperation = PDPlugin.getPluginId()+".CreateAttributeFromXPathOperation"; //$NON-NLS-1$
 	/**
 	 * CreateAttributeOperation
 	 */
-	public static final String OP_CreateAttributeOperation = "CreateAttributeOperation";
+	public static final String OP_CreateAttributeOperation = PDPlugin.getPluginId()+".CreateAttributeOperation"; //$NON-NLS-1$
 	/**
 	 * CreateElementOperation
 	 */
-	public static final String OP_CreateElementOperation = "CreateElementOperation";
+	public static final String OP_CreateElementOperation = PDPlugin.getPluginId()+".CreateElementOperation"; //$NON-NLS-1$
 	/**
 	 * CustomTransformOperation
 	 */
-	public static final String OP_CustomTransformOperation = "CustomTransformOperation";
+	public static final String OP_CustomTransformOperation = PDPlugin.getPluginId()+".CustomTransformOperation"; //$NON-NLS-1$
 	/**
 	 * IfNotOperation
 	 */
-	public static final String OP_IfNotOperation = "IfNotOperation";
+	public static final String OP_IfNotOperation = PDPlugin.getPluginId()+".IfNotOperation"; //$NON-NLS-1$
 	/**
 	 * IfOperation
 	 */
-	public static final String OP_IfOperation = "IfOperation";
+	public static final String OP_IfOperation = PDPlugin.getPluginId()+".IfOperation"; //$NON-NLS-1$
 	/**
 	 * IterateOverElementsOperation
 	 */
-	public static final String OP_IterateOverElementsOperation = "IterateOverElementsOperation";
+	public static final String OP_IterateOverElementsOperation = PDPlugin.getPluginId()+".IterateOverElementsOperation"; //$NON-NLS-1$
 	/**
 	 * MakeParentElementCurrentOperation
 	 */
-	public static final String OP_MakeParentElementCurrentOperation = "MakeParentElementCurrentOperation";
+	public static final String OP_MakeParentElementCurrentOperation = PDPlugin.getPluginId()+".MakeParentElementCurrentOperation"; //$NON-NLS-1$
 	/**
 	 * RemoveAttributeOperation
 	 */
-	public static final String OP_RemoveAttributeOperation = "RemoveAttributeOperation";
+	public static final String OP_RemoveAttributeOperation = PDPlugin.getPluginId()+".RemoveAttributeOperation"; //$NON-NLS-1$
 	/**
 	 * RenameAttributeOperation
 	 */
-	public static final String OP_RenameAttributeOperation = "RenameAttributeOperation";
+	public static final String OP_RenameAttributeOperation = PDPlugin.getPluginId()+".RenameAttributeOperation"; //$NON-NLS-1$
 
 	private static TransformOperationFactory instance;
 
 	private Logger log = PDPlugin.getLogger(TransformOperationFactory.class);
+	
+	private Map<String, Class> _tagTransformOpsRegistry;
 
 	/**
-	 * Instaniates an instance.
+	 * Instantiates an instance.
 	 */
 	private TransformOperationFactory() {
 		//no external instantiation
+		
+		//read extensions
+		readAllTagTransformOperations();
 	}
 
+	
 	/**
 	 * Gets the singleton instance.
 	 * 
@@ -138,172 +139,72 @@
 	 * Gets an ITransformOperation instance for the specified operation ID and
 	 * parameters.
 	 * 
-	 * @param opID Operation ID.
-	 * @param params Parameter array.
-	 * @return ITransformOperation instance (may be null).
+	 * @param opID - the plugin-qualified Operation extension ID.
+	 * @param params - array of String parameters
+	 * @return ITransformOperation
 	 */
 	public ITransformOperation getTransformOperation(String opID, String[] params) {
-		return getTransformOperation(opID, params, null);
+		Class opClass = null;
+		try {
+			opClass = _tagTransformOpsRegistry.get(opID);
+			if (opClass != null) {
+				Object opObject = opClass.newInstance();
+				if (opObject instanceof AbstractTransformOperation) {
+					((AbstractTransformOperation)opObject).setParameters(params);
+					((AbstractTransformOperation)opObject).setTransformOperationID(opID);			
+					return (AbstractTransformOperation)opObject;
+				}
+				log.error("Warning.TransformOperationFactory.NotAbstractTransformOperation", opClass.getName()); //$NON-NLS-1$
+			} else {
+				log.error("Warning.TransformOperationFactory.ExtensionNotFound", opID); //$NON-NLS-1$
+			}		
+		} catch(IllegalAccessException iae) {
+			log.error("Warning.TransformOperationFactory.IllegalAccess", opClass.getName(), iae); //$NON-NLS-1$
+		} catch(InstantiationException ie) {
+			log.error("Warning.TransformOperationFactory.Instantiation", opClass.getName(), ie); //$NON-NLS-1$
+		}
+		return null;
 	}
-
+	
 	/**
-	 * Gets an ITransformOperation instance for the specified operation ID and
-	 * parameters.
-	 * 
-	 * @param opID Operation ID.
-	 * @param params Parameter array.
-	 * @param trait Trait instance used for classloading of custom operations.
-	 * @return ITransformOperation instance (may be null).
+	 * Reads the custom tag transform operations from WPE registry
 	 */
-	public ITransformOperation getTransformOperation(String opID, String[] params, Trait trait) {
-		ITransformOperation operation = null;
-		if (opID.equals(OP_AppendChildElementOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else if (params.length < 2) {
-				String elementName = params[0];
-				operation = new AppendChildElementOperation(elementName);
-			} else {
-				String elementName = params[0];
-				boolean makeChildCurrent = Boolean.valueOf(params[1]).booleanValue();
-				operation = new AppendChildElementOperation(elementName, makeChildCurrent);
-			}
-		} else if (opID.equals(OP_AppendChildTextFromXPathOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String xPathExpression = params[0];
-				operation = new AppendChildTextFromXPathOperation(xPathExpression);
-			}
-		} else if (opID.equals(OP_AppendChildTextOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String content = params[0];
-				operation = new AppendChildTextOperation(content);
-			}
-		} else if (opID.equals(OP_ConvertAttributeToTextOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else if (params.length < 2) {
-				String attrName = params[0];
-				operation = new ConvertAttributeToTextOperation(attrName);
-			} else {
-				String attrName = params[0];
-				boolean removeAttr = Boolean.valueOf(params[1]).booleanValue();
-				operation = new ConvertAttributeToTextOperation(attrName, removeAttr);
-			}
-		} else if (opID.equals(OP_CopyAllAttributesOperation)) {
-			operation = new CopyAllAttributesOperation();
-		} else if (opID.equals(OP_CopyAttributeOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else if (params.length < 3) {
-				String attrName = params[0];
-				operation = new CopyAttributeOperation(attrName);
-			} else {
-				String attrName = params[0];
-				boolean create = Boolean.valueOf(params[1]).booleanValue();
-				String newAttrValue = params[2];
-				operation = new CopyAttributeOperation(attrName, create, newAttrValue);
-			}
-		} else if (opID.equals(OP_CopyChildrenOperation)) {
-			operation = new CopyChildrenOperation();
-		} else if (opID.equals(OP_CreateAttributeFromXPathOperation)) {
-			if (params.length < 2) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String attrName = params[0];
-				String xPathExpression = params[1];
-				operation = new CreateAttributeFromXPathOperation(attrName, xPathExpression);
-			}
-		} else if (opID.equals(OP_CreateAttributeOperation)) {
-			if (params.length < 2) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String attrName = params[0];
-				String attrValue = params[1];
-				operation = new CreateAttributeOperation(attrName, attrValue);
-			}
-		} else if (opID.equals(OP_CreateElementOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String elementName = params[0];
-				operation = new CreateElementOperation(elementName);
-			}
-		} else if (opID.equals(OP_CustomTransformOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String className = params[0];
-				if (trait == null) {
-					log.error("Warning.TransformOperationFactory.ClassNotFound", className);
-				} else {
-					try {
-						IClassLoaderProvider classLoaderProvider = (IClassLoaderProvider)trait.getSourceModelProvider().getAdapter(IClassLoaderProvider.class);
-						if (classLoaderProvider != null) {
-							Class opClass = classLoaderProvider.loadClass(className);
-							if (opClass != null) {
-								Object opObject = opClass.newInstance();
-								if (opObject instanceof ITransformOperation) {
-									operation = (ITransformOperation)opObject;
-								} else {
-									log.error("Warning.TransformOperationFactory.NotITransformOperation", className);
-								}
-							} else {
-								log.error("Warning.TransformOperationFactory.ClassNotFound", className);
-							}
-						}
-					} catch(IllegalAccessException iae) {
-						log.error("Warning.TransformOperationFactory.IllegalAccess", className, iae);
-					} catch(InstantiationException ie) {
-						log.error("Warning.TransformOperationFactory.Instantiation", className, ie);
-					}
+	private void readAllTagTransformOperations() {
+		try {
+			_tagTransformOpsRegistry = new HashMap<String, Class>();
+			IExtensionPoint point = Platform.getExtensionRegistry().getExtensionPoint(PDPlugin.getPluginId(), IJMTConstants.EXTENSION_POINT_PAGEDESIGNER);
+			IExtension[] extensions = point.getExtensions();
+			for (int i=0;i < extensions.length;i++){
+				IExtension ext = extensions[i];
+				for (int j=0;j < ext.getConfigurationElements().length;j++){
+					if (ext.getConfigurationElements()[j].getName()
+							.equals(IJMTConstants.TAG_TRANSFORM_OPERATION)) {							
+						registerTransformOperation(ext.getConfigurationElements()[j]);					
+					}				
 				}
 			}
-		} else if (opID.equals(OP_IfNotOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String xPathExpression = params[0];
-				operation = new IfNotOperation(xPathExpression);
-			}
-		} else if (opID.equals(OP_IfOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String xPathExpression = params[0];
-				operation = new IfOperation(xPathExpression);
-			}
-		} else if (opID.equals(OP_IterateOverElementsOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String xPathExpression = params[0];
-				operation = new IterateOverElementsOperation(xPathExpression);
-			}
-		} else if (opID.equals(OP_MakeParentElementCurrentOperation)) {
-			operation = new MakeParentElementCurrentOperation();
-		} else if (opID.equals(OP_RemoveAttributeOperation)) {
-			if (params.length < 1) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String attrName = params[0];
-				operation = new RemoveAttributeOperation(attrName);
-			}
-		} else if (opID.equals(OP_RenameAttributeOperation)) {
-			if (params.length < 2) {
-				log.error("Warning.TransformOperationFactory.TooFewParameters", opID);
-			} else {
-				String oldAttrName = params[0];
-				String newAttrName = params[1];
-				operation = new RenameAttributeOperation(oldAttrName, newAttrName);
-			}
-		} else {
-			log.error("Warning.TransformOperationFactory.UnknownOperationID", opID);
+		} catch (InvalidRegistryObjectException e) {
+			log.error("Warning.TransformOperationFactory.RegistryError", PDPlugin.getPluginId()+IJMTConstants.EXTENSION_POINT_PAGEDESIGNER+"."+IJMTConstants.TAG_TRANSFORM_OPERATION, e); //$NON-NLS-1$ //$NON-NLS-2$
 		}
-		return operation;
 	}
 
+	private void registerTransformOperation(final IConfigurationElement element) {
+	
+		final Bundle bundle = Platform.getBundle(element.getContributor().getName());        
+		final String id = element.getContributor().getName()+"."+element.getAttribute("id"); //$NON-NLS-1$ //$NON-NLS-2$
+        if (bundle != null) {
+            try {
+                final Class transformClass = bundle.loadClass(element.getAttribute("class"));                 //$NON-NLS-1$
+                // Not checking instance type here.  Class gets checked as ITransformOperation at 
+                //instantiation time...  
+                //best to log error then rather than now.
+                _tagTransformOpsRegistry.put(id, transformClass);
+            }
+            catch (Exception e) {
+                log.error("Warning.TransformOperationFactory.CannotLoadOpClass",id,  e);  //$NON-NLS-1$
+            }
+        }		
+	}
+	
+	
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildElementOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildElementOperation.java
index dd03f01..37178ef 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildElementOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildElementOperation.java
@@ -10,6 +10,7 @@
  *******************************************************************************/ 
 package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 
@@ -26,35 +27,24 @@
 public class AppendChildElementOperation extends AbstractTransformOperation {
 
 	private String tagName;
-	private boolean makeChildCurrent;
-
-	/**
-	 * Constructs an instance with the specified tag name, and defaults to
-	 * making the new child Element current.
-	 * 
-	 * @param tagName Name of child Element to be created.
-	 */
-	public AppendChildElementOperation(String tagName) {
-		this(tagName, true);
-	}
-
-	/**
-	 * Constructs an instance with the specified tag name and optionally makes
-	 * the new child Element current.
-	 * 
-	 * @param tagName Name of child Element to be created.
-	 * @param makeChildCurrent If true, make new child Element current.
-	 */
-	public AppendChildElementOperation(String tagName, boolean makeChildCurrent) {
-		this.tagName = tagName;
-		this.makeChildCurrent = makeChildCurrent;
-	}
+	private boolean makeChildCurrent = true;
 
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 1) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		} else if (getParameters().length < 2) {
+			tagName = getParameters()[0];
+		} else {
+			tagName = getParameters()[0];
+			makeChildCurrent = Boolean.valueOf(getParameters()[1]).booleanValue();			
+		}
+		
+		Assert.isNotNull(tagName);
 		Element element = null;
 		if (tagConverterContext != null && curElement != null && tagName != null && tagName.length() > 0) {
 			Element childElement = tagConverterContext.createElement(tagName);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildTextFromXPathOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildTextFromXPathOperation.java
index f20d608..b0a7391 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildTextFromXPathOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildTextFromXPathOperation.java
@@ -15,6 +15,7 @@
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 import org.w3c.dom.Text;
@@ -33,21 +34,19 @@
 
 	private String xPathExpression;
 
-	/**
-	 * Constructs an instance with the specified XPath expression.
-	 * 
-	 * @param xPathExpression XPath expression to be evaluated against the
-	 * source Element instance.
-	 */
-	public AppendChildTextFromXPathOperation(String xPathExpression) {
-		this.xPathExpression = xPathExpression;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		
+		if (getParameters().length < 1) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		}
+		
+		xPathExpression = getParameters()[0];		
+		Assert.isNotNull(xPathExpression);
 		if (srcElement != null) {
 			XPath xPath = XPathFactory.newInstance().newXPath();
 			try {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildTextOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildTextOperation.java
index df9e939..5d910c5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildTextOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/AppendChildTextOperation.java
@@ -10,6 +10,7 @@
  *******************************************************************************/ 
 package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 import org.w3c.dom.Text;
@@ -27,20 +28,20 @@
 
 	private String content;
 
-	/**
-	 * Constructs an instance with the specified content.
-	 * 
-	 * @param content Content of child Text to be created.
-	 */
-	public AppendChildTextOperation(String content) {
-		this.content = content;
-	}
 
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 1) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		}
+		
+		content = getParameters()[0];		
+		Assert.isNotNull(content);
+		
 		if (tagConverterContext != null && curElement != null && content != null && content.length() > 0) {
 			Text childText = tagConverterContext.createText(content);
 			curElement.appendChild(childText);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/ConvertAttributeToTextOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/ConvertAttributeToTextOperation.java
index 314c308..51fdd9a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/ConvertAttributeToTextOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/ConvertAttributeToTextOperation.java
@@ -10,6 +10,7 @@
  *******************************************************************************/ 
 package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 import org.w3c.dom.Text;
@@ -27,38 +28,24 @@
 public class ConvertAttributeToTextOperation extends AbstractTransformOperation {
 
 	private String attributeName;
-	private boolean removeAttribute;
-
-	/**
-	 * Constructs an instance with the specified attribute name, and defaults
-	 * to removing the attribute.
-	 * 
-	 * @param attributeName Name of attribute to be converted to a child Text
-	 * Node.
-	 */
-	public ConvertAttributeToTextOperation(String attributeName) {
-		this(attributeName, true);
-	}
-
-	/**
-	 * Constructs an instance with the specified attribute name and optionally
-	 * removes the attribute.
-	 * 
-	 * @param attributeName Name of attribute to be converted to a child Text
-	 * Node.
-	 * @param removeAttribute It true, attribute is removed after child Text
-	 * Node is created.
-	 */
-	public ConvertAttributeToTextOperation(String attributeName, boolean removeAttribute) {
-		this.attributeName = attributeName;
-		this.removeAttribute = removeAttribute;
-	}
+	private boolean removeAttribute = true;
 
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 1) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		} else if (getParameters().length < 2) {
+			attributeName = getParameters()[0];
+		} else {
+			attributeName = getParameters()[0];
+			removeAttribute = Boolean.valueOf(getParameters()[1]).booleanValue();
+		}		
+		
+		Assert.isNotNull(attributeName);
 		if (tagConverterContext != null && srcElement != null && curElement != null) {
 			String content = srcElement.getAttribute(attributeName);
 			if (content != null && content.length() > 0) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CopyAttributeOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CopyAttributeOperation.java
index 5d77840..a169436 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CopyAttributeOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CopyAttributeOperation.java
@@ -10,6 +10,7 @@
  *******************************************************************************/ 
 package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
@@ -27,39 +28,24 @@
 	private boolean create;
 	private String newAttributeValue;
 
-	/**
-	 * Constructs an instance with the specified attribute name, and defaults
-	 * to not creating an attribute unless the named attribute exists on the
-	 * source Element instance.
-	 * 
-	 * @param attributeName Name of attribute to be copied.
-	 */
-	public CopyAttributeOperation(String attributeName) {
-		this(attributeName, false, null);
-	}
-
-	/**
-	 * Constructs an instance with the specified attribute name and optionally
-	 * forces creation of a new attribute on the current Element even if the
-	 * named attribute does not exist on the source Element instance.
-	 * 
-	 * @param attributeName Name of attribute to be copied.
-	 * @param create If true, create attribute on the current Element even if
-	 * the named attribute does not exist on the source Element.
-	 * @param newAttributeValue Value to set for the new attribute if not found
-	 * on the source Element. 
-	 */
-	public CopyAttributeOperation(String attributeName, boolean create, String newAttributeValue) {
-		this.attributeName = attributeName;
-		this.create = create;
-		this.newAttributeValue = newAttributeValue;
-	}
 
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 1) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		} else if (getParameters().length < 3) {
+			attributeName = getParameters()[0];			
+		} else {
+			attributeName = getParameters()[0];
+			create = Boolean.valueOf(getParameters()[1]).booleanValue();
+			newAttributeValue = getParameters()[2];		
+		}
+		
+		Assert.isNotNull(attributeName);
 		if (srcElement != null && curElement != null) {
 			Attr attribute = srcElement.getAttributeNode(attributeName);
 			if (attribute != null) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CopyAttributeWithRenameOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CopyAttributeWithRenameOperation.java
new file mode 100644
index 0000000..0a0a25b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CopyAttributeWithRenameOperation.java
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2008 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle Corporation - initial API and implementation
+ */
+package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+
+/**
+ * Copies a single attribute from the source Element instance to the current
+ * Element instance, renaming the attribute on the current Element instance.
+ * 
+ * @author Ian Trimble - Oracle
+ */
+public class CopyAttributeWithRenameOperation extends AbstractTransformOperation {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
+	 */
+	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 2) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		}
+
+		String srcAttributeName = getParameters()[0];
+		String destAttributeName = getParameters()[1];
+		Assert.isNotNull(srcAttributeName);
+		Assert.isNotNull(destAttributeName);
+
+		if (srcElement != null && curElement != null) {
+			Attr attribute = srcElement.getAttributeNode(srcAttributeName);
+			if (attribute != null) {
+				curElement.setAttribute(destAttributeName, attribute.getValue());
+			}
+		}
+
+		return curElement;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateAttributeFromXPathOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateAttributeFromXPathOperation.java
index 480428d..dc5badb 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateAttributeFromXPathOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateAttributeFromXPathOperation.java
@@ -15,6 +15,7 @@
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 
@@ -29,23 +30,22 @@
 	private String attributeName;
 	private String xPathExpression;
 
-	/**
-	 * Constructs an instance with the specified XPath expression.
-	 * 
-	 * @param attributeName Name of attribute to be created.
-	 * @param xPathExpression XPath expression to be evaluated against the
-	 * source Element instance.
-	 */
-	public CreateAttributeFromXPathOperation(String attributeName, String xPathExpression) {
-		this.attributeName = attributeName;
-		this.xPathExpression = xPathExpression;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		
+		if (getParameters().length < 2) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		}
+		
+		attributeName = getParameters()[0];
+		xPathExpression = getParameters()[1];				
+		Assert.isNotNull(attributeName);
+		Assert.isNotNull(xPathExpression);
+	
 		if (srcElement != null) {
 			XPath xPath = XPathFactory.newInstance().newXPath();
 			try {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateAttributeOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateAttributeOperation.java
index 9b5d260..7ffc0bb 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateAttributeOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateAttributeOperation.java
@@ -10,6 +10,7 @@
  *******************************************************************************/ 
 package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 
@@ -24,22 +25,21 @@
 	private String attributeName;
 	private String attributeValue;
 
-	/**
-	 * Constructs an instance with the specified attribute name and value.
-	 * 
-	 * @param attributeName Name of attribute to be created.
-	 * @param attributeValue Value of attribute to be set.
-	 */
-	public CreateAttributeOperation(String attributeName, String attributeValue) {
-		this.attributeName = attributeName;
-		this.attributeValue = attributeValue;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 2) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		}
+		
+		attributeName = getParameters()[0];
+		attributeValue = getParameters()[1];		
+		Assert.isNotNull(attributeName);
+		Assert.isNotNull(attributeValue);
+	
 		if (curElement != null) {
 			curElement.setAttribute(attributeName, attributeValue);
 		}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateElementOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateElementOperation.java
index c8d98a2..038fec2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateElementOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/CreateElementOperation.java
@@ -10,6 +10,7 @@
  *******************************************************************************/ 
 package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 
@@ -26,20 +27,19 @@
 
 	private String tagName;
 
-	/**
-	 * Constructs an instance with the specified Element name.
-	 * 
-	 * @param tagName Name of Element to be created.
-	 */
-	public CreateElementOperation(String tagName) {
-		this.tagName = tagName;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 1) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		} 
+		
+		tagName = getParameters()[0];
+		Assert.isNotNull(tagName);
+		
 		Element element = null;
 		if (tagConverterContext != null && tagName != null && tagName.length() > 0) {
 			element = tagConverterContext.createElement(tagName);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IfNotOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IfNotOperation.java
index a83b896..95c62f2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IfNotOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IfNotOperation.java
@@ -15,6 +15,7 @@
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 
@@ -33,21 +34,20 @@
 
 	private String xPathExpression;
 
-	/**
-	 * Constructs an instance with the specified XPath expression.
-	 * 
-	 * @param xPathExpression XPath expression to be evaluated against the
-	 * source Element instance.
-	 */
-	public IfNotOperation(String xPathExpression) {
-		this.xPathExpression = xPathExpression;
-	}
 
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 1) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		}
+		
+		xPathExpression = getParameters()[0];
+		Assert.isNotNull(xPathExpression);
+		
 		Element retElement = curElement;
 		if (srcElement != null) {
 			XPath xPath = XPathFactory.newInstance().newXPath();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IfOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IfOperation.java
index 3d94bc7..f617e35 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IfOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IfOperation.java
@@ -15,6 +15,7 @@
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 
@@ -33,21 +34,19 @@
 
 	private String xPathExpression;
 
-	/**
-	 * Constructs an instance with the specified XPath expression.
-	 * 
-	 * @param xPathExpression XPath expression to be evaluated against the
-	 * source Element instance.
-	 */
-	public IfOperation(String xPathExpression) {
-		this.xPathExpression = xPathExpression;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 1) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		}
+		
+		xPathExpression = getParameters()[0];
+		Assert.isNotNull(xPathExpression);
+		
 		Element retElement = curElement;
 		if (srcElement != null) {
 			XPath xPath = XPathFactory.newInstance().newXPath();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IterateOverElementsOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IterateOverElementsOperation.java
index f72afe0..cc4e8df 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IterateOverElementsOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/IterateOverElementsOperation.java
@@ -15,6 +15,7 @@
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -35,21 +36,19 @@
 
 	private String xPathExpression;
 
-	/**
-	 * Constructs an instance with the specified XPath expression.
-	 * 
-	 * @param xPathExpression XPath expression to be evaluated against the
-	 * source Element instance.
-	 */
-	public IterateOverElementsOperation(String xPathExpression) {
-		this.xPathExpression = xPathExpression;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 1) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		} 
+			
+		xPathExpression = getParameters()[0];		
+		Assert.isNotNull(xPathExpression);
+		
 		Element retElement = curElement;
 		if (srcElement != null) {
 			XPath xPath = XPathFactory.newInstance().newXPath();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/RemoveAttributeOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/RemoveAttributeOperation.java
index 689d019..b217c6a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/RemoveAttributeOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/RemoveAttributeOperation.java
@@ -10,6 +10,7 @@
  *******************************************************************************/ 
 package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Element;
 
@@ -23,20 +24,19 @@
 
 	private String attributeName;
 
-	/**
-	 * Constructs an instance with the specified attribute name.
-	 * 
-	 * @param attributeName Name of attribute to be removed.
-	 */
-	public RemoveAttributeOperation(String attributeName) {
-		this.attributeName = attributeName;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 1) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		}
+		
+		attributeName = getParameters()[0];
+		Assert.isNotNull(attributeName);
+		
 		if (curElement != null) {
 			curElement.removeAttribute(attributeName);
 		}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/RenameAttributeOperation.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/RenameAttributeOperation.java
index 420ff1d..c924538 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/RenameAttributeOperation.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/converter/operations/internal/RenameAttributeOperation.java
@@ -10,6 +10,7 @@
  *******************************************************************************/ 
 package org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.jst.pagedesigner.dtmanager.converter.operations.AbstractTransformOperation;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
@@ -22,25 +23,21 @@
  */
 public class RenameAttributeOperation extends AbstractTransformOperation {
 
-	private String oldAttributeName;
-	private String newAttributeName;
-
-	/**
-	 * Constructs an instance with the specified old and new attribute names.
-	 * 
-	 * @param oldAttributeName Old name of the attribute to be renamed.
-	 * @param newAttributeName New name of the attribute to be renamed.
-	 */
-	public RenameAttributeOperation(String oldAttributeName, String newAttributeName) {
-		this.oldAttributeName = oldAttributeName;
-		this.newAttributeName = newAttributeName;
-	}
-
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.jst.pagedesigner.dtmanager.converter.operations.internal.provisional.AbstractTransformOperation#transform(org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
 	public Element transform(Element srcElement, Element curElement) {
+		if (getParameters().length < 2) {
+			getLog().error("Warning.TransformOperationFactory.TooFewParameters", getTransformOperationID()); //$NON-NLS-1$
+			return null;
+		}
+		
+		String oldAttributeName = getParameters()[0];
+		String newAttributeName = getParameters()[1];
+		Assert.isNotNull(oldAttributeName);
+		Assert.isNotNull(newAttributeName);
+		
 		if (curElement != null) {
 			Attr oldAttribute = curElement.getAttributeNode(oldAttributeName);
 			if (oldAttribute != null) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/DTInfoPackage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/DTInfoPackage.java
index 2c46c80..4aa55c6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/DTInfoPackage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/DTInfoPackage.java
@@ -665,6 +665,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+    @SuppressWarnings("hiding")
 	interface Literals {
 		/**
 		 * The meta object literal for the '{@link org.eclipse.jst.pagedesigner.dtmanager.dtinfo.internal.impl.DTInfoImpl <em>DT Info</em>}' class.
@@ -682,7 +683,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EReference DT_INFO__TAG_CONVERT_INFO = eINSTANCE.getDTInfo_TagConvertInfo();
+        EReference DT_INFO__TAG_CONVERT_INFO = eINSTANCE.getDTInfo_TagConvertInfo();
 
 		/**
 		 * The meta object literal for the '<em><b>Tag Decorate Infos</b></em>' containment reference list feature.
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoFactoryImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoFactoryImpl.java
index ad64f06..b5be005 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoFactoryImpl.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoFactoryImpl.java
@@ -33,6 +33,7 @@
 	/**
 	 * Creates the default factory implementation.
 	 * <!-- begin-user-doc -->
+     * @return the factory 
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
@@ -148,6 +149,7 @@
 
 	/**
 	 * <!-- begin-user-doc -->
+     * @return  the package
 	 * <!-- end-user-doc -->
 	 * @deprecated
 	 * @generated
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoImpl.java
index 98c4828..8676928 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoImpl.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoImpl.java
@@ -98,6 +98,9 @@
 
 	/**
 	 * <!-- begin-user-doc -->
+     * @param newTagConvertInfo 
+     * @param msgs 
+     * @return the notification chaing 
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoPackageImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoPackageImpl.java
index 1bb41f7..b6bf2b7 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoPackageImpl.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/DTInfoPackageImpl.java
@@ -120,6 +120,7 @@
 	 * <p>Invocation of this method will not affect any packages that have
 	 * already been initialized.
 	 * <!-- begin-user-doc -->
+     * @return the package 
 	 * <!-- end-user-doc -->
 	 * @see #eNS_URI
 	 * @see #createPackageContents()
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/TagDecorateInfoImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/TagDecorateInfoImpl.java
index f133d22..33eee8f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/TagDecorateInfoImpl.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/impl/TagDecorateInfoImpl.java
@@ -499,6 +499,9 @@
 
 	/**
 	 * <!-- begin-user-doc -->
+     * @param newResolveAttributeValue 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/util/DTInfoSwitch.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/util/DTInfoSwitch.java
index b736952..6f178c8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/util/DTInfoSwitch.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dtmanager/dtinfo/internal/util/DTInfoSwitch.java
@@ -57,8 +57,9 @@
 	/**
 	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
 	 * <!-- begin-user-doc -->
+     * @param theEObject 
+     * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
 	 */
 	public Object doSwitch(EObject theEObject) {
@@ -68,28 +69,30 @@
 	/**
 	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
 	 * <!-- begin-user-doc -->
+     * @param theEClass 
+     * @param theEObject 
+     * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
 	 */
 	protected Object doSwitch(EClass theEClass, EObject theEObject) {
 		if (theEClass.eContainer() == modelPackage) {
 			return doSwitch(theEClass.getClassifierID(), theEObject);
 		}
-		else {
-			List eSuperTypes = theEClass.getESuperTypes();
-			return
-				eSuperTypes.isEmpty() ?
-					defaultCase(theEObject) :
-					doSwitch((EClass)eSuperTypes.get(0), theEObject);
-		}
+        List eSuperTypes = theEClass.getESuperTypes();
+        return
+        	eSuperTypes.isEmpty() ?
+        		defaultCase(theEObject) :
+        		doSwitch((EClass)eSuperTypes.get(0), theEObject);
 	}
 
 	/**
 	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
 	 * <!-- begin-user-doc -->
+     * @param classifierID 
+     * @param theEObject 
+     * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * <!-- end-user-doc -->
-	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
 	 */
 	protected Object doSwitch(int classifierID, EObject theEObject) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java
index 98f516f..603c271 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/HTMLEditor.java
@@ -17,9 +17,7 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.core.internal.resources.ResourceException;
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
@@ -30,7 +28,6 @@
 import org.eclipse.gef.ui.palette.PaletteViewerProvider;
 import org.eclipse.gef.ui.views.palette.PalettePage;
 import org.eclipse.gef.ui.views.palette.PaletteViewerPage;
-import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.TextSelection;
 import org.eclipse.jface.viewers.IPostSelectionProvider;
@@ -48,6 +45,7 @@
 import org.eclipse.jst.pagedesigner.parts.DocumentEditPart;
 import org.eclipse.jst.pagedesigner.preview.PreviewHandlerNew;
 import org.eclipse.jst.pagedesigner.preview.WindowsIEBrowser;
+import org.eclipse.jst.pagedesigner.properties.WPETabbedPropertySheetPage;
 import org.eclipse.jst.pagedesigner.tools.RangeSelectionTool;
 import org.eclipse.jst.pagedesigner.ui.common.PartActivationHandler;
 import org.eclipse.jst.pagedesigner.ui.common.sash.SashEditorPart;
@@ -68,22 +66,19 @@
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.contexts.IContextService;
-import org.eclipse.ui.ide.IGotoMarker;
 import org.eclipse.ui.part.MultiPageSelectionProvider;
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 import org.eclipse.ui.views.properties.IPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ITabbedPropertySheetPageContributor;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
 import org.eclipse.wst.common.ui.provisional.editors.PostMultiPageEditorSite;
 import org.eclipse.wst.common.ui.provisional.editors.PostMultiPageSelectionProvider;
 import org.eclipse.wst.common.ui.provisional.editors.PostSelectionMultiPageEditorPart;
 import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
 import org.eclipse.wst.sse.ui.StructuredTextEditor;
-import org.eclipse.wst.sse.ui.internal.IExtendedMarkupEditor;
 import org.eclipse.wst.sse.ui.internal.provisional.extensions.ISourceEditingTextTools;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 import org.eclipse.wst.xml.ui.internal.provisional.IDOMSourceEditingTextTools;
 import org.w3c.dom.Document;
-import org.w3c.dom.Node;
 
 /**
  * The HTMLEditor is a multi paged editor. It will use the StructuredTextEditor
@@ -91,19 +86,34 @@
  * 
  * @author mengbo
  */
-public class HTMLEditor extends PostSelectionMultiPageEditorPart implements
+public final class HTMLEditor extends PostSelectionMultiPageEditorPart implements
 		IPropertyListener, ITabbedPropertySheetPageContributor {
 	// private static final String PAGE_NAME_DESIGN = "Design"; //$NON-NLS-1$
 	// private static final String PAGE_NAME_SOURCE = "Source"; //$NON-NLS-1$
-	private final static String CONTRIBUTOR_ID = "org.eclipse.jst.pagedesigner.pageDesigner.tabPropertyContributor"; //$NON-NLS-1$
+	/**
+	 * Tabbed property contributor id for WPE
+	 */
+	public final static String TABBED_PROPERTIES_CONTRIBUTOR_ID = "org.eclipse.jst.pagedesigner.tabPropertyContributor"; //$NON-NLS-1$
 
 	// four different modes for the designer when displayed in a sash editor.
+	/**
+	 * editor split is vertical
+	 */
 	public static final int MODE_SASH_VERTICAL = 0;
 
+	/**
+	 * editor split is horizontal
+	 */
 	public static final int MODE_SASH_HORIZONTAL = 1;
 
+	/**
+	 * no split, only designer canvas
+	 */
 	public static final int MODE_DESIGNER = 2;
 
+	/**
+	 * no split, only SSE source
+	 */
 	public static final int MODE_SOURCE = 3;
 
 	private Logger _log = PDPlugin.getLogger(HTMLEditor.class);
@@ -129,9 +139,15 @@
 	private DefaultEditDomain _editDomain;
 
 	private WindowsIEBrowser _browser;
+	
+	private Composite _previewComposite;
 
 	private List PREVIEW_FILES_LIST = new ArrayList();
 
+	private WPETabbedPropertySheetPage _tabbedPropSheet;
+
+	private ISelectionChangedListener _selChangedListener;
+
     // TODO:This class is never used locally
 //	private class TextInputListener implements ITextInputListener {
 //		public void inputDocumentAboutToBeChanged(IDocument oldInput,
@@ -145,6 +161,9 @@
 //		}
 //	}
 
+	/**
+	 * Default constructor
+	 */
 	public HTMLEditor() {
 		super();
 	}
@@ -153,7 +172,7 @@
 	 * This method is just to make firePropertyChanged accessbible from some
 	 * (anonomous) inner classes.
 	 */
-	protected void _firePropertyChange(int property) {
+	private void _firePropertyChange(int property) {
 		super.firePropertyChange(property);
 	}
 
@@ -163,7 +182,7 @@
 	 * @see com.ibm.xtools.common.ui.properties.ITabbedPropertySheetPageContributor#getContributorId()
 	 */
 	public String getContributorId() {
-		return CONTRIBUTOR_ID;
+		return TABBED_PROPERTIES_CONTRIBUTOR_ID;
 	}
 
 	private void connectSashPage() {
@@ -171,27 +190,52 @@
 				.getSelectionProvider();
 		if (selectionProvider instanceof IPostSelectionProvider) {
 			((IPostSelectionProvider) selectionProvider)
-					.addPostSelectionChangedListener(new ISelectionChangedListener() {
-						public void selectionChanged(SelectionChangedEvent event) {
-							((PostMultiPageSelectionProvider) getSite()
+					.addPostSelectionChangedListener(getSelectionChangedListener(selectionProvider));
+		} else {
+			selectionProvider
+					.addSelectionChangedListener(getSelectionChangedListener(selectionProvider));
+		}
+	}
+	
+	private void disconnectSashPage() {
+		ISelectionProvider selectionProvider = _sashEditorPart.getSite()
+				.getSelectionProvider();
+		if (selectionProvider instanceof IPostSelectionProvider) {
+			((IPostSelectionProvider) selectionProvider)
+					.removePostSelectionChangedListener(getSelectionChangedListener(selectionProvider));
+		} else {
+			selectionProvider
+					.removeSelectionChangedListener(getSelectionChangedListener(selectionProvider));
+		}
+	}
+
+	private ISelectionChangedListener getSelectionChangedListener(ISelectionProvider selectionProvider) {
+		if (_selChangedListener  == null) {
+			if (selectionProvider instanceof IPostSelectionProvider) {
+				_selChangedListener =  new ISelectionChangedListener() {
+				public void selectionChanged(SelectionChangedEvent event) {
+						((PostMultiPageSelectionProvider) getSite()
+								.getSelectionProvider())
+								.firePostSelectionChanged(event);
+					}
+				};
+			}
+			else {
+				_selChangedListener =  new ISelectionChangedListener() {
+					public void selectionChanged(SelectionChangedEvent event) {
+							((MultiPageSelectionProvider) getSite()
 									.getSelectionProvider())
 									.firePostSelectionChanged(event);
 						}
-					});
-		} else {
-			selectionProvider
-					.addSelectionChangedListener(new ISelectionChangedListener() {
-						public void selectionChanged(SelectionChangedEvent event) {
-							((MultiPageSelectionProvider) getSite()
-									.getSelectionProvider())
-									.fireSelectionChanged(event);
-						}
-					});
+					};
+			}
 		}
+		return _selChangedListener;
 	}
 
 	/**
 	 * Creates the source page of the multi-page editor.
+	 * @throws PartInitException 
 	 */
 	protected void sash_createAndAddDesignSourcePage() throws PartInitException {
 		// create source page
@@ -232,7 +276,7 @@
 		return new PostMultiPageEditorSite(this, editor);
 	}
 
-	protected void tabbed_createAndAddDesignSourcePage()
+	private void tabbed_createAndAddDesignSourcePage()
 			throws PartInitException {
 		// create source page
 		_textEditor = createTextEditor();
@@ -269,20 +313,28 @@
 		// TextInputListener());
 	}
 
-	protected void createAndAddPreviewPage() {
-		Composite composite = new Composite(getContainer(), 0);
+	private void createAndAddPreviewPage() {
+		_previewComposite = new Composite(getContainer(), 0);
 		FillLayout filllayout = new FillLayout();
-		composite.setLayout(filllayout);
-		_browser = new WindowsIEBrowser();
-		if (_browser != null) {
-			_browser.create(composite, SWT.NONE);
-			_previewPageIndex = addPage(composite);
-			// JSPSourceEditor.Page.Preview.PageText=Preview
-			setPageText(_previewPageIndex, PageDesignerResources.getInstance()
-					.getString("JSPSourceEditor.Page.Preview.PageText")); //$NON-NLS-1$
-		}
+		_previewComposite.setLayout(filllayout);
+
+		_previewPageIndex = addPage(_previewComposite);
+		// JSPSourceEditor.Page.Preview.PageText=Preview
+		setPageText(_previewPageIndex, PageDesignerResources.getInstance()
+				.getString("JSPSourceEditor.Page.Preview.PageText")); //$NON-NLS-1$
+		
 	}
 
+	private WindowsIEBrowser getPreviewBrowser() {
+		if (_browser == null) {
+			_browser = new WindowsIEBrowser();
+			if (_browser != null) {
+				_browser.create(_previewComposite, SWT.NONE);
+				_previewComposite.layout();
+			}
+		}
+		return _browser;
+	}
 	/**
 	 * Connects the design viewer with the viewer selection manager. Should be
 	 * done after createSourcePage() is done because we need to get the
@@ -400,18 +452,20 @@
 		return new DesignerStructuredTextEditorJSP();
 	}
 
-	protected void disconnectDesignPage() {
+	private void disconnectDesignPage() {
 		if (_designViewer != null) {
 			_designViewer.setModel(null);
+			_designViewer.dispose();
 		}
 	}
 
 	public void dispose() {
-
+		//System.out.println("dispose of HTML Editor");
 		deletePreviewFiles();
 
 		disconnectDesignPage();
-
+		disconnectSashPage();
+		
 		IWorkbenchWindow window = getSite().getWorkbenchWindow();
 		window.getPartService().removePartListener(_partListener);
 		window.getShell().removeShellListener(_partListener);
@@ -419,11 +473,25 @@
 
 		if (_textEditor != null) {
 			_textEditor.removePropertyListener(this);
+			_textEditor.setEditorPart(null);
+			_textEditor.dispose();
 		}
-
+		
 		// moved to last when added window ... seems like
 		// we'd be in danger of losing some data, like site,
 		// or something.
+		_sashEditorPart = null;
+		_tabbedPropSheet = null;
+		_partListener = null;
+		_editDomain = null;
+		_designViewer = null;
+		_browser = null;
+		_previewComposite = null;
+		_paletteViewerPage = null;
+		_log = null;
+		_selChangedListener = null;
+		_textEditor = null;
+		
 		super.dispose();
 		
 	}
@@ -452,8 +520,11 @@
 			if (fileDoesNotExist((IFileEditorInput) input, coreExceptionArray)) {
 				// todo use message formatter for {0}
 				Throwable coreException = coreExceptionArray[0];
-				// FIXME: WTF?
-				if (coreException instanceof ResourceException) {
+
+				// C.B: this is a strange piece of logic.  It was referenceing
+				// the internal sub-class of CoreException, ResourceException.
+				// need to review fileDoesNotExist.
+				if (coreException instanceof CoreException) {
 					// I'm assuming this is always 'does not exist'
 					// we'll refresh local go mimic behavior of default
 					// editor, where the
@@ -479,30 +550,32 @@
 			try {
 				contents = ((IStorageEditorInput) input).getStorage()
 						.getContents();
+				if (contents == null) {
+					throw new PartInitException("Editor could not be open on "
+							+ input.getName());
+				}
 			} catch (CoreException noStorageExc) {
 				// Error in geting storage contents
 				_log.error("Error.HTMLEditor.1", noStorageExc); //$NON-NLS-1$
 			}
-			if (contents == null) {
-				// throw new
-				// PartInitException(ResourceHandler.getString("32concat_EXC_",
-				// (new Object[] {
-				// input.getName()}))); //$NON-NLS-1$
-				throw new PartInitException("Editor could not be open on "
-						+ input.getName());
+			finally
+			{
+				ResourceUtils.ensureClosed(contents);
 			}
-            ResourceUtils.ensureClosed(contents);
 		}
 	}
 
-	/*
-	 * (non-Javadoc) Initializes the editor part with a site and input. <p>
+	/**
+	 * Initializes the editor part with a site and input. <p>
 	 * Subclasses of <code> EditorPart </code> must implement this method.
 	 * Within the implementation subclasses should verify that the input type is
 	 * acceptable and then save the site and input. Here is sample code: </p><pre>
 	 * if (!(input instanceof IFileEditorInput)) throw new
 	 * PartInitException("Invalid Input: Must be IFileEditorInput");
 	 * setSite(site); setInput(editorInput); </pre>
+	 * @param input 
+	 * @param coreException 
+	 * @return true if the input doesn't exist 
 	 */
 	protected boolean fileDoesNotExist(IFileEditorInput input,
 			Throwable[] coreException) {
@@ -511,18 +584,21 @@
 		if ((!(input.exists())) || (!(input.getFile().exists()))) {
 			result = true;
 		} else {
-			try {
+			try 
+			{
 				inStream = input.getFile().getContents(true);
-			} catch (CoreException e) {
+			} 
+			catch (CoreException e) 
+			{
 				// very likely to be file not found
 				result = true;
 				coreException[0] = e;
 				// The core has exception
 				_log.error("Error.HTMLEditor.3", e); //$NON-NLS-1$
-			} finally {
-				if (input != null) {
-					ResourceUtils.ensureClosed(inStream);
-				}
+			} 
+			finally 
+			{
+				ResourceUtils.ensureClosed(inStream);
 			}
 		}
 		return result;
@@ -564,45 +640,10 @@
 		return result;
 	}
 
-	/**
-	 * IExtendedMarkupEditor method XXX:No reference to the method.
-	 */
-	public Node getCaretNode() {
-		if (getTextEditor() == null) {
-			return null;
-		}
-
-		ISourceEditingTextTools adapter = (ISourceEditingTextTools) _textEditor
-				.getAdapter(ISourceEditingTextTools.class);
-		if (adapter instanceof IDOMSourceEditingTextTools) {
-			IDOMSourceEditingTextTools domTools = (IDOMSourceEditingTextTools) adapter;
-			try {
-				return domTools.getNode(domTools.getCaretOffset());
-			} catch (BadLocationException e) {
-				_log.error("BadLocationException", e);
-			}
-		}
-		return null;
-	}
 
 	/**
 	 * IExtendedSimpleEditor method
-	 */
-	public int getCaretPosition() {
-		if (getTextEditor() == null) {
-			return -1;
-		}
-
-		// return getExtendedTextEditor().getCaretPosition();
-		Object apapter = _textEditor.getAdapter(ISourceEditingTextTools.class);
-		if (apapter != null) {
-			return ((ISourceEditingTextTools) apapter).getCaretOffset();
-		}
-		return -1;
-	}
-
-	/**
-	 * IExtendedSimpleEditor method
+	 * @return IDocument
 	 */
 	public IDocument getDocument() {
 		if (getTextEditor() == null) {
@@ -619,6 +660,7 @@
 
 	/**
 	 * IExtendedMarkupEditor method
+	 * @return the dom document
 	 */
 	public Document getDOMDocument() {
 		if (getTextEditor() == null) {
@@ -634,11 +676,15 @@
 
 	/**
 	 * IExtendedSimpleEditor method
+	 * @return the editor part
 	 */
 	public IEditorPart getEditorPart() {
 		return this;
 	}
 
+	/**
+	 * @return the structured model
+	 */
 	public IStructuredModel getModel() {
 		IStructuredModel model = null;
 		if (_textEditor != null) {
@@ -647,27 +693,14 @@
 		return model;
 	}
 
-	/**
-	 * IExtendedMarkupEditor method
-	 */
-	public List getSelectedNodes() {
-		if (getTextEditor() == null) {
-			return null;
-		}
-		// FIXME: when designer as current view, what to return?
-		return getExtendedTextEditor().getSelectedNodes();
-	}
 
+	/**
+	 * @return the SSE editor delegate
+	 */
 	public StructuredTextEditor getTextEditor() {
 		return _textEditor;
 	}
 
-	public IExtendedMarkupEditor getExtendedTextEditor() {
-		if (_textEditor instanceof IExtendedMarkupEditor) {
-			return (IExtendedMarkupEditor) _textEditor;
-		}
-		return null;
-	}
 
 	/*
 	 * (non-Javadoc) Method declared on IWorkbenchPart.
@@ -687,23 +720,6 @@
 		return title;
 	}
 
-	/*
-	 * (non-Javadoc) Sets the cursor and selection state for this editor to the
-	 * passage defined by the given marker. <p> Subclasses may override. For
-	 * greater details, see <code> IEditorPart </code></p>
-	 * 
-	 * @see IEditorPart
-	 */
-	public void gotoMarker(IMarker marker) {
-		// (pa) 20020217 this was null when opening an editor that was
-		// already open
-		if (_textEditor != null) {
-			IGotoMarker markerGotoer = (IGotoMarker) _textEditor
-					.getAdapter(IGotoMarker.class);
-			markerGotoer.gotoMarker(marker);
-		}
-	}
-
 	public void init(IEditorSite site, IEditorInput input)
 			throws PartInitException {
 		super.init(site, input);
@@ -765,7 +781,7 @@
 	/**
 	 * Posts the update code "behind" the running operation.
 	 */
-	protected void postOnDisplayQue(Runnable runnable) {
+	private void postOnDisplayQue(Runnable runnable) {
 		IWorkbench workbench = PlatformUI.getWorkbench();
 		IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
 		if (windows != null && windows.length > 0) {
@@ -835,7 +851,7 @@
 
 	}
 
-	protected void safelySanityCheckState() {
+	private void safelySanityCheckState() {
 		// If we're called before editor is created, simply ignore since we
 		// delegate this function to our embedded TextEditor
 		if (getTextEditor() == null) {
@@ -875,12 +891,15 @@
 		return getTextEditor().isDirty();
 	}
 
-	protected IPropertySheetPage getPropertySheetPage() {
-		return new org.eclipse.jst.pagedesigner.properties.DesignerTabbedPropertySheetPage(
-				this, this);
+	private IPropertySheetPage getPropertySheetPage() {
+		if (_tabbedPropSheet == null){
+			_tabbedPropSheet = new org.eclipse.jst.pagedesigner.properties.WPETabbedPropertySheetPage(
+					this, this);
+		}
+		return _tabbedPropSheet;
 	}
 
-	protected PaletteViewerPage getPaletteViewerPage() {
+	private PaletteViewerPage getPaletteViewerPage() {
 		if (null == _paletteViewerPage) {
 			DefaultEditDomain editDomain = getEditDomain();
 			PaletteItemManager manager = PaletteItemManager
@@ -901,7 +920,7 @@
 	}
 
 	/**
-	 * @return
+	 * @return the edit domain
 	 */
 	public DefaultEditDomain getEditDomain() {
 		if (_editDomain == null) {
@@ -920,7 +939,7 @@
 		return _editDomain;
 	}
 
-	/*
+	/**
 	 * (non-Javadoc)
 	 * 
 	 * @see org.eclipse.ui.part.MultiPageEditorPart#pageChange(int)
@@ -952,9 +971,9 @@
 			File file = PreviewUtil.toFile(result, getEditorInput());
 			if (file != null) {
 				PREVIEW_FILES_LIST.add(file);
-				_browser.loadFile(file);
+				getPreviewBrowser().loadFile(file);
 			} else {
-				_browser.getBrowser().setUrl("about:blank"); //$NON-NLS-1$
+				getPreviewBrowser().getBrowser().setUrl("about:blank"); //$NON-NLS-1$
 			}
 		}
 	}
@@ -989,6 +1008,9 @@
 		this._mode = mode;
 	}
 
+	/**
+	 * @return the current design mode
+	 */
 	public int getDesignerMode() {
 		return this._mode;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/IDesignViewer.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/IDesignViewer.java
index 83f37be..fc05338 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/IDesignViewer.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/IDesignViewer.java
@@ -21,15 +21,21 @@
  * @author mengbo
  */
 public interface IDesignViewer {
+	/**
+	 * @return the title
+	 */
 	String getTitle();
 
+	/**
+	 * @param model
+	 */
 	void setModel(IStructuredModel model);
 
 	// void setViewerSelectionManager(ViewerSelectionManager
 	// viewerSelectionManager);
 
 	/**
-	 * @return
+	 * @return the graphical viewer
 	 */
 	public IHTMLGraphicalViewer getGraphicViewer();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/OutlineConfiguration.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/OutlineConfiguration.java
index c667b04..e247dc1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/OutlineConfiguration.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/OutlineConfiguration.java
@@ -22,6 +22,10 @@
 import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
 import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
 
+/**
+ * the HTML editor's outline view configuration
+ *
+ */
 public class OutlineConfiguration extends JSPContentOutlineConfiguration {
 	private Object[] _selections = new Object[0];
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/PageDesignerActionConstants.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/PageDesignerActionConstants.java
index 6f9c12f..cbe7381 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/PageDesignerActionConstants.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/PageDesignerActionConstants.java
@@ -108,7 +108,7 @@
 
     /**
      * Add standard group separators for the Style sub-menu
-     * @param styleSubmenu
+     * @param menu
      */
     public static void addStandardStyleActionGroups(IMenuManager menu) 
     {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SelectionSynchronizer.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SelectionSynchronizer.java
index bea341f..33025aa 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SelectionSynchronizer.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SelectionSynchronizer.java
@@ -47,6 +47,9 @@
 		_editor = editor;
 	}
 
+	/**
+	 * @return true if the status check is okay
+	 */
 	protected boolean statusCheckOk() {
 		try {
 			StyledText text = _editor.getHTMLEditor().getTextEditor()
@@ -113,6 +116,8 @@
 	 * We are listening to the selection change in ViewerSelectionManager. The
 	 * original source of the event could be source view or the outline view or
 	 * other party that participate in the ViewerSelectionManager.
+	 * @param start 
+	 * @param end 
 	 */
 	public void textSelectionChanged(int start, int end) {
 		if (!_firingChange) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SimpleGraphicalEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SimpleGraphicalEditor.java
index 5865a27..4c2c043 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SimpleGraphicalEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/SimpleGraphicalEditor.java
@@ -52,8 +52,8 @@
 import org.eclipse.jst.pagedesigner.editors.actions.DesignerUndoRedoAction;
 import org.eclipse.jst.pagedesigner.editors.actions.RelatedViewActionGroup;
 import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteCustomizer;
-import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteViewerProvider;
 import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteRootFactory;
+import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteViewerProvider;
 import org.eclipse.jst.pagedesigner.jsp.core.internal.pagevar.DocumentPageVariableAdapter;
 import org.eclipse.jst.pagedesigner.jsp.core.pagevar.adapter.PageVariableAdapterFactory;
 import org.eclipse.jst.pagedesigner.parts.CSSStyleAdapterFactory;
@@ -61,7 +61,6 @@
 import org.eclipse.jst.pagedesigner.parts.HTMLEditPartsFactory;
 import org.eclipse.jst.pagedesigner.parts.RefresherFactory;
 import org.eclipse.jst.pagedesigner.utils.SelectionHelper;
-import org.eclipse.jst.pagedesigner.viewer.HTMLGraphicalViewer;
 import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
 import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
@@ -94,7 +93,7 @@
 
     private HTMLEditor _delegate;
 
-	private HTMLGraphicalViewer _viewer;
+	private IHTMLGraphicalViewer _viewer;
 
 	private IStructuredModel _model;
 
@@ -136,6 +135,10 @@
 		}
 	};
 
+	/**
+	 * @param delegate
+	 * @param editdomain
+	 */
 	public SimpleGraphicalEditor(HTMLEditor delegate,
 			DefaultEditDomain editdomain) {
 		_delegate = delegate;
@@ -143,7 +146,7 @@
 	}
 
 	protected void createGraphicalViewer(Composite parent) {
-		_viewer = new HTMLGraphicalViewer(this);
+		_viewer = IHTMLGraphicalViewer.Factory.createGraphicalViewer(this);
 		Control control = _viewer.createControl(parent);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(control,
 				PDPlugin.getResourceString("SimpleGraphicalEditor.help.id"));
@@ -211,6 +214,9 @@
         super.initializeGraphicalViewer();
 	}
 
+	/**
+	 * 
+	 */
 	protected void initializeContextMenu() {
 		Control gviewer = _viewer.getControl();
 		MenuManager menuMgr = new MenuManager();
@@ -403,6 +409,9 @@
 		}
 	}
 
+	/**
+	 * @return the selection synchronizer
+	 */
 	protected SelectionSynchronizer getSynchronizer() {
 		return _synchronizer;
 	}
@@ -410,21 +419,16 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see com.ibm.sse.model.INodeAdapter#isAdapterForType(java.lang.Object)
-	 */
-	public boolean isAdapterForType(Object type) {
-		return false;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
 	 * @see org.eclipse.gef.ui.parts.GraphicalEditor#updateActions(java.util.List)
 	 */
 	protected void updateActions(List actionIds) {
 		super.updateActions(actionIds);
 	}
 
+	/**
+	 * @param id
+	 * @return the action for the id
+	 */
 	public IAction getAction(Object id) {
 		// lium: following lines commented out, see comments in
 		// DesignerUndoRedoAction
@@ -498,6 +502,9 @@
 		return _viewer;
 	}
 
+	/**
+	 * @return the html editor delegate
+	 */
 	public HTMLEditor getHTMLEditor() {
 		return _delegate;
 	}
@@ -526,7 +533,7 @@
 				updateActions(getSelectionActions());
 				if (selection instanceof IStructuredSelection && //
 						!(((IStructuredSelection) selection).getFirstElement() instanceof DocumentEditPart)) {
-					((HTMLGraphicalViewer) viewerViewer)
+					((IHTMLGraphicalViewer) viewerViewer)
 							.updateRangeSelection(selection);
 				}
 			}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ActionsMessages.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ActionsMessages.java
index 4d0e649..b5da948 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ActionsMessages.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ActionsMessages.java
@@ -28,6 +28,10 @@
         // no external instantiation
 	}
 
+	/**
+	 * @param key
+	 * @return the resource for the key
+	 */
 	public static String getString(String key) {
 		try {
 			return RESOURCE_BUNDLE.getString(key);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ChangeStyleAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ChangeStyleAction.java
index 2a2e784..70e5a68 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ChangeStyleAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ChangeStyleAction.java
@@ -18,6 +18,7 @@
 import org.eclipse.jst.pagedesigner.commands.range.ApplyStyleCommand;
 import org.eclipse.jst.pagedesigner.range.RangeUtil;
 import org.eclipse.jst.pagedesigner.viewer.DesignRange;
+import org.eclipse.jst.pagedesigner.viewer.HTMLGraphicalViewerListenenerAdapter;
 import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
 import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewerListener;
 import org.eclipse.ui.texteditor.IUpdate;
@@ -26,24 +27,12 @@
  * @author mengbo
  */
 public abstract class ChangeStyleAction extends Action implements IUpdate {
-	protected IHTMLGraphicalViewer _viewer;
+	private IHTMLGraphicalViewer _viewer;
 
-	String _expectedTag;
+	private String _expectedTag;
 
-	String _expectedCSSProperty;
-
-	String _expectedCSSPropertyValue;
-
-	IHTMLGraphicalViewerListener _listener = new IHTMLGraphicalViewerListener() {
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewerListener#selectionAboutToChange()
-		 */
-		public void selectionAboutToChange() {
-            // do nothing
-		}
-
+	private IHTMLGraphicalViewerListener _listener = new HTMLGraphicalViewerListenenerAdapter() 
+	{
 		/*
 		 * (non-Javadoc)
 		 * 
@@ -65,7 +54,9 @@
 
 	/**
 	 * @param text
+	 * @param name 
 	 * @param image
+	 * @param style 
 	 */
 	public ChangeStyleAction(String text, String name, ImageDescriptor image,
 			int style) {
@@ -74,16 +65,19 @@
 		this.setImageDescriptor(image);
 	}
 
+	/**
+	 * @param viewer
+	 */
 	public void setViewer(IHTMLGraphicalViewer viewer) {
 		if (viewer == _viewer) {
 			return;
 		}
 		if (_viewer != null) {
-			_viewer.removeSelectionChangedListener(_listener);
+			_viewer.removeHTMLViewerListener(_listener);
 		}
 		_viewer = viewer;
 		if (_viewer != null) {
-			_viewer.addSelectionChangedListener(_listener);
+			_viewer.addHTMLViewerListener(_listener);
 		}
 		update();
 	}
@@ -91,27 +85,59 @@
 	/**
 	 * 
 	 */
-	public void update() {
-		if (_viewer == null) {
-			this.setChecked(false);
-			this.setEnabled(false);
-			return;
-		}
-		if (!_viewer.isInRangeMode()) {
-			// XXX: later we may support in range mode.
-			this.setChecked(false);
-			this.setEnabled(false);
-			return;
-		}
-		DesignRange range = _viewer.getRangeSelection();
-		if (range == null || !range.isValid()) {
-			this.setChecked(false);
-			this.setEnabled(false);
-			return;
-		}
-		updateStatus(RangeUtil.normalize(range));
+	public void update() 
+	{
+	    boolean update = checkForUpdateAndMaybeDisableState();
+	    
+	    if (update)
+	    {
+	        updateState();
+	    }
 	}
 
+   /**
+    * Update the state 
+    */
+	protected void updateState()
+    {
+       DesignRange range = _viewer.getRangeSelection();
+       updateStatus(RangeUtil.normalize(range));
+    }
+
+	/**
+	 * Update the checked/enabled state
+	 * @return true if we should update status
+	 */
+	protected final boolean checkForUpdateAndMaybeDisableState()
+	{
+        if (_viewer == null) {
+            this.setChecked(false);
+            this.setEnabled(false);
+            return false;
+        }
+        if (!_viewer.isInRangeMode()) {
+            // XXX: later we may support in range mode.
+            this.setChecked(false);
+            this.setEnabled(false);
+            return false;
+        }
+        DesignRange range = _viewer.getRangeSelection();
+        if (range == null || !range.isValid()) {
+            this.setChecked(false);
+            this.setEnabled(false);
+            return false;
+        }
+        return true;
+	}
+	
+
+	/**
+	 * @return the viewer's current design range
+	 */
+	protected final DesignRange getDesignRange()
+	{
+	    return _viewer.getRangeSelection();
+	}
 	/**
 	 * @param range
 	 */
@@ -162,17 +188,17 @@
 	}
 
 	/**
-	 * @return
+	 * @return  the expected property value
 	 */
 	protected abstract String getExpectedCSSPropertyValue();
 
 	/**
-	 * @return
+	 * @return  the expected property
 	 */
 	protected abstract String getExpectedCSSProperty();
 
 	/**
-	 * @return
+	 * @return the expected tag
 	 */
 	protected String getExpectedTag() {
 		return _expectedTag;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DataBindingViewAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DataBindingViewAction.java
index a3350c8..17fb7d7 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DataBindingViewAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DataBindingViewAction.java
@@ -25,11 +25,13 @@
  * @version 1.5
  */
 public class DataBindingViewAction extends Action {
-	public final static String ID = "org.eclipse.jst.pagedesigner.editors.actions.DataBindingViewAction"; //$NON-NLS-1$
 
 	private static Logger _log = PDPlugin
 			.getLogger(DataBindingViewAction.class);
 
+	/**
+	 * Default constructor
+	 */
 	public DataBindingViewAction() {
 		setText(ActionsMessages
 				.getString("DataBindingViewAction.Menu.DataBinding")); //$NON-NLS-1$
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignActionBarFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignActionBarFactory.java
index 03fb36c..0b9971f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignActionBarFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignActionBarFactory.java
@@ -28,6 +28,9 @@
         // no external instantiation
 	}
 
+	/**
+	 * @return get the factory singleton
+	 */
 	public static DesignActionBarFactory getInstance() {
 		if (_instance == null) {
 			_instance = new DesignActionBarFactory();
@@ -35,6 +38,10 @@
 		return _instance;
 	}
 
+	/**
+	 * @param name
+	 * @return the tool bar action
+	 */
 	public DesignerToolBarAction getStyleAction(String name) {
 		DesignerToolBarAction action = null;
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignPageActionContributor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignPageActionContributor.java
index e6fd7cd..131ec1b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignPageActionContributor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignPageActionContributor.java
@@ -43,10 +43,17 @@
 	private static final Logger _log = PDPlugin
 			.getLogger(DesignPageActionContributor.class);
 
+	/**
+	 * paragraph
+	 */
 	public static final String PARAGRAPH_ACTION_ID = "paragraph";
 
-	protected IEditorPart _editorPart;
+	private IEditorPart _editorPart;
 
+	/**
+	 * @param manager
+	 * @param id
+	 */
 	protected void doRemove(IContributionManager manager, String id) {
 		try {
 			if (manager.find(id) != null) {
@@ -91,12 +98,20 @@
 		// toolbar.add(action);
 	}
 
+	/**
+	 * @param menuManager
+	 * @param action
+	 * @param id
+	 */
 	protected void addActionWithId(IMenuManager menuManager, Action action,
 			String id) {
 		action.setId(id);
 		menuManager.add(action);
 	}
 
+	/**
+	 * @param enabled
+	 */
 	public void setViewerSpecificContributionsEnabled(boolean enabled) {
 		HTMLEditor htmlEditor = null;
 		if (_editorPart instanceof HTMLEditor) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignerStyleActionGroup.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignerStyleActionGroup.java
index a3d6fa9..56accac 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignerStyleActionGroup.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignerStyleActionGroup.java
@@ -69,6 +69,9 @@
 			_mode = mode;
 		}
 
+		/**
+		 * @return the mode
+		 */
 		public int getMode() {
 			return _mode;
 		}
@@ -131,12 +134,8 @@
 				_designAction, _sourceAction };
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.actions.ActionGroup#updateActionBars()
-	 */
-	public void updateActionBars() {
+
+	private void updateActionBars() {
 		if (_htmlEditor == null) {
 			for (int i = 0; i < _actions.length; i++) {
 				_actions[i].setEnabled(false);
@@ -150,6 +149,9 @@
 		}
 	}
 
+	/**
+	 * @param editor
+	 */
 	public void setHTMLEditor(HTMLEditor editor) {
 		this._htmlEditor = editor;
 		if (editor != null) {
@@ -162,10 +164,9 @@
 		updateActionBars();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.actions.ActionGroup#fillActionBars(org.eclipse.ui.IActionBars)
+
+	/**
+	 * @param actionBars
 	 */
 	public void fillActionBars(IActionBars actionBars) {
 		IToolBarManager toolbar = actionBars.getToolBarManager();
@@ -175,6 +176,9 @@
 		toolbar.add(new Separator());
 	}
 
+	/**
+	 * dispose the action
+	 */
 	public void dispose() {
 		if (_htmlEditor != null) {
 			IKeyBindingService keyBindingService = _htmlEditor.getSite()
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignerUndoRedoAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignerUndoRedoAction.java
index c441f64..3d563ac 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignerUndoRedoAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/DesignerUndoRedoAction.java
@@ -33,9 +33,11 @@
 public class DesignerUndoRedoAction extends Action implements UpdateAction {
 	private boolean _undo = true; // if false means redo
 
-	private SimpleGraphicalEditor _designer;
+	private final SimpleGraphicalEditor _designer;
 
 	/**
+	 * @param undo 
+	 * @param designer 
 	 * 
 	 */
 	public DesignerUndoRedoAction(boolean undo, SimpleGraphicalEditor designer) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/OutlineViewAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/OutlineViewAction.java
index 030626d..987bc4f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/OutlineViewAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/OutlineViewAction.java
@@ -12,10 +12,20 @@
 
 import org.eclipse.ui.IPageLayout;
 
+/**
+ * A show view action that shows the outline view
+ *
+ */
 public class OutlineViewAction extends ShowViewAction 
 {
+    /**
+     * the action id
+     */
     public final static String ID = "org.eclipse.jst.pagedesigner.editors.actions.OutlineViewAction"; //$NON-NLS-1$
 
+    /**
+     * Default constructor
+     */
     public OutlineViewAction() 
     {
         super(ActionsMessages
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PageDesignerActionBarContributor2.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PageDesignerActionBarContributor2.java
index d5bbe2d..4457d64 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PageDesignerActionBarContributor2.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PageDesignerActionBarContributor2.java
@@ -35,11 +35,11 @@
 public class PageDesignerActionBarContributor2 extends
 		NestedEditorActionBarContributor implements IExtendedContributor {
 
-	protected DesignPageActionContributor _designViewerActionBarContributor = null;
+	private DesignPageActionContributor _designViewerActionBarContributor = null;
 
-	protected ISourceViewerActionBarContributor _sourceViewerActionContributor = null;
+	private ISourceViewerActionBarContributor _sourceViewerActionContributor = null;
 
-	protected HTMLEditor _htmlEditor = null;
+	private HTMLEditor _htmlEditor = null;
 
 	// EditorExtension
 	private static final String EDITOR_ID = IJMTConstants.EDITORID_HTML;
@@ -48,14 +48,9 @@
 
 	DesignerStyleActionGroup _group = new DesignerStyleActionGroup();
 
-//	private IHTMLGraphicalViewer _viewer = null;
-//
-//	private IStructuredModel _model = null;
-
-//	private final static Action action = new Action() {
-//        
-//	};
-
+	/**
+	 * Default constructor
+	 */
 	public PageDesignerActionBarContributor2() {
 		super();
 
@@ -84,11 +79,17 @@
 		_group.fillActionBars(actionBars);
 	}
 
+	/**
+	 * @param actionBars
+	 */
 	protected void initDesignViewerActionBarContributor(IActionBars actionBars) {
 		if (_designViewerActionBarContributor != null)
 			_designViewerActionBarContributor.init(actionBars, getPage());
 	}
 
+	/**
+	 * @param actionBars
+	 */
 	protected void initSourceViewerActionContributor(IActionBars actionBars) {
 		if (_sourceViewerActionContributor != null)
 			_sourceViewerActionContributor.init(actionBars, getPage());
@@ -120,7 +121,7 @@
 			_extendedContributor.contributeToMenu(menu);
 	}
 
-	protected void addToMenu(IMenuManager menu) {
+	private void addToMenu(IMenuManager menu) {
 		// IMenuManager menuMgr = new MenuManager(PD_EDITOR_MENU_LABEL,
 		// IJMTConstants.PD_EDITOR_MENU_ID);
 		// menu.insertBefore(IWorkbenchActionConstants.M_NAVIGATE, menuMgr);
@@ -230,6 +231,7 @@
 	}
 
 	/**
+	 * @param activeEditor 
 	 * 
 	 */
 	protected void deactivateSourceAndDesignPage(IEditorPart activeEditor) {
@@ -245,6 +247,9 @@
 		}
 	}
 
+	/**
+	 * @param activeEditor
+	 */
 	protected void activateDesignPage(SimpleGraphicalEditor activeEditor) {
 
 		if (_sourceViewerActionContributor != null /*
@@ -270,6 +275,9 @@
 		}
 	}
 
+	/**
+	 * @param activeEditor
+	 */
 	protected void activateSourcePage(StructuredTextEditor activeEditor) {
 		if (_designViewerActionBarContributor != null /*
 														 * &&
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PaletteViewAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PaletteViewAction.java
index f04b3b1..49f2645 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PaletteViewAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PaletteViewAction.java
@@ -20,11 +20,15 @@
  * @version 1.5
  */
 public class PaletteViewAction extends ShowViewAction {
+	/**
+	 * the action id
+	 */
 	public final static String ID = "org.eclipse.jst.pagedesigner.editors.actions.PaletteViewAction"; //$NON-NLS-1$
-	// TODO: dead?
-	//private final Element   _element;
-    //private final EditDomain _editDomain;
     
+	/**
+	 * @param element
+	 * @param editDomain
+	 */
 	public PaletteViewAction(Element element, EditDomain editDomain) {
         super(ActionsMessages.getString("PaletteViewAction.Menu.PaletteView")
                 , PaletteView.ID); //$NON-NLS-1$
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PropertiesViewAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PropertiesViewAction.java
index 77a085d..67abf65 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PropertiesViewAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/PropertiesViewAction.java
@@ -17,8 +17,14 @@
  * @author mengbo
  */
 public class PropertiesViewAction extends ShowViewAction {
+	/**
+	 * the id
+	 */
 	public final static String ID = "org.eclipse.jst.pagedesigner.editors.actions.PropertiesViewAction"; //$NON-NLS-1$
 
+	/**
+	 * Default constructor
+	 */
 	public PropertiesViewAction() 
     {
 		super(ActionsMessages
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/RelatedViewActionGroup.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/RelatedViewActionGroup.java
index 4434cf4..b7e6e4e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/RelatedViewActionGroup.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/RelatedViewActionGroup.java
@@ -42,6 +42,9 @@
 {
     private final EditDomain  _editDomain;
     
+    /**
+     * @param editDomain
+     */
     public RelatedViewActionGroup(EditDomain editDomain)
     {
         _editDomain = editDomain;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ShowViewAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ShowViewAction.java
index 52f0b0a..5422d60 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ShowViewAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/actions/ShowViewAction.java
@@ -28,6 +28,10 @@
     private static Logger _log = PDPlugin.getLogger(PropertiesViewAction.class);
     private final String _viewId;
     
+    /**
+     * @param text
+     * @param viewId
+     */
     public ShowViewAction(String text, String viewId) 
     {
         _viewId = viewId;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/IPageDesignerConstants.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/IPageDesignerConstants.java
index 911d9d2..b586f9d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/IPageDesignerConstants.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/IPageDesignerConstants.java
@@ -11,115 +11,280 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.editors.pagedesigner;
 
-public interface IPageDesignerConstants {
+/**
+ * The designer constants
+ * 
+ * TODO: dead?
+ *
+ */
+interface IPageDesignerConstants {
 	/**
 	 * JSP UI Component Tag Node
 	 */
 	public static final String DEFAULT_TAG_NAME = "tagname";
 
+	/**
+	 * keyword
+	 */
 	public static final String ATTR_TYPE_CDATA = "CDATA";
 
+	/**
+	 * basename attribute
+	 */
 	public static final String ATTR_LOADBUNDLE_1 = "basename";
 
+	/**
+	 * var attribute
+	 */
 	public static final String ATTR_LOADBUNDLE_2 = "var";
 
+	/**
+	 * columns attribute
+	 */
 	public static final String ATTR_PANELGRID_1 = "columns";
 
+	/**
+	 * summary attribute
+	 */
 	public static final String ATTR_PANELGRID_2 = "summary";
 
+	/**
+	 * title attribute
+	 */
 	public static final String ATTR_PANELGRID_3 = "title";
 
+	/**
+	 * action attribute
+	 */
 	public static final String ATTR_BUTTON_1 = "action";
 
+	/**
+	 * value attribute
+	 */
 	public static final String ATTR_BUTTON_2 = "value";
 
+	/**
+	 * url attribute
+	 */
 	public static final String ATTR_GRAPHICIMAGE_1 = "url";
 
+	/**
+	 * binding attribute
+	 */
 	public static final String ATTR_GRAPHICIMAGE_2 = "binding";
 
+	/**
+	 * binding attribute
+	 */
 	public static final String ATTR_OUTPUTTEXT_1 = "binding";
 
+	/**
+	 * value attribute
+	 */
 	public static final String ATTR_OUTPUTTEXT_2 = "value";
 
+	/**
+	 * styleClass attribute
+	 */
 	public static final String ATTR_OUTPUTTEXT_3 = "styleClass";
 
+	/**
+	 * dataWindowBean attribute
+	 */
 	public static final String ATTR_DATAWINDOW_1 = "dataWindowBean";
 
+	/**
+	 * scriptName attribute
+	 */
 	public static final String ATTR_DATAWINDOW_2 = "scriptName";
 
+	/**
+	 * page attribute
+	 */
 	public static final String ATTR_INCLUDE = "page";
 
+	/**
+	 * prefix atttribute
+	 */
 	public static final String ATTR_TAGLIB_1 = "prefix";
 
+	/**
+	 * uri attribute
+	 */
 	public static final String ATTR_TAGLIB_2 = "uri";
 
+	/**
+	 * bundle attribute
+	 */
 	public static final String RESOURCE_BUNDLE_MARK = "bundle";
 
+	/**
+	 * value attribute
+	 */
 	public static final String ATTR_RESOURCE_BUNDLE = "value";
 
+	/**
+	 * value attribute
+	 */
 	public static final String ATTR_FACET = "value";
 
+	/**
+	 * view tag
+	 */
 	public static final String TAG_VIEW_TYPE = "view";
 
+	/**
+	 * for tag
+	 */
 	public static final String TAG_FORM_TYPE = "form";
 
+	/**
+	 * text tag
+	 */
 	public static final String TAG_TEXT_TYPE = "text";
 
+	/**
+	 * loadBundle tag
+	 */
 	public static final String TAG_LOADBUNDLE_TYPE = "loadBundle";
 
+	/**
+	 * panelGrid tag
+	 */
 	public static final String TAG_PANELGRID_TYPE = "panelGrid";
 
+	/**
+	 * 
+	 */
 	public static final String TAG_IMAGE_TYPE = "image";
 
-	public String TAG_OUTPUTTEXT_TYPE = "outputText";
+	/**
+	 * outputText tag
+	 */
+	public static final String TAG_OUTPUTTEXT_TYPE = "outputText";
 
-	public String TAG_BUTTON_TYPE = "button";
+	/**
+	 * 
+	 */
+	public static final String TAG_BUTTON_TYPE = "button";
 
-	public String TAG_DATAWINDOW_TYPE = "datawindow";
+	/**
+	 * 
+	 */
+	public static final String TAG_DATAWINDOW_TYPE = "datawindow";
 
-	public String TAG_TAGLIB_TYPE = "taglib";
+	/**
+	 * 
+	 */
+	public static final String TAG_TAGLIB_TYPE = "taglib";
 
-	public String TAG_INCLUDE_TYPE = "include";
+	/**
+	 * 
+	 */
+	public static final String TAG_INCLUDE_TYPE = "include";
 
-	public String TAG_OTHERS_TYPE = "";
+	/**
+	 * 
+	 */
+	public static final String TAG_OTHERS_TYPE = "";
 
-	public String TAG_NAME_VIEW = "view";
+	/**
+	 * 
+	 */
+	public static final String TAG_NAME_VIEW = "view";
 
-	public String TAG_NAME_FORM = "form";
+	/**
+	 * 
+	 */
+	public static final String TAG_NAME_FORM = "form";
 
-	public String TAG_NAME_PANELGRID = "panelGrid";
+	/**
+	 * 
+	 */
+	public static final String TAG_NAME_PANELGRID = "panelGrid";
 
-	public String TAG_NAME_PANELGROUP = "panelGroup";
+	/**
+	 * 
+	 */
+	public static final String TAG_NAME_PANELGROUP = "panelGroup";
 
-	public String TAG_NAME_FACET = "facet";
+	/**
+	 * 
+	 */
+	public static final String TAG_NAME_FACET = "facet";
 
-	public String TAG_NAME_DATAWINDOW = "dataWindow";
+	/**
+	 * 
+	 */
+	public static final String TAG_NAME_DATAWINDOW = "dataWindow";
 
-	public String TAG_NAME_OUTPUTTEXT = "outputText";
+	/**
+	 * 
+	 */
+	public static final String TAG_NAME_OUTPUTTEXT = "outputText";
 
-	public String TAG_NAME_INCLUDE = "include";
+	/**
+	 * 
+	 */
+	public static final String TAG_NAME_INCLUDE = "include";
 
-	public String TAG_NAME_LOADBUNDLE = "loadBundle";
+	/**
+	 * 
+	 */
+	public static final String TAG_NAME_LOADBUNDLE = "loadBundle";
 
-	public String TAG_NAME_TAGLIB = "taglib";
+	/**
+	 * 
+	 */
+	public static final String TAG_NAME_TAGLIB = "taglib";
 
-	public String TAG_NAME_GRAPHICIMAGE = "graphicImage";
+	/**
+	 * graphicImage tag
+	 */
+	public static final String TAG_NAME_GRAPHICIMAGE = "graphicImage";
 
-	public String TAG_NAME_COMMANDBUTTON = "commandButton";
+	/**
+	 * commandButton tag
+	 */
+	public static final String TAG_NAME_COMMANDBUTTON = "commandButton";
 
-	public String REQUEST_TYPE_SELECT = "selection";
+	/**
+	 * 
+	 */
+	public static final String REQUEST_TYPE_SELECT = "selection";
 
+	/**
+	 * 
+	 */
 	public static final int EOF = -1;
 
-	public char CHAR_TAB = '\t';
+	/**
+	 * 
+	 */
+	public static final char CHAR_TAB = '\t';
 
-	public char CHAR_N_RETURN = '\n';
+	/**
+	 * 
+	 */
+	public static final char CHAR_N_RETURN = '\n';
 
-	public String STRING_N_RETURN = "\n";
+	/**
+	 * 
+	 */
+	public static final String STRING_N_RETURN = "\n";
 
-	public String STRING_BLANK = " ";
+	/**
+	 * 
+	 */
+	public static final String STRING_BLANK = " ";
 
-	public char CHAR_BLANK = ' ';
+	/**
+	 * 
+	 */
+	public static final char CHAR_BLANK = ' ';
 
-	public String FONT_NAME_HELVETICA = "Helvetica";
+	/**
+	 * 
+	 */
+	public static final String FONT_NAME_HELVETICA = "Helvetica";
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/MessageFormater.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/MessageFormater.java
index d9beaae..5b4d95d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/MessageFormater.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/MessageFormater.java
@@ -19,16 +19,15 @@
 /**
  * @A tool class for message format
  */
-public class MessageFormater {
+public final class MessageFormater {
 	private static Logger _log = PDPlugin.getLogger(MessageFormater.class);
 
 	/**
-	 * *
 	 * 
-	 * @param message:
+	 * @param message
 	 *            the parts for filling is {number}
 	 * @param o1
-	 * @return
+	 * @return the formatted string
 	 */
 	public static String format(String message, Object o1) {
 		try {
@@ -41,6 +40,12 @@
 		}
 	}
 
+	/**
+	 * @param message
+	 * @param o1
+	 * @param o2
+	 * @return the formatted string
+	 */
 	public static String format(String message, Object o1, Object o2) {
 		try {
 			Object[] args = new Object[] { o1, o2 };
@@ -52,6 +57,13 @@
 		}
 	}
 
+	/**
+	 * @param message
+	 * @param o1
+	 * @param o2
+	 * @param o3
+	 * @return the formatted string
+	 */
 	public static String format(String message, Object o1, Object o2, Object o3) {
 		try {
 			Object[] args = new Object[] { o1, o2, o3 };
@@ -63,6 +75,11 @@
 		}
 	}
 
+	/**
+	 * @param message
+	 * @param o
+	 * @return the formatted string
+	 */
 	public static String format(String message, Object o[]) {
 		try {
 			MessageFormat formater = new MessageFormat(message);
@@ -72,4 +89,9 @@
 			return "";
 		}
 	}
+	
+	private MessageFormater()
+	{
+	    // util class, no instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/PageDesignerResources.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/PageDesignerResources.java
index 763273a..ec83204 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/PageDesignerResources.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/pagedesigner/PageDesignerResources.java
@@ -45,6 +45,9 @@
 		setBundle(_resources, IJMTConstants.PAGEDESIGNER_RESOURCE_BUNDLE_FILE);
 	}
 
+	/**
+	 * @return the singleton
+	 */
 	public static PageDesignerResources getInstance() {
 		if (_resource == null) {
 			_resource = new PageDesignerResources();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteCustomizerDialog.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteCustomizerDialog.java
index 2f64b2b..a46fbbf 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteCustomizerDialog.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteCustomizerDialog.java
@@ -179,12 +179,12 @@
 		 */
 		public void update() {
 			//boolean enabled = false;
-			PaletteEntry entry = getSelectedPaletteEntry();
-			if (entry != null) {
+//			PaletteEntry entry = getSelectedPaletteEntry();
+//			if (entry != null) {
 				// if (getCustomizer() instanceof DesignerPaletteCustomizer)
 				// enabled = ((DesignerPaletteCustomizer)
 				// getCustomizer()).canExport(entry);
-			}
+//			}
 			setEnabled(true);
 		}
 
@@ -297,7 +297,7 @@
 	 * Content provider for dialog.
 	 * Displays only {@link TaglibPaletteDrawer}s
 	 */
-	private class DesignerPaletteContentProvider implements ITreeContentProvider {
+	private static class DesignerPaletteContentProvider implements ITreeContentProvider {
 
 		public Object[] getChildren(Object parentElement) {
 			if (parentElement instanceof DesignerPaletteRoot){
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteViewerProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteViewerProvider.java
index b836d30..203e40f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteViewerProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteViewerProvider.java
@@ -83,7 +83,7 @@
 		return pViewer;
 	}
 	
-	private class HideTagLibAction extends Action {
+	private static class HideTagLibAction extends Action {
 		private DrawerEditPart tagLib;
 		
 		/**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagImageManager.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagImageManager.java
new file mode 100644
index 0000000..f269213
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagImageManager.java
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
+package org.eclipse.jst.pagedesigner.editors.palette;
+
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.Model;
+import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.jst.jsf.common.metadata.internal.IImageDescriptorProvider;
+import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider;
+import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper;
+import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
+import org.eclipse.jst.pagedesigner.PDPlugin;
+import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.PaletteInfo;
+import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.PaletteInfos;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * Locates and creates Images for tags using the common metadata framework.
+ * 
+ * No caching is of images is occurring at this time.  
+ * 
+ * Some code is being duplicated in palette helper.   PaletteHelper should be re-factored to use this code
+ * 
+ */
+public class TagImageManager {
+	private static TagImageManager INSTANCE = null;
+	
+	private final static ImageDescriptor DEFAULT_SMALL_ICON = PDPlugin
+	.getDefault().getImageDescriptor(
+		"palette/GENERIC/small/PD_Palette_Default.gif");
+
+	private final static ImageDescriptor DEFAULT_LARGE_ICON = PDPlugin
+		.getDefault().getImageDescriptor(
+				"palette/GENERIC/large/PD_Palette_Default.gif");
+
+	private static final String TRAIT_ICON_SMALL = "small-icon";
+
+	private static final String TRAIT_ICON_LARGE = "large-icon";
+	
+	/**
+	 * @return singleton instance 
+	 */
+	public synchronized static TagImageManager getInstance() {
+		if (INSTANCE == null) {
+			INSTANCE = new TagImageManager();
+		}
+		return INSTANCE;
+	}	
+	
+	/**
+	 * @param project
+	 * @param nsUri
+	 * @param tagName
+	 * @return small image using metadata.  May be null.
+	 */
+	public Image getSmallIconImage(IProject project, String nsUri, String tagName) {
+		Image image = null;
+		Model model = getModel(project, nsUri);
+		if (model != null){
+			ImageDescriptor imgDesc = getSmallIconImageDescriptor(model, tagName);
+			if (imgDesc != null)
+				image = imgDesc.createImage();
+		}
+		
+		return image;
+	}
+	
+	/**
+	 * @param project
+	 * @param nsUri
+	 * @param tagName
+	 * @return large image using metadata.  May be null.
+	 */
+	public Image getLargeIconImage(IProject project, String nsUri, String tagName) {
+		Image image = null;
+		Model model = getModel(project, nsUri);
+		if (model != null){
+			ImageDescriptor imgDesc = getLargeIconImageDescriptor(model, nsUri);
+			if (imgDesc != null)
+				image = imgDesc.createImage();
+		}
+		
+		return image;
+	}
+	
+	private Model getModel(IProject project, String nsUri) {
+		ITaglibDomainMetaDataModelContext modelContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(project, nsUri);
+		Model model =TaglibDomainMetaDataQueryHelper.getModel(modelContext);
+		// no caching at this time so there is no need to listen to model notifications
+//		if (model != null && !hasAdapter(model))
+//			addAdapter(model);
+		return model;
+	}
+
+
+//	private void addAdapter(Model model) {
+//		if (model != null){			
+////			model.eAdapters().add(INSTANCE);  
+//		}		
+//	}
+//
+//	private boolean hasAdapter(Model model) {
+//		for(Adapter a : model.eAdapters()){
+//			if (a == INSTANCE)
+//				return true;
+//		}
+//		return false;
+//	}
+
+	private ImageDescriptor getSmallIconImageDescriptor(Model model, String tagName) {
+		return getIconImageDescriptor(model, tagName, true);
+	}
+	
+	private ImageDescriptor getLargeIconImageDescriptor(Model model, String tagName) {
+		return getIconImageDescriptor(model, tagName, false);
+	}
+	
+	private ImageDescriptor getIconImageDescriptor(Model model, String tagName, boolean small) {		
+		ImageDescriptor icon = null;
+		
+		//use palette infos if available
+		Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(model, "paletteInfos");
+		if (trait != null){
+			PaletteInfos tags = (PaletteInfos)trait.getValue();
+			for (Iterator it=tags.getInfos().iterator();it.hasNext();){
+				PaletteInfo tag = (PaletteInfo)it.next();
+				if (tag.getId().equalsIgnoreCase(tagName)){					
+					IMetaDataSourceModelProvider sourceProvider = ((Trait)tag.eContainer().eContainer()).getSourceModelProvider();
+					if (small)
+						icon = getImageDescriptorFromString(sourceProvider, tag.getSmallIcon(), DEFAULT_SMALL_ICON);
+					else
+						icon = getImageDescriptorFromString(sourceProvider, tag.getLargeIcon(), DEFAULT_LARGE_ICON);
+					
+					break;
+				}
+			}	
+		}
+		else {
+			for (Iterator it=model.getChildEntities().iterator();it.hasNext();){
+				Entity tagAsEntity = (Entity)it.next();
+				if (tagAsEntity.getId().equalsIgnoreCase(tagName)){										
+					if (small)
+						icon = getImageDescriptorFromTagTraitValueAsString(tagAsEntity, TRAIT_ICON_SMALL, DEFAULT_SMALL_ICON);
+					else
+						icon = getImageDescriptorFromTagTraitValueAsString(tagAsEntity, TRAIT_ICON_LARGE, DEFAULT_LARGE_ICON);	
+					
+					break;
+				}				
+			}
+			
+		}
+
+		return icon;
+	}
+		
+	private ImageDescriptor getImageDescriptorFromString(IMetaDataSourceModelProvider sourceModelProvider,  String imgDesc, ImageDescriptor defaultValue){
+		ImageDescriptor image = defaultValue;
+		IImageDescriptorProvider imageProvider = (IImageDescriptorProvider)sourceModelProvider.getAdapter(IImageDescriptorProvider.class);			
+		if (imageProvider != null){
+			image = imageProvider.getImageDescriptor(imgDesc);
+		}
+		return image;
+	}
+	
+	private ImageDescriptor getImageDescriptorFromTagTraitValueAsString(Entity entity, String key, ImageDescriptor defaultValue){
+		Trait t = TaglibDomainMetaDataQueryHelper.getTrait(entity, key);
+		if (t != null){
+			String imgDesc = TraitValueHelper.getValueAsString(t);
+			return getImageDescriptorFromString(t.getSourceModelProvider(), imgDesc, defaultValue);
+		}
+		return defaultValue;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java
index 034d012..7f14afb 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/TagToolPaletteEntry.java
@@ -10,20 +10,17 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.editors.palette;
 
-import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.gef.Tool;
 import org.eclipse.gef.palette.ToolEntry;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jst.pagedesigner.editors.palette.impl.TaglibPaletteDrawer;
-import org.eclipse.jst.pagedesigner.itemcreation.ITagCreator;
 import org.eclipse.jst.pagedesigner.itemcreation.ItemCreationTool;
-import org.eclipse.jst.pagedesigner.itemcreation.TagCreationFactory;
 
 /**
  * Represents a tag palette item entry in the web page designer palette
  *
  */
-public class TagToolPaletteEntry extends ToolEntry implements IAdaptable{
+public class TagToolPaletteEntry extends ToolEntry {
 
 	private String tagName;
 	
@@ -63,17 +60,6 @@
 		return ((TaglibPaletteDrawer)getParent()).getURI();
 	}
 
-	/**
-	 * Return an ITagCreator adpater or null
-	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
-	 */
-	public Object getAdapter(Class adapter) {
-		if (adapter == ITagCreator.class){
-			return TagCreationFactory.getInstance().createTagCreator(this);
-		}
-		return null;
-	}
-
 	/* (non-Javadoc)
 	 * @see org.eclipse.gef.palette.ToolEntry#createTool()
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java
index 9101cfb..314787e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java
@@ -147,7 +147,7 @@
 		if (node != null && refNode != null) {
 			String uri = refNode.getAttribute(PREFIX_ATTRIBUTE); //$NON-NLS-1$
 			if (uri != null) {
-				String prefix = JSPUtil.getPrefix(model, uri);
+				String prefix = JSPUtil.getOrCreatePrefix(model, uri, null);
 				node.setPrefix(prefix);
 			}
 		}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteHelper.java
index 525578d..ac2b352 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteHelper.java
@@ -131,6 +131,28 @@
 				String label1 = ((PaletteEntry)o1).getLabel();
 				String label2 = ((PaletteEntry)o2).getLabel();
 				
+				if (label1 == null)
+				{
+				    // if both null, then equal
+				    if (label2 == null)
+				    {
+				        return 0;
+				    }
+				    // otherwise, sort label 2 before
+			        return 1;
+				}
+				
+				
+				if (label2 == null)
+				{
+				    // if both null then equal
+				    if (label1 == null)
+				    {
+				        return 0;
+				    }
+				    // if label1 not null, then sort it first
+				    return -1;
+				}
 				return label1.compareTo(label2);
 			}
 			
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfo.java
index c65cdeb..0cfd389 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfo.java
@@ -33,12 +33,33 @@
  * @generated
  */
 public interface PaletteInfo extends EObject {
+	/**
+	 * the trait id name
+	 */
 	public static final String TRAIT_ID				= "paletteInfo";
+	/**
+	 * the display label name
+	 */
 	public static final String TRAIT_DISPLAY_LABEL 	= "display-label";
+	/**
+	 * the trait description name
+	 */
 	public static final String TRAIT_DESCRIPTION 	= "description";
+	/**
+	 * the expert trait
+	 */
 	public static final String TRAIT_IS_EXPERT 		= "expert";
+	/**
+	 * the hiddent trait
+	 */
 	public static final String TRAIT_IS_HIDDEN 		= "hidden";
+	/**
+	 * the small icon trait
+	 */
 	public static final String TRAIT_SMALL_ICON 	= "small-icon";
+	/**
+	 * the large icon trait
+	 */
 	public static final String TRAIT_LARGE_ICON 	= "large-icon";
 
 	/**
@@ -284,6 +305,7 @@
 
 	/**
 	 * <!-- begin-user-doc -->
+     * @return true if the expert flag is set 
 	 * <!-- end-user-doc -->
 	 * @model kind="operation"
 	 * @generated
@@ -292,6 +314,7 @@
 
 	/**
 	 * <!-- begin-user-doc -->
+     * @return true if the hidden flag is set 
 	 * <!-- end-user-doc -->
 	 * @model kind="operation"
 	 * @generated
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfos.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfos.java
index 684a78d..4afcd23 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfos.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfos.java
@@ -27,6 +27,9 @@
  * @generated
  */
 public interface PaletteInfos extends EObject {
+	/**
+	 * the palette infos trait id
+	 */
 	public static final String TRAIT_ID				= "paletteInfos";
 	/**
 	 * <!-- begin-user-doc -->
@@ -54,6 +57,8 @@
 
 	/**
 	 * <!-- begin-user-doc -->
+     * @param id 
+     * @return the palette info by id 
 	 * <!-- end-user-doc -->
 	 * @model idRequired="true"
 	 * @generated
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfosPackage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfosPackage.java
index ec8258d..22d296a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfosPackage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/PaletteInfosPackage.java
@@ -26,6 +26,7 @@
  * @model kind="package"
  * @generated
  */
+@SuppressWarnings("hiding")
 public interface PaletteInfosPackage extends EPackage {
 	/**
 	 * <!-- begin-user-doc -->
@@ -534,6 +535,7 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+//    @SuppressWarnings("hiding")
 	interface Literals {
 		/**
 		 * The meta object literal for the '{@link org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl.PaletteInfoImpl <em>Palette Info</em>}' class.
@@ -551,7 +553,7 @@
 		 * <!-- end-user-doc -->
 		 * @generated
 		 */
-		EAttribute PALETTE_INFO__ID = eINSTANCE.getPaletteInfo_Id();
+        EAttribute PALETTE_INFO__ID = eINSTANCE.getPaletteInfo_Id();
 
 		/**
 		 * The meta object literal for the '<em><b>Tag</b></em>' attribute feature.
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/TagCreationInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/TagCreationInfo.java
index 5ce6f92..dba7e5d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/TagCreationInfo.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/TagCreationInfo.java
@@ -28,6 +28,9 @@
  * @generated
  */
 public interface TagCreationInfo extends EObject {
+	/**
+	 * the name of the trait id
+	 */
 	public static final String TRAIT_ID = "tag-create";
 	/**
 	 * <!-- begin-user-doc -->
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfoImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfoImpl.java
index 37f4f93..a916e68 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfoImpl.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfoImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: PaletteInfoImpl.java,v 1.5 2007/04/16 19:55:08 itrimble Exp $
+ * $Id: PaletteInfoImpl.java,v 1.6 2007/09/25 00:31:41 cbateman Exp $
  */
 package org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl;
 
@@ -31,7 +31,7 @@
  * The following features are implemented:
  * <ul>
  *   <li>{@link org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl.PaletteInfoImpl#getId <em>Id</em>}</li>
- *   <li>{@link org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl.PaletteInfoImpl#getTag <em>Tag</em>}</li>
+ *   <li>{@link org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl.PaletteInfoImpl#getTag() <em>Tag</em>}</li>
  *   <li>{@link org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl.PaletteInfoImpl#getDisplayLabel <em>Display Label</em>}</li>
  *   <li>{@link org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl.PaletteInfoImpl#getDescription <em>Description</em>}</li>
  *   <li>{@link org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl.PaletteInfoImpl#getExpert <em>Expert</em>}</li>
@@ -322,9 +322,9 @@
 	 * @generated NOT
 	 */
 	private EObject getTagTraitValue(final String tagName, final String traitKey) {
-		Entity tag = getTag(tagName);
-		if (tag != null){
-			for (Iterator it=tag.getTraits().iterator();it.hasNext();){
+		Entity tag_ = getTag(tagName);
+		if (tag_ != null){
+			for (Iterator it=tag_.getTraits().iterator();it.hasNext();){
 				Trait trait = (Trait)it.next();
 				if (traitKey.equals(trait.getId()))
 					return trait.getValue(); 	
@@ -361,9 +361,9 @@
 	 */
 	private Entity findTag(Model model, String tagid) {
 		for (Iterator it=model.getChildEntities().iterator();it.hasNext();){
-			Entity tag = (Entity)it.next();
-			if (tagid.equals(tag.getId()))
-					return tag;
+			Entity tag_ = (Entity)it.next();
+			if (tagid.equals(tag_.getId()))
+					return tag_;
 		}
 		return null;
 	}
@@ -517,6 +517,7 @@
 
 	/**
 	 * <!-- begin-user-doc -->
+     * @return the tag creation info 
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfosFactoryImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfosFactoryImpl.java
index 4d68fe7..4b1af20 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfosFactoryImpl.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfosFactoryImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: PaletteInfosFactoryImpl.java,v 1.3 2007/04/16 19:55:08 itrimble Exp $
+ * $Id: PaletteInfosFactoryImpl.java,v 1.4 2007/09/25 00:32:06 cbateman Exp $
  */
 package org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl;
 
@@ -36,6 +36,7 @@
 	/**
 	 * Creates the default factory implementation.
 	 * <!-- begin-user-doc -->
+     * @return the palette info factory 
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
@@ -140,6 +141,7 @@
 
 	/**
 	 * <!-- begin-user-doc -->
+     * @return the palette info package 
 	 * <!-- end-user-doc -->
 	 * @deprecated
 	 * @generated
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfosPackageImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfosPackageImpl.java
index 53bebb0..88acc00 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfosPackageImpl.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfosPackageImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: PaletteInfosPackageImpl.java,v 1.3 2007/04/16 19:55:08 itrimble Exp $
+ * $Id: PaletteInfosPackageImpl.java,v 1.4 2007/09/25 00:32:06 cbateman Exp $
  */
 package org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl;
 
@@ -112,6 +112,7 @@
 	 * <p>Invocation of this method will not affect any packages that have
 	 * already been initialized.
 	 * <!-- begin-user-doc -->
+     * @return the palette info package 
 	 * <!-- end-user-doc -->
 	 * @see #eNS_URI
 	 * @see #createPackageContents()
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/TagCreationTemplateImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/TagCreationTemplateImpl.java
index 1250ab1..d4b9955 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/TagCreationTemplateImpl.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/TagCreationTemplateImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: TagCreationTemplateImpl.java,v 1.3 2007/04/16 19:55:08 itrimble Exp $
+ * $Id: TagCreationTemplateImpl.java,v 1.4 2007/09/25 00:32:06 cbateman Exp $
  */
 package org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl;
 
@@ -76,6 +76,9 @@
 
 	/**
 	 * <!-- begin-user-doc -->
+     * @param newTemplate 
+     * @param msgs 
+     * @return the notification chain 
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/util/PaletteInfosSwitch.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/util/PaletteInfosSwitch.java
index 0a980ac..8ef782e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/util/PaletteInfosSwitch.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/util/PaletteInfosSwitch.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: PaletteInfosSwitch.java,v 1.2 2007/04/16 19:55:16 itrimble Exp $
+ * $Id: PaletteInfosSwitch.java,v 1.3 2007/09/25 00:31:06 cbateman Exp $
  */
 package org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.util;
 
@@ -57,6 +57,7 @@
 	/**
 	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
 	 * <!-- begin-user-doc -->
+     * @param theEObject 
 	 * <!-- end-user-doc -->
 	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
@@ -68,6 +69,8 @@
 	/**
 	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
 	 * <!-- begin-user-doc -->
+     * @param theEClass 
+     * @param theEObject 
 	 * <!-- end-user-doc -->
 	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
@@ -76,18 +79,18 @@
 		if (theEClass.eContainer() == modelPackage) {
 			return doSwitch(theEClass.getClassifierID(), theEObject);
 		}
-		else {
-			List eSuperTypes = theEClass.getESuperTypes();
-			return
-				eSuperTypes.isEmpty() ?
-					defaultCase(theEObject) :
-					doSwitch((EClass)eSuperTypes.get(0), theEObject);
-		}
+        List eSuperTypes = theEClass.getESuperTypes();
+        return
+        	eSuperTypes.isEmpty() ?
+        		defaultCase(theEObject) :
+        		doSwitch((EClass)eSuperTypes.get(0), theEObject);
 	}
 
 	/**
 	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
 	 * <!-- begin-user-doc -->
+     * @param classifierID 
+     * @param theEObject 
 	 * <!-- end-user-doc -->
 	 * @return the first non-null result returned by a <code>caseXXX</code> call.
 	 * @generated
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/IPropertyPageDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/IPropertyPageDescriptor.java
new file mode 100644
index 0000000..faa0e6e
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/IPropertyPageDescriptor.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.editors.properties;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * Property descriptor for metadata enabled tag attributes in the WPE property pages.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * Not intended to be implemented by clients. 
+ */
+public interface IPropertyPageDescriptor extends IMetaDataEnabledFeature, IAdaptable{
+	/**
+	 * Trait id for defining quick edit tab sections.   Value must be of type qe:QuickEditTabSections
+	 * eg. <value xsi:type="qe:QuickEditTabSections">
+	 */
+	public static final String QUICK_EDIT_TAB = "quick-edit-tab";
+	/**
+	 * Trait id for category name value
+	 */
+	public static final String PROP_DESC_CATEGORY = "category";
+	
+//	/**
+//	 * Trait id for fully qualified cell editor class name
+//	 */
+//	public static final String PROP_DESC_CELL_EDITOR = "cell-editor";
+//	/**
+//	 * Trait id for fully qualified dialog field editor name
+//	 */
+//	public static final String PROP_DESC_DIALOG_FIELD_EDITOR = "dialog-field-editor";
+	
+	/**
+	 * @return name of attribute.  Must not be null.
+	 */
+	public String getAttributeName();
+	/**
+	 * @return category name.  Must not be null.
+	 */
+	public String getCategory();
+	/**
+	 * @return label to use.  Must not be null.
+	 */
+	public String getLabel();
+	/**
+	 * @return description.   May return null.
+	 */
+	public String getDescription();
+	/**
+	 * @return whether this is a required property.   Default false.
+	 */
+	public boolean isRequired();
+	/**
+	 * @param parent
+	 * @return cell editor to use.   May be null.
+	 */
+	public CellEditor getCellEditor(Composite parent);
+	/**
+	 * @return dialog field editor to use.   May be null.
+	 */
+	public DialogField getDialogFieldEditor();
+	/**
+	 * @return uri. Must not be null.
+	 */
+	public String getUri();
+	/**
+	 * @return tag name.  Must not be null.
+	 */
+	public String getTagName();
+	/**
+	 * @return fully qualified attribute-value-runtime-type as String
+	 */
+	public String getValueType();
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/internal/EditorValidatorAdapter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/internal/EditorValidatorAdapter.java
new file mode 100644
index 0000000..a2f6304
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/internal/EditorValidatorAdapter.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.editors.properties.internal;
+
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.viewers.ICellEditorValidator;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidationMessage;
+
+/**
+ * Adapts IValidValues to ICellEditorValidator
+ *
+ */
+public class EditorValidatorAdapter implements ICellEditorValidator, IInputValidator {
+
+	private IValidValues _vvs;
+
+	/**
+	 * Constructor
+	 * @param vvs
+	 */
+	public EditorValidatorAdapter(IValidValues vvs) {
+		_vvs = vvs;
+	}
+
+	public String isValid(Object value) {
+		//for now, if value is not a string, return true
+		if (value instanceof String)
+			return isValid((String)value);
+		return null;
+	}
+	
+	public String isValid(String value) {
+		_vvs.getValidationMessages().clear();
+		if (_vvs.isValidValue(value))
+			return null;//is valid
+
+		return ((IValidationMessage)_vvs.getValidationMessages().get(0)).getMessage();
+
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/internal/PropertyDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/internal/PropertyDescriptor.java
new file mode 100644
index 0000000..acb552e
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/internal/PropertyDescriptor.java
@@ -0,0 +1,194 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.editors.properties.internal;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ICellEditorValidator;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.metadataprocessors.AbstractMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledProcessingFactory;
+import org.eclipse.jst.jsf.metadataprocessors.features.IDefaultValue;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.IValidValues;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.meta.EditorCreator;
+import org.eclipse.jst.pagedesigner.meta.internal.CellEditorFactoryRegistry;
+import org.eclipse.jst.pagedesigner.properties.ITabbedPropertiesConstants;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+import org.w3c.dom.Element;
+
+/**
+ * MD enabled feature of an attribute value runtime type allowing for the tabbed property
+ * page to work
+ *
+ */
+public class PropertyDescriptor extends AbstractMetaDataEnabledFeature
+		implements IMetaDataEnabledFeature, IPropertyPageDescriptor, IAdaptable {
+
+	/**
+	 * Constructor
+	 */
+	public PropertyDescriptor() {
+		// TODO Auto-generated constructor stub
+	}
+
+	//IPropertyPageDescriptor 
+	public String getCategory() {		
+		String cat = getTraitValueAsString(IPropertyPageDescriptor.PROP_DESC_CATEGORY);
+		return cat != null ? cat : ITabbedPropertiesConstants.OTHER_CATEGORY;
+	}
+
+	public CellEditor getCellEditor(Composite parent) {
+//		TODO: allow for override of the factory by using MD
+//		Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(
+//				getMetaDataContext().getEntity(),
+//				IPropertyPageDescriptor.PROP_DESC_CELL_EDITOR);
+//		
+//		if (trait != null) {
+//			String classname = TraitValueHelper.getValueAsString(trait);
+//			if (classname != null && ! classname.equals("")){
+//				try {
+//					Class klass = PDPlugin.getDefault().getBundle().loadClass(classname);
+//					if (klass != null){
+//						//
+//					}
+//				} catch (ClassNotFoundException e) {//
+//					String msg = "Unable to locate cell editor:"+classname+ " for "+toString();
+//					PDPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, PDPlugin.getPluginId(), msg));
+//				}
+//			}
+//		}
+		//otherwise use factory
+		Element element = (Element)IStructuredDocumentContextResolverFactory.INSTANCE.getDOMContextResolver(getStructuredDocumentContext()).getNode();		
+		return CellEditorFactoryRegistry.getInstance().createCellEditor(parent, this, element);
+	}
+
+	public String getDescription() {
+		return getTraitValueAsString("description");
+	}
+
+	public String getLabel() {
+		String label = getTraitValueAsString("display-label");
+		if (label == null) {
+			label = getMetaDataContext().getEntity().getId();
+		}
+		return label + ":";
+	}
+
+	public boolean isRequired() {
+		return getTraitValueAsBoolean("required");
+	}
+
+	public DialogField getDialogFieldEditor() {
+		//TODO: allow for override of the factory by using MD
+//		Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(
+//				getMetaDataContext().getEntity(),
+//				IPropertyPageDescriptor.PROP_DESC_DIALOG_FIELD_EDITOR);
+//		
+//		if (trait != null) {
+//			String classname = TraitValueHelper.getValueAsString(trait);
+//			if (classname != null && ! classname.equals("")){
+//				try {
+//					Class klass = PDPlugin.getDefault().getBundle().loadClass(classname);
+//					if (klass != null){
+//						//
+//					}
+//				} catch (ClassNotFoundException e) {//
+//					String msg = "Unable to locate cell editor:"+classname+ " for "+toString();
+//					PDPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, PDPlugin.getPluginId(), msg));
+//				}
+//			}
+//		}
+		//otherwise use factory
+		EditorCreator creator = EditorCreator.getInstance();
+		return creator.createDialogFieldWithWrapper(getUri(),
+				getTagName(),this, null);
+	}
+
+	public String getTagName() {
+		return getTagEntity().getId();
+	}
+
+	public String getUri() {
+		return getMetaDataContext().getEntity().getModel().getCurrentModelContext().getUri();
+	}
+	
+	public String getValueType() {
+		return getTraitValueAsString(MetaDataEnabledProcessingFactory.ATTRIBUTE_VALUE_RUNTIME_TYPE_PROP_NAME);
+	}
+
+	public String getAttributeName() {
+		return getMetaDataContext().getEntity().getId();
+	}
+
+	public Object getAdapter(Class adapter) {
+		if (IPropertyDescriptor.class == adapter) {
+			return new PropertyDescriptorAdapter(this);
+		}
+		else if (IPossibleValues.class == adapter) {
+			List pvs = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(
+						IPossibleValues.class, 
+						getStructuredDocumentContext(), 
+						getAttributeEntity());
+			if (!pvs.isEmpty())
+				return pvs.get(0);
+		}
+		else if (IDefaultValue.class == adapter) {
+			List dvs = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(
+						IDefaultValue.class, 
+						getStructuredDocumentContext(), 
+						getAttributeEntity());
+			if (!dvs.isEmpty())
+				return dvs.get(0);
+		}
+		else if (ICellEditorValidator.class == adapter) {
+			IValidValues vvs = (IValidValues)getAdapter(IValidValues.class);
+			if (vvs != null)
+				return new EditorValidatorAdapter(vvs);			
+		
+		}
+		else if (IInputValidator.class == adapter) {
+				IValidValues vvs = (IValidValues)getAdapter(IValidValues.class);
+				if (vvs != null)	
+					return new EditorValidatorAdapter(vvs);				
+		}
+		else if (IValidValues.class == adapter) {
+			List vvs = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(
+						IValidValues.class, 
+						getStructuredDocumentContext(), 
+						getAttributeEntity());
+			if (!vvs.isEmpty())
+				return vvs.get(0);
+		}
+		return null;
+	}
+	
+	private Entity getTagEntity() {
+		return (Entity)getAttributeEntity().eContainer();
+	}
+	
+	private Entity getAttributeEntity() {
+		return getMetaDataContext().getEntity();
+	}
+	
+	public String toString() {
+		return getUri()+"/"+getTagName()+"/"+getAttributeName();
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/internal/PropertyDescriptorAdapter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/internal/PropertyDescriptorAdapter.java
new file mode 100644
index 0000000..a946b29
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/internal/PropertyDescriptorAdapter.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.editors.properties.internal;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+
+/**
+ * Adapts the MetadataEnabledFeature <code>org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor</code>, to a <code>org.eclipse.ui.views.properties.IPropertyDescriptor</code> 
+ *
+ */
+public class PropertyDescriptorAdapter implements IPropertyDescriptor{
+
+	private IPropertyPageDescriptor _ppd;
+
+	/**
+	 * Constructor
+	 * @param propertyPageDescriptor
+	 */
+	public PropertyDescriptorAdapter(IPropertyPageDescriptor propertyPageDescriptor) {
+		_ppd = propertyPageDescriptor;
+	}
+
+	public CellEditor createPropertyEditor(Composite parent) {
+		return _ppd.getCellEditor(parent);
+	}
+
+	public String getCategory() {
+		return _ppd.getCategory();
+	}
+
+	public String getDescription() {
+		return _ppd.getDescription();
+	}
+
+	public String getDisplayName() {
+		return _ppd.getAttributeName();
+	}
+
+	public String[] getFilterFlags() {
+		return null;
+	}
+
+	public Object getHelpContextIds() {
+		return null;//FIXME
+	}
+
+	public Object getId() {
+		return _ppd.getAttributeName();
+	}
+
+	public ILabelProvider getLabelProvider() {	
+		return null;//FIXME: do better?  Used to supply labels for attribute property sheet (not quick edit)
+	}
+
+	public boolean isCompatibleWith(IPropertyDescriptor anotherProperty) {
+		return false;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/QuickEditTabSections.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/QuickEditTabSections.java
new file mode 100644
index 0000000..f0cfad4
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/QuickEditTabSections.java
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: QuickEditTabSections.java,v 1.1 2007/12/07 23:43:40 gkessler Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Quick Edit Tab Sections</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections#getSections <em>Sections</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage#getQuickEditTabSections()
+ * @model
+ * @generated
+ */
+public interface QuickEditTabSections extends EObject {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2007 Oracle Corporation";
+	
+	/**
+	 * trait id to use
+	 * @generated NOT
+	 */
+	String TRAIT_ID = "quick-edit-tab";
+	
+	/**
+	 * Returns the value of the '<em><b>Sections</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Sections</em>' containment reference list isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Sections</em>' containment reference list.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage#getQuickEditTabSections_Sections()
+	 * @model containment="true"
+	 *        extendedMetaData="kind='element' name='section'"
+	 * @generated
+	 */
+	EList<SectionInfo> getSections();
+
+} // QuickEditTabSections
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/QuickEditTabSectionsFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/QuickEditTabSectionsFactory.java
new file mode 100644
index 0000000..3484b03
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/QuickEditTabSectionsFactory.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: QuickEditTabSectionsFactory.java,v 1.1 2007/12/07 23:43:40 gkessler Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage
+ * @generated
+ */
+public interface QuickEditTabSectionsFactory extends EFactory {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2007 Oracle Corporation";
+
+	/**
+	 * The singleton instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	QuickEditTabSectionsFactory eINSTANCE = org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsFactoryImpl.init();
+
+	/**
+	 * Returns a new object of class '<em>Quick Edit Tab Sections</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Quick Edit Tab Sections</em>'.
+	 * @generated
+	 */
+	QuickEditTabSections createQuickEditTabSections();
+
+	/**
+	 * Returns a new object of class '<em>Section Info</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Section Info</em>'.
+	 * @generated
+	 */
+	SectionInfo createSectionInfo();
+
+	/**
+	 * Returns the package supported by this factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the package supported by this factory.
+	 * @generated
+	 */
+	QuickEditTabSectionsPackage getQuickEditTabSectionsPackage();
+
+} //QuickEditTabSectionsFactory
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/QuickEditTabSectionsPackage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/QuickEditTabSectionsPackage.java
new file mode 100644
index 0000000..1367dfe
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/QuickEditTabSectionsPackage.java
@@ -0,0 +1,288 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: QuickEditTabSectionsPackage.java,v 1.4 2008/02/01 21:52:33 gkessler Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsFactory
+ * @model kind="package"
+ * @generated
+ */
+@SuppressWarnings("hiding")
+public interface QuickEditTabSectionsPackage extends EPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2007 Oracle Corporation";
+
+	/**
+	 * The package name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNAME = "quickedittabsections";
+
+	/**
+	 * The package namespace URI.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_URI = "http://org.eclipse.jsf.pagedesigner/QuickEditTabSections.ecore";
+
+	/**
+	 * The package namespace name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String eNS_PREFIX = "qe";
+
+	/**
+	 * The singleton instance of the package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	QuickEditTabSectionsPackage eINSTANCE = org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsPackageImpl.init();
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsImpl <em>Quick Edit Tab Sections</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsImpl
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsPackageImpl#getQuickEditTabSections()
+	 * @generated
+	 */
+	int QUICK_EDIT_TAB_SECTIONS = 0;
+
+	/**
+	 * The feature id for the '<em><b>Sections</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int QUICK_EDIT_TAB_SECTIONS__SECTIONS = 0;
+
+	/**
+	 * The number of structural features of the '<em>Quick Edit Tab Sections</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int QUICK_EDIT_TAB_SECTIONS_FEATURE_COUNT = 1;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.SectionInfoImpl <em>Section Info</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.SectionInfoImpl
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsPackageImpl#getSectionInfo()
+	 * @generated
+	 */
+	int SECTION_INFO = 1;
+
+	/**
+	 * The feature id for the '<em><b>Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SECTION_INFO__ID = 0;
+
+	/**
+	 * The feature id for the '<em><b>Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SECTION_INFO__TYPE = 1;
+
+	/**
+	 * The number of structural features of the '<em>Section Info</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SECTION_INFO_FEATURE_COUNT = 2;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE <em>SECTION TYPE</em>}' enum.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsPackageImpl#getSECTION_TYPE()
+	 * @generated
+	 */
+	int SECTION_TYPE = 2;
+
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections <em>Quick Edit Tab Sections</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Quick Edit Tab Sections</em>'.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections
+	 * @generated
+	 */
+	EClass getQuickEditTabSections();
+
+	/**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections#getSections <em>Sections</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Sections</em>'.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections#getSections()
+	 * @see #getQuickEditTabSections()
+	 * @generated
+	 */
+	EReference getQuickEditTabSections_Sections();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo <em>Section Info</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Section Info</em>'.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo
+	 * @generated
+	 */
+	EClass getSectionInfo();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo#getId <em>Id</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Id</em>'.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo#getId()
+	 * @see #getSectionInfo()
+	 * @generated
+	 */
+	EAttribute getSectionInfo_Id();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo#getType <em>Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Type</em>'.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo#getType()
+	 * @see #getSectionInfo()
+	 * @generated
+	 */
+	EAttribute getSectionInfo_Type();
+
+	/**
+	 * Returns the meta object for enum '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE <em>SECTION TYPE</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>SECTION TYPE</em>'.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE
+	 * @generated
+	 */
+	EEnum getSECTION_TYPE();
+
+	/**
+	 * Returns the factory that creates the instances of the model.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the factory that creates the instances of the model.
+	 * @generated
+	 */
+	QuickEditTabSectionsFactory getQuickEditTabSectionsFactory();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * Defines literals for the meta objects that represent
+	 * <ul>
+	 *   <li>each class,</li>
+	 *   <li>each feature of each class,</li>
+	 *   <li>each enum,</li>
+	 *   <li>and each data type</li>
+	 * </ul>
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+//    @SuppressWarnings("hiding")
+	interface Literals {
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsImpl <em>Quick Edit Tab Sections</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsImpl
+		 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsPackageImpl#getQuickEditTabSections()
+		 * @generated
+		 */
+        EClass QUICK_EDIT_TAB_SECTIONS = eINSTANCE.getQuickEditTabSections();
+
+		/**
+		 * The meta object literal for the '<em><b>Sections</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EReference QUICK_EDIT_TAB_SECTIONS__SECTIONS = eINSTANCE.getQuickEditTabSections_Sections();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.SectionInfoImpl <em>Section Info</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.SectionInfoImpl
+		 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsPackageImpl#getSectionInfo()
+		 * @generated
+		 */
+		EClass SECTION_INFO = eINSTANCE.getSectionInfo();
+
+		/**
+		 * The meta object literal for the '<em><b>Id</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SECTION_INFO__ID = eINSTANCE.getSectionInfo_Id();
+
+		/**
+		 * The meta object literal for the '<em><b>Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute SECTION_INFO__TYPE = eINSTANCE.getSectionInfo_Type();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE <em>SECTION TYPE</em>}' enum.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE
+		 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsPackageImpl#getSECTION_TYPE()
+		 * @generated
+		 */
+		EEnum SECTION_TYPE = eINSTANCE.getSECTION_TYPE();
+
+	}
+
+} //QuickEditTabSectionsPackage
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/SECTION_TYPE.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/SECTION_TYPE.java
new file mode 100644
index 0000000..b85aaa0
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/SECTION_TYPE.java
@@ -0,0 +1,224 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: SECTION_TYPE.java,v 1.2 2007/12/12 16:43:21 gkessler Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>SECTION TYPE</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage#getSECTION_TYPE()
+ * @model
+ * @generated
+ */
+public enum SECTION_TYPE implements Enumerator {
+	/**
+	 * The '<em><b>ATTRIBUTE</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #ATTRIBUTE_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	ATTRIBUTE(0, "ATTRIBUTE", "ATTRIBUTE"),
+
+	/**
+	 * The '<em><b>SECTION</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #SECTION_VALUE
+	 * @generated
+	 * @ordered
+	 */
+	SECTION(1, "SECTION", "SECTION");
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2007 Oracle Corporation";
+
+	/**
+	 * The '<em><b>ATTRIBUTE</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>ATTRIBUTE</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #ATTRIBUTE
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int ATTRIBUTE_VALUE = 0;
+
+	/**
+	 * The '<em><b>SECTION</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of '<em><b>SECTION</b></em>' literal object isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @see #SECTION
+	 * @model
+	 * @generated
+	 * @ordered
+	 */
+	public static final int SECTION_VALUE = 1;
+
+	/**
+	 * An array of all the '<em><b>SECTION TYPE</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final SECTION_TYPE[] VALUES_ARRAY =
+		new SECTION_TYPE[] {
+			ATTRIBUTE,
+			SECTION,
+		};
+
+	/**
+	 * A public read-only list of all the '<em><b>SECTION TYPE</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final List<SECTION_TYPE> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+	/**
+	 * Returns the '<em><b>SECTION TYPE</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param literal 
+	 * @return SECTION_TYPE
+	 * @generated
+	 */
+	public static SECTION_TYPE get(String literal) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			SECTION_TYPE result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>SECTION TYPE</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param name 
+	 * @return SECTION_TYPE
+	 * @generated
+	 */
+	public static SECTION_TYPE getByName(String name) {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			SECTION_TYPE result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the '<em><b>SECTION TYPE</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value 
+	 * @return SECTION_TYPE
+	 * @generated
+	 */
+	public static SECTION_TYPE get(int value) {
+		switch (value) {
+			case ATTRIBUTE_VALUE: return ATTRIBUTE;
+			case SECTION_VALUE: return SECTION;
+		}
+		return null;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final int value;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String name;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private final String literal;
+
+	/**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private SECTION_TYPE(int value, String name, String literal) {
+		this.value = value;
+		this.name = name;
+		this.literal = literal;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public int getValue() {
+	  return value;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getName() {
+	  return name;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getLiteral() {
+	  return literal;
+	}
+
+	/**
+	 * Returns the literal value of the enumerator, which is its string representation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		return literal;
+	}
+	
+} //SECTION_TYPE
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/SectionInfo.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/SectionInfo.java
new file mode 100644
index 0000000..fcb9161
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/SectionInfo.java
@@ -0,0 +1,91 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: SectionInfo.java,v 1.1 2007/12/07 23:43:40 gkessler Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Section Info</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo#getId <em>Id</em>}</li>
+ *   <li>{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo#getType <em>Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage#getSectionInfo()
+ * @model
+ * @generated
+ */
+public interface SectionInfo extends EObject {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	String copyright = "Copyright (c) 2007 Oracle Corporation";
+
+	/**
+	 * Returns the value of the '<em><b>Id</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Id</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Id</em>' attribute.
+	 * @see #setId(String)
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage#getSectionInfo_Id()
+	 * @model required="true"
+	 * @generated
+	 */
+	String getId();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo#getId <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Id</em>' attribute.
+	 * @see #getId()
+	 * @generated
+	 */
+	void setId(String value);
+
+	/**
+	 * Returns the value of the '<em><b>Type</b></em>' attribute.
+	 * The default value is <code>"ATTRIBUTE"</code>.
+	 * The literals are from the enumeration {@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE}.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type</em>' attribute.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE
+	 * @see #setType(SECTION_TYPE)
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage#getSectionInfo_Type()
+	 * @model default="ATTRIBUTE" unique="false"
+	 * @generated
+	 */
+	SECTION_TYPE getType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo#getType <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type</em>' attribute.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE
+	 * @see #getType()
+	 * @generated
+	 */
+	void setType(SECTION_TYPE value);
+
+} // SectionInfo
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/QuickEditTabSectionsFactoryImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/QuickEditTabSectionsFactoryImpl.java
new file mode 100644
index 0000000..3e13edd
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/QuickEditTabSectionsFactoryImpl.java
@@ -0,0 +1,176 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: QuickEditTabSectionsFactoryImpl.java,v 1.2 2008/01/09 19:40:28 cbateman Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsFactory;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class QuickEditTabSectionsFactoryImpl extends EFactoryImpl implements QuickEditTabSectionsFactory {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2007 Oracle Corporation";
+
+	/**
+	 * Creates the default factory implementation.
+	 * <!-- begin-user-doc -->
+     * @return the factory 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static QuickEditTabSectionsFactory init() {
+		try {
+			QuickEditTabSectionsFactory theQuickEditTabSectionsFactory = (QuickEditTabSectionsFactory)EPackage.Registry.INSTANCE.getEFactory("http://org.eclipse.jsf.pagedesigner/QuickEditTabSections.ecore"); 
+			if (theQuickEditTabSectionsFactory != null) {
+				return theQuickEditTabSectionsFactory;
+			}
+		}
+		catch (Exception exception) {
+			EcorePlugin.INSTANCE.log(exception);
+		}
+		return new QuickEditTabSectionsFactoryImpl();
+	}
+
+	/**
+	 * Creates an instance of the factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public QuickEditTabSectionsFactoryImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EObject create(EClass eClass) {
+		switch (eClass.getClassifierID()) {
+			case QuickEditTabSectionsPackage.QUICK_EDIT_TAB_SECTIONS: return createQuickEditTabSections();
+			case QuickEditTabSectionsPackage.SECTION_INFO: return createSectionInfo();
+			default:
+				throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object createFromString(EDataType eDataType, String initialValue) {
+		switch (eDataType.getClassifierID()) {
+			case QuickEditTabSectionsPackage.SECTION_TYPE:
+				return createSECTION_TYPEFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String convertToString(EDataType eDataType, Object instanceValue) {
+		switch (eDataType.getClassifierID()) {
+			case QuickEditTabSectionsPackage.SECTION_TYPE:
+				return convertSECTION_TYPEToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public QuickEditTabSections createQuickEditTabSections() {
+		QuickEditTabSectionsImpl quickEditTabSections = new QuickEditTabSectionsImpl();
+		return quickEditTabSections;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SectionInfo createSectionInfo() {
+		SectionInfoImpl sectionInfo = new SectionInfoImpl();
+		return sectionInfo;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * @param eDataType 
+     * @param initialValue 
+     * @return the SECTION_TYPE enumerator 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SECTION_TYPE createSECTION_TYPEFromString(EDataType eDataType, String initialValue) {
+		SECTION_TYPE result = SECTION_TYPE.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+		return result;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * @param eDataType 
+     * @param instanceValue 
+     * @return the String version of the section type 
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String convertSECTION_TYPEToString(EDataType eDataType, Object instanceValue) {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public QuickEditTabSectionsPackage getQuickEditTabSectionsPackage() {
+		return (QuickEditTabSectionsPackage)getEPackage();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+     * @return the package 
+	 * <!-- end-user-doc -->
+	 * @deprecated
+	 * @generated
+	 */
+	@Deprecated
+	public static QuickEditTabSectionsPackage getPackage() {
+		return QuickEditTabSectionsPackage.eINSTANCE;
+	}
+
+} //QuickEditTabSectionsFactoryImpl
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/QuickEditTabSectionsImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/QuickEditTabSectionsImpl.java
new file mode 100644
index 0000000..b433d65
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/QuickEditTabSectionsImpl.java
@@ -0,0 +1,157 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: QuickEditTabSectionsImpl.java,v 1.1 2007/12/07 23:43:47 gkessler Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Quick Edit Tab Sections</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.QuickEditTabSectionsImpl#getSections <em>Sections</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class QuickEditTabSectionsImpl extends EObjectImpl implements QuickEditTabSections {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2007 Oracle Corporation";
+
+	/**
+	 * The cached value of the '{@link #getSections() <em>Sections</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSections()
+	 * @generated
+	 * @ordered
+	 */
+	protected EList<SectionInfo> sections;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected QuickEditTabSectionsImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return QuickEditTabSectionsPackage.Literals.QUICK_EDIT_TAB_SECTIONS;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EList<SectionInfo> getSections() {
+		if (sections == null) {
+			sections = new EObjectContainmentEList<SectionInfo>(SectionInfo.class, this, QuickEditTabSectionsPackage.QUICK_EDIT_TAB_SECTIONS__SECTIONS);
+		}
+		return sections;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {
+		switch (featureID) {
+			case QuickEditTabSectionsPackage.QUICK_EDIT_TAB_SECTIONS__SECTIONS:
+				return ((InternalEList<?>)getSections()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case QuickEditTabSectionsPackage.QUICK_EDIT_TAB_SECTIONS__SECTIONS:
+				return getSections();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case QuickEditTabSectionsPackage.QUICK_EDIT_TAB_SECTIONS__SECTIONS:
+				getSections().clear();
+				getSections().addAll((Collection<? extends SectionInfo>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case QuickEditTabSectionsPackage.QUICK_EDIT_TAB_SECTIONS__SECTIONS:
+				getSections().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case QuickEditTabSectionsPackage.QUICK_EDIT_TAB_SECTIONS__SECTIONS:
+				return sections != null && !sections.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //QuickEditTabSectionsImpl
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/QuickEditTabSectionsPackageImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/QuickEditTabSectionsPackageImpl.java
new file mode 100644
index 0000000..3190f63
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/QuickEditTabSectionsPackageImpl.java
@@ -0,0 +1,283 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: QuickEditTabSectionsPackageImpl.java,v 1.2 2008/01/09 19:40:28 cbateman Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsFactory;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class QuickEditTabSectionsPackageImpl extends EPackageImpl implements QuickEditTabSectionsPackage {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2007 Oracle Corporation";
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass quickEditTabSectionsEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass sectionInfoEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EEnum sectioN_TYPEEEnum = null;
+
+	/**
+	 * Creates an instance of the model <b>Package</b>, registered with
+	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+	 * package URI value.
+	 * <p>Note: the correct way to create the package is via the static
+	 * factory method {@link #init init()}, which also performs
+	 * initialization of the package, or returns the registered package,
+	 * if one already exists.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.ecore.EPackage.Registry
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage#eNS_URI
+	 * @see #init()
+	 * @generated
+	 */
+	private QuickEditTabSectionsPackageImpl() {
+		super(eNS_URI, QuickEditTabSectionsFactory.eINSTANCE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static boolean isInited = false;
+
+	/**
+	 * Creates, registers, and initializes the <b>Package</b> for this
+	 * model, and for any others upon which it depends.  Simple
+	 * dependencies are satisfied by calling this method on all
+	 * dependent packages before doing anything else.  This method drives
+	 * initialization for interdependent packages directly, in parallel
+	 * with this package, itself.
+	 * <p>Of this package and its interdependencies, all packages which
+	 * have not yet been registered by their URI values are first created
+	 * and registered.  The packages are then initialized in two steps:
+	 * meta-model objects for all of the packages are created before any
+	 * are initialized, since one package's meta-model objects may refer to
+	 * those of another.
+	 * <p>Invocation of this method will not affect any packages that have
+	 * already been initialized.
+	 * <!-- begin-user-doc -->
+     * @return the initialized package 
+	 * <!-- end-user-doc -->
+	 * @see #eNS_URI
+	 * @see #createPackageContents()
+	 * @see #initializePackageContents()
+	 * @generated
+	 */
+	public static QuickEditTabSectionsPackage init() {
+		if (isInited) return (QuickEditTabSectionsPackage)EPackage.Registry.INSTANCE.getEPackage(QuickEditTabSectionsPackage.eNS_URI);
+
+		// Obtain or create and register package
+		QuickEditTabSectionsPackageImpl theQuickEditTabSectionsPackage = (QuickEditTabSectionsPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof QuickEditTabSectionsPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new QuickEditTabSectionsPackageImpl());
+
+		isInited = true;
+
+		// Create package meta-data objects
+		theQuickEditTabSectionsPackage.createPackageContents();
+
+		// Initialize created meta-data
+		theQuickEditTabSectionsPackage.initializePackageContents();
+
+		// Mark meta-data to indicate it can't be changed
+		theQuickEditTabSectionsPackage.freeze();
+
+		return theQuickEditTabSectionsPackage;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getQuickEditTabSections() {
+		return quickEditTabSectionsEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EReference getQuickEditTabSections_Sections() {
+		return (EReference)quickEditTabSectionsEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EClass getSectionInfo() {
+		return sectionInfoEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSectionInfo_Id() {
+		return (EAttribute)sectionInfoEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getSectionInfo_Type() {
+		return (EAttribute)sectionInfoEClass.getEStructuralFeatures().get(1);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EEnum getSECTION_TYPE() {
+		return sectioN_TYPEEEnum;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public QuickEditTabSectionsFactory getQuickEditTabSectionsFactory() {
+		return (QuickEditTabSectionsFactory)getEFactoryInstance();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isCreated = false;
+
+	/**
+	 * Creates the meta-model objects for the package.  This method is
+	 * guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void createPackageContents() {
+		if (isCreated) return;
+		isCreated = true;
+
+		// Create classes and their features
+		quickEditTabSectionsEClass = createEClass(QUICK_EDIT_TAB_SECTIONS);
+		createEReference(quickEditTabSectionsEClass, QUICK_EDIT_TAB_SECTIONS__SECTIONS);
+
+		sectionInfoEClass = createEClass(SECTION_INFO);
+		createEAttribute(sectionInfoEClass, SECTION_INFO__ID);
+		createEAttribute(sectionInfoEClass, SECTION_INFO__TYPE);
+
+		// Create enums
+		sectioN_TYPEEEnum = createEEnum(SECTION_TYPE);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private boolean isInitialized = false;
+
+	/**
+	 * Complete the initialization of the package and its meta-model.  This
+	 * method is guarded to have no affect on any invocation but its first.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void initializePackageContents() {
+		if (isInitialized) return;
+		isInitialized = true;
+
+		// Initialize package
+		setName(eNAME);
+		setNsPrefix(eNS_PREFIX);
+		setNsURI(eNS_URI);
+
+		// Create type parameters
+
+		// Set bounds for type parameters
+
+		// Add supertypes to classes
+
+		// Initialize classes and features; add operations and parameters
+		initEClass(quickEditTabSectionsEClass, QuickEditTabSections.class, "QuickEditTabSections", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getQuickEditTabSections_Sections(), this.getSectionInfo(), null, "sections", null, 0, -1, QuickEditTabSections.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(sectionInfoEClass, SectionInfo.class, "SectionInfo", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getSectionInfo_Id(), ecorePackage.getEString(), "id", null, 1, 1, SectionInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getSectionInfo_Type(), this.getSECTION_TYPE(), "type", "ATTRIBUTE", 0, 1, SectionInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		// Initialize enums and add enum literals
+		initEEnum(sectioN_TYPEEEnum, org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE.class, "SECTION_TYPE");
+		addEEnumLiteral(sectioN_TYPEEEnum, org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE.ATTRIBUTE);
+		addEEnumLiteral(sectioN_TYPEEEnum, org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE.SECTION);
+
+		// Create resource
+		createResource(eNS_URI);
+
+		// Create annotations
+		// http:///org/eclipse/emf/ecore/util/ExtendedMetaData
+		createExtendedMetaDataAnnotations();
+	}
+
+	/**
+	 * Initializes the annotations for <b>http:///org/eclipse/emf/ecore/util/ExtendedMetaData</b>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void createExtendedMetaDataAnnotations() {
+		String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";		
+		addAnnotation
+		  (getQuickEditTabSections_Sections(), 
+		   source, 
+		   new String[] {
+			 "kind", "element",
+			 "name", "section"
+		   });
+	}
+
+} //QuickEditTabSectionsPackageImpl
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/SectionInfoImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/SectionInfoImpl.java
new file mode 100644
index 0000000..b3c7298
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/impl/SectionInfoImpl.java
@@ -0,0 +1,225 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: SectionInfoImpl.java,v 1.1 2007/12/07 23:43:47 gkessler Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.EObjectImpl;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Section Info</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.SectionInfoImpl#getId <em>Id</em>}</li>
+ *   <li>{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.impl.SectionInfoImpl#getType <em>Type</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SectionInfoImpl extends EObjectImpl implements SectionInfo {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2007 Oracle Corporation";
+
+	/**
+	 * The default value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String ID_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getId()
+	 * @generated
+	 * @ordered
+	 */
+	protected String id = ID_EDEFAULT;
+
+	/**
+	 * The default value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final SECTION_TYPE TYPE_EDEFAULT = SECTION_TYPE.ATTRIBUTE;
+
+	/**
+	 * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getType()
+	 * @generated
+	 * @ordered
+	 */
+	protected SECTION_TYPE type = TYPE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SectionInfoImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return QuickEditTabSectionsPackage.Literals.SECTION_INFO;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setId(String newId) {
+		String oldId = id;
+		id = newId;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, QuickEditTabSectionsPackage.SECTION_INFO__ID, oldId, id));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SECTION_TYPE getType() {
+		return type;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setType(SECTION_TYPE newType) {
+		SECTION_TYPE oldType = type;
+		type = newType == null ? TYPE_EDEFAULT : newType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, QuickEditTabSectionsPackage.SECTION_INFO__TYPE, oldType, type));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+			case QuickEditTabSectionsPackage.SECTION_INFO__ID:
+				return getId();
+			case QuickEditTabSectionsPackage.SECTION_INFO__TYPE:
+				return getType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+			case QuickEditTabSectionsPackage.SECTION_INFO__ID:
+				setId((String)newValue);
+				return;
+			case QuickEditTabSectionsPackage.SECTION_INFO__TYPE:
+				setType((SECTION_TYPE)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+			case QuickEditTabSectionsPackage.SECTION_INFO__ID:
+				setId(ID_EDEFAULT);
+				return;
+			case QuickEditTabSectionsPackage.SECTION_INFO__TYPE:
+				setType(TYPE_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+			case QuickEditTabSectionsPackage.SECTION_INFO__ID:
+				return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
+			case QuickEditTabSectionsPackage.SECTION_INFO__TYPE:
+				return type != TYPE_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (id: ");
+		result.append(id);
+		result.append(", type: ");
+		result.append(type);
+		result.append(')');
+		return result.toString();
+	}
+
+} //SectionInfoImpl
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/util/QuickEditTabSectionsAdapterFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/util/QuickEditTabSectionsAdapterFactory.java
new file mode 100644
index 0000000..59994fd
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/util/QuickEditTabSectionsAdapterFactory.java
@@ -0,0 +1,148 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: QuickEditTabSectionsAdapterFactory.java,v 1.1 2007/12/07 23:43:50 gkessler Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.util;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage
+ * @generated
+ */
+public class QuickEditTabSectionsAdapterFactory extends AdapterFactoryImpl {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2007 Oracle Corporation";
+
+	/**
+	 * The cached model package.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static QuickEditTabSectionsPackage modelPackage;
+
+	/**
+	 * Creates an instance of the adapter factory.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public QuickEditTabSectionsAdapterFactory() {
+		if (modelPackage == null) {
+			modelPackage = QuickEditTabSectionsPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Returns whether this factory is applicable for the type of the object.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+	 * <!-- end-user-doc -->
+	 * @return whether this factory is applicable for the type of the object.
+	 * @generated
+	 */
+	@Override
+	public boolean isFactoryForType(Object object) {
+		if (object == modelPackage) {
+			return true;
+		}
+		if (object instanceof EObject) {
+			return ((EObject)object).eClass().getEPackage() == modelPackage;
+		}
+		return false;
+	}
+
+	/**
+	 * The switch the delegates to the <code>createXXX</code> methods.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected QuickEditTabSectionsSwitch<Adapter> modelSwitch =
+		new QuickEditTabSectionsSwitch<Adapter>() {
+			@Override
+			public Adapter caseQuickEditTabSections(QuickEditTabSections object) {
+				return createQuickEditTabSectionsAdapter();
+			}
+			@Override
+			public Adapter caseSectionInfo(SectionInfo object) {
+				return createSectionInfoAdapter();
+			}
+			@Override
+			public Adapter defaultCase(EObject object) {
+				return createEObjectAdapter();
+			}
+		};
+
+	/**
+	 * Creates an adapter for the <code>target</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param target the object to adapt.
+	 * @return the adapter for the <code>target</code>.
+	 * @generated
+	 */
+	@Override
+	public Adapter createAdapter(Notifier target) {
+		return modelSwitch.doSwitch((EObject)target);
+	}
+
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections <em>Quick Edit Tab Sections</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections
+	 * @generated
+	 */
+	public Adapter createQuickEditTabSectionsAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo <em>Section Info</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo
+	 * @generated
+	 */
+	public Adapter createSectionInfoAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for the default case.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @generated
+	 */
+	public Adapter createEObjectAdapter() {
+		return null;
+	}
+
+} //QuickEditTabSectionsAdapterFactory
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/util/QuickEditTabSectionsSwitch.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/util/QuickEditTabSectionsSwitch.java
new file mode 100644
index 0000000..3a7f3a7
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/properties/quickedittabsections/internal/util/QuickEditTabSectionsSwitch.java
@@ -0,0 +1,162 @@
+/**
+ * Copyright (c) 2007 Oracle Corporation
+ *
+ * $Id: QuickEditTabSectionsSwitch.java,v 1.2 2008/01/09 19:40:28 cbateman Exp $
+ */
+package org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.internal.util;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.*;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * 
+ * @param <T> 
+ * <!-- end-user-doc -->
+ * @see org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSectionsPackage
+ * @generated
+ */
+public class QuickEditTabSectionsSwitch<T> {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "Copyright (c) 2007 Oracle Corporation";
+
+	/**
+	 * The cached model package
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected static QuickEditTabSectionsPackage modelPackage;
+
+	/**
+	 * Creates an instance of the switch.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public QuickEditTabSectionsSwitch() {
+		if (modelPackage == null) {
+			modelPackage = QuickEditTabSectionsPackage.eINSTANCE;
+		}
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+     * @param theEObject 
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	public T doSwitch(EObject theEObject) {
+		return doSwitch(theEObject.eClass(), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+     * @param theEClass 
+     * @param theEObject 
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(EClass theEClass, EObject theEObject) {
+		if (theEClass.eContainer() == modelPackage) {
+			return doSwitch(theEClass.getClassifierID(), theEObject);
+		}
+        List<EClass> eSuperTypes = theEClass.getESuperTypes();
+        return
+        	eSuperTypes.isEmpty() ?
+        		defaultCase(theEObject) :
+        		doSwitch(eSuperTypes.get(0), theEObject);
+	}
+
+	/**
+	 * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+	 * <!-- begin-user-doc -->
+     * @param classifierID 
+     * @param theEObject 
+	 * <!-- end-user-doc -->
+	 * @return the first non-null result returned by a <code>caseXXX</code> call.
+	 * @generated
+	 */
+	protected T doSwitch(int classifierID, EObject theEObject) {
+		switch (classifierID) {
+			case QuickEditTabSectionsPackage.QUICK_EDIT_TAB_SECTIONS: {
+				QuickEditTabSections quickEditTabSections = (QuickEditTabSections)theEObject;
+				T result = caseQuickEditTabSections(quickEditTabSections);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case QuickEditTabSectionsPackage.SECTION_INFO: {
+				SectionInfo sectionInfo = (SectionInfo)theEObject;
+				T result = caseSectionInfo(sectionInfo);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			default: return defaultCase(theEObject);
+		}
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Quick Edit Tab Sections</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Quick Edit Tab Sections</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseQuickEditTabSections(QuickEditTabSections object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Section Info</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Section Info</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSectionInfo(SectionInfo object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch, but this is the last case anyway.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+	 * @generated
+	 */
+	public T defaultCase(EObject object) {
+		return null;
+	}
+
+} //QuickEditTabSectionsSwitch
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/AbsolutePointLocator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/AbsolutePointLocator.java
index da4688f..0ebdeb2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/AbsolutePointLocator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/AbsolutePointLocator.java
@@ -16,6 +16,10 @@
 import org.eclipse.draw2d.geometry.Point;
 import org.eclipse.draw2d.geometry.Rectangle;
 
+/**
+ * @author cbateman
+ *
+ */
 public class AbsolutePointLocator implements Locator 
 {
     private static AbsolutePointLocator   INSTANCE;
@@ -26,6 +30,9 @@
     private int    _yOffset = 0;
     private IFigure _intersectFigure;
     
+    /**
+     * @return the singleton instance
+     */
     public synchronized static AbsolutePointLocator getInstance()
     {
         if (INSTANCE == null)
@@ -64,6 +71,8 @@
      * to the reference point before final re-location.  If point is null
      * then the reference is set to (0,0)
      * @param point
+     * @param xoffset 
+     * @param yoffset 
      */
     public void setReferencePoint(Point point, int xoffset, int yoffset)
     {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/BasicLabelToolTip.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/BasicLabelToolTip.java
index 56c6ce3..bd216a6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/BasicLabelToolTip.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/BasicLabelToolTip.java
@@ -18,23 +18,41 @@
 import org.eclipse.draw2d.geometry.Insets;
 import org.eclipse.swt.graphics.Image;
 
+/**
+ * A tool tip based on a label
+ * @author cbateman
+ *
+ */
 public class BasicLabelToolTip extends Label
 {
+    /**
+     * @param i
+     */
     public BasicLabelToolTip(Image i) {
         super(i);
         initialize();
     }
 
+    /**
+     * @param s
+     * @param i
+     */
     public BasicLabelToolTip(String s, Image i) {
         super(s, i);
         initialize();
     }
 
+    /**
+     * @param s
+     */
     public BasicLabelToolTip(String s) {
         super(s);
         initialize();
     }
 
+    /**
+     * 
+     */
     protected void initialize()
     {
         setOpaque(true);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ColumnHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ColumnHelper.java
index 99aa806..6574e59 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ColumnHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ColumnHelper.java
@@ -56,7 +56,7 @@
         return bounds;
     }
     
-	public static Rectangle getColumnBounds(GraphicalEditPart editPart,
+	static Rectangle getColumnBounds(GraphicalEditPart editPart,
 			IFigure target) {
 	    Rectangle bounds = getAdjustedColumnBoundingRectangle(editPart);
         target.translateToRelative(bounds);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ColumnResizableEditPolicy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ColumnResizableEditPolicy.java
index 7aefa77..8530091 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ColumnResizableEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ColumnResizableEditPolicy.java
@@ -92,6 +92,11 @@
     private class ColumnHandleLocator extends CornerRelativeHandleLocator {
 		private GraphicalEditPart editPart;
 
+		/**
+		 * @param editPart
+		 * @param reference
+		 * @param location
+		 */
 		public ColumnHandleLocator(GraphicalEditPart editPart, IFigure reference, int location) {
             super(reference, location);
 			this.editPart = editPart;
@@ -119,7 +124,7 @@
 		 * {@link PositionConstants} used as a convenient and readable way to
 		 * set both the relativeX and relativeY values.
 		 * 
-		 * @param reference
+		 * @param editPart
 		 *            the reference figure
 		 * @param location
 		 *            one of NORTH, NORTH_EAST, etc.
@@ -170,6 +175,9 @@
     private class ColumnBorderHandleLocator implements Locator {
         private GraphicalEditPart editPart;
 
+        /**
+         * @param editPart
+         */
         public ColumnBorderHandleLocator(GraphicalEditPart editPart) {
             this.editPart = editPart;
         }
@@ -181,6 +189,10 @@
     
     private static class MyMoveHandle extends SquareHandle
     {
+        /**
+         * @param owner
+         * @param loc
+         */
         public MyMoveHandle(GraphicalEditPart owner, Locator loc) {
             super(owner, loc);
             setCursor(SharedCursors.SIZEALL);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/CornerRelativeHandleLocator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/CornerRelativeHandleLocator.java
index e9e31d8..e43befe 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/CornerRelativeHandleLocator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/CornerRelativeHandleLocator.java
@@ -20,13 +20,22 @@
 import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.gef.handles.RelativeHandleLocator;
 
+/**
+ * A locator for handles that attach to the corner of square figures
+ * @author cbateman
+ *
+ */
 class CornerRelativeHandleLocator extends RelativeHandleLocator
 {
-    protected double relativeX = 0;
-    protected double relativeY = 0;
-    protected double offsetXMultiplier = 0;
-    protected double offsetYMultiplier = 0;
+    private double relativeX = 0;
+    private double relativeY = 0;
+    private double offsetXMultiplier = 0;
+    private double offsetYMultiplier = 0;
     
+    /**
+     * @param reference
+     * @param location
+     */
     public CornerRelativeHandleLocator(IFigure reference, int location) {
         super(reference, location);
         
@@ -94,6 +103,10 @@
         return targetBounds;
     }
     
+    /**
+     * @param relocateFigure
+     * @return the new target dimensions
+     */
     protected Dimension getNewTargetSize(IFigure relocateFigure)
     {
         return relocateFigure.getPreferredSize();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/DropEditPolicy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/DropEditPolicy.java
index 9b52a6c..682243d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/DropEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/DropEditPolicy.java
@@ -33,9 +33,13 @@
 import org.eclipse.jst.pagedesigner.viewer.DesignPosition;
 import org.eclipse.jst.pagedesigner.viewer.IDropLocationStrategy;
 
+/**
+ * @author cbateman
+ *
+ */
 public abstract class DropEditPolicy extends GraphicalEditPolicy 
 {
-    protected List        _feedbackFigures;
+    private List        _feedbackFigures;
 
     /**
      * @param r
@@ -48,8 +52,16 @@
         return null;
     }
     
+    /**
+     * @param r
+     * @return the appropriate design position for the drop request
+     */
     protected abstract DesignPosition findPosition(DropRequest r);
     
+    /**
+     * @param data
+     * @return a default validation mediator to be used if nothing custom is provided
+     */
     protected abstract IPositionMediator createDefaultDropChildValidator(DropData data);
     
     /**
@@ -75,6 +87,10 @@
         return mediator;
     }
     
+    /**
+     * @param request
+     * @return the data about the drop request
+     */
     protected DropData createDropData(DropRequest request)
     {
         if (request instanceof GroupRequest)
@@ -112,6 +128,10 @@
         return null;
     }
     
+    /**
+     * @param r
+     * @return the drop location strategy
+     */
     protected final IDropLocationStrategy createDropLocationStrategy(DropRequest r)
     {
         DropData dropData = createDropData(r);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementDecoratorSquareHandle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementDecoratorSquareHandle.java
index 035a6fa..5ba2257 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementDecoratorSquareHandle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementDecoratorSquareHandle.java
@@ -20,13 +20,27 @@
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Cursor;
 
+/**
+ * A square handle for element decoration
+ * @author cbateman
+ *
+ */
 public class ElementDecoratorSquareHandle extends SquareHandle {
 
     
+    /**
+     * @param owner
+     * @param loc
+     * @param c
+     */
     public ElementDecoratorSquareHandle(GraphicalEditPart owner, Locator loc,
             Cursor c) {
         super(owner, loc, c);
     }
+    /**
+     * @param owner
+     * @param loc
+     */
     public ElementDecoratorSquareHandle(GraphicalEditPart owner, Locator loc) {
         super(owner, loc);
     }
@@ -42,6 +56,9 @@
         return ColorConstants.white;
     }
 
+    /**
+     * @return the transparency alpha channel (0-255)
+     */
     protected int getAlpha()
     {
         return 255;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementMenuBar.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementMenuBar.java
index 912d937..ee61b03 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementMenuBar.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementMenuBar.java
@@ -32,6 +32,12 @@
 import org.eclipse.jst.pagedesigner.parts.ElementEditPart;
 import org.eclipse.jst.pagedesigner.parts.NonVisualComponentEditPart;
 
+/**
+ * A menu bar for a specific element edit part
+ * 
+ * @author cbateman
+ *
+ */
 public class ElementMenuBar extends Figure implements ISelectionProvider, ISelectionChangedListener
 {
     private ElementEditPart   _hostPart;
@@ -43,6 +49,9 @@
     private List                    _selectionListeners;
     private IStructuredSelection    _selection;
 
+    /**
+     * @param hostPart
+     */
     public ElementMenuBar(ElementEditPart hostPart)
     {
         hostPart.getViewer().addSelectionChangedListener(this);
@@ -53,11 +62,17 @@
         setLayoutManager(layout);
     }
 
+    /**
+     * @return true if there are child parts in the menu
+     */
     public boolean hasChildParts()
     {
         return _childParts != null &&_childParts.size() > 0;
     }
     
+    /**
+     * 
+     */
     public void dispose()
     {
         _hostPart.getViewer().removeSelectionChangedListener(this);
@@ -76,6 +91,9 @@
         _selection = null;
     }
     
+    /**
+     * @param editpart
+     */
     public void addNonVisualChild(NonVisualComponentEditPart editpart)
     {
         add(editpart.getFigure());
@@ -100,6 +118,9 @@
         }
     }
 
+    /**
+     * @return true if a member of the menu bar has edit part focus
+     */
     public boolean hasEditPartFocus()
     {
         for (Iterator it = getChildParts().iterator(); it.hasNext();)
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementResizableEditPolicy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementResizableEditPolicy.java
index 4165511..7109d86 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementResizableEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ElementResizableEditPolicy.java
@@ -223,7 +223,7 @@
 
 	/**
 	 * @param request
-	 * @return
+	 * @return true if we should be using object mode for this request
 	 */
 	public boolean shouldUseObjectMode(Request request) {
 		ElementEditPart part = (ElementEditPart) this.getHost();
@@ -365,9 +365,10 @@
     /**
 	 * child class could override this method.
 	 * 
+     * @param element 
 	 * @param width
 	 * @param height
-	 * @return
+	 * @return the resize command or null  if none
 	 */
 	protected Command getResizeCommand(IDOMElement element, int width,
 			int height) {
@@ -464,10 +465,14 @@
         return null;
     }
 
+    /**
+     * by default, return null
+     * sub-classes should override to customize
+     * @param request
+     * @return the selectin tracker
+     */
     protected DragTracker getSelectionTracker(LocationRequest request)
     {
-        // by default, return null
-        // sub-classes should override to customize
         return null;
     }
     
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/FragmentHandle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/FragmentHandle.java
index 3857c35..5efd984 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/FragmentHandle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/FragmentHandle.java
@@ -35,6 +35,9 @@
  * @version 1.5
  */
 public class FragmentHandle extends AbstractHandle implements Handle {
+	/**
+	 * @param owner
+	 */
 	public FragmentHandle(GraphicalEditPart owner) {
 		super(owner, new FragmentLocator());
 		this.setOpaque(false);
@@ -61,9 +64,7 @@
 		return tracker;
 	}
 
-	public void refresh() {
-		// TODO: not ref Insets insets = getOwnerFigure().getInsets();
-		// TODO: not ref Rectangle bounds;
+	private void refresh() {
 
 		// set the bounds of this figure, so it could cover all children.
 		bounds = getOwnerFigure().getBounds();
@@ -83,7 +84,7 @@
 			this.add(childFigure);
 
 			FlowBox box = (FlowBox) fragments.get(i);
-			Rectangle rect = new Rectangle(box._x, box._y, box.getWidth(), box
+			Rectangle rect = new Rectangle(box.getX(), box.getY(), box.getWidth(), box
 					.getHeight());
 			cssfigure.translateToAbsolute(rect);
 
@@ -151,8 +152,8 @@
 		this.add(target);
 
 		// for corner small box.
-		Rectangle targetBounds = new Rectangle(referencebox._x,
-				referencebox._y, referencebox.getWidth(), referencebox
+		Rectangle targetBounds = new Rectangle(referencebox.getX(),
+				referencebox.getY(), referencebox.getWidth(), referencebox
 						.getHeight());
 		targetBounds = new PrecisionRectangle(targetBounds);
 		reference.translateToAbsolute(targetBounds);
@@ -167,7 +168,7 @@
 		target.setBounds(targetBounds);
 	}
 
-	public static class FragmentLocator implements Locator {
+	static class FragmentLocator implements Locator {
 		/*
 		 * (non-Javadoc)
 		 * 
@@ -178,7 +179,10 @@
 		}
 	}
 
-	public static class BorderFigure extends Figure {
+	static class BorderFigure extends Figure {
+		/**
+		 * the bounds padding
+		 */
 		public static final int INNER_PAD = 2;
 
 		/*
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/IEnhancedSelectionEditPolicy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/IEnhancedSelectionEditPolicy.java
index bb9e99c..779762b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/IEnhancedSelectionEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/IEnhancedSelectionEditPolicy.java
@@ -23,6 +23,7 @@
 public interface IEnhancedSelectionEditPolicy 
 {
     /**
+     * @param mouseLocation 
      * @return the cursor that should be displayed when a selection tool
      * enters the hit box (mouses over) of an edit part but no selection
      * or drag operations have occurred yet.  Null indicates the caller should
@@ -31,6 +32,7 @@
     Cursor getSelectionToolCursor(Point mouseLocation);
     
     /**
+     * @param request 
      * @param mouseLocator
      * @return a drag tracker to be used when the mouse moves over a certain
      * location and mouse state is in initial state or null if the policy
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ITableEditAdapter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ITableEditAdapter.java
index 82e9a34..0795c8a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ITableEditAdapter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/ITableEditAdapter.java
@@ -16,57 +16,69 @@
  * @version 1.5
  */
 public interface ITableEditAdapter {
+	/**
+	 * @return the column count
+	 */
 	public int getColumnCount();
 
+	/**
+	 * @return the row count
+	 */
 	public int getRowCount();
 
+	/**
+	 * @param atPosition
+	 */
 	public void insertColumn(int atPosition);
 
+	/**
+	 * @param rowPosition
+	 */
 	public void insertRow(int rowPosition);
 
 	/**
 	 * @param columnIndex
-	 * @return
+	 * @return the starting point for resize
 	 */
 	public int getColumnResizeStart(int columnIndex);
 
 	/**
-	 * @return
+	 * @return the resize width
 	 */
 	public int getColumnResizeWidth();
 
 	/**
 	 * @param columnIndex
-	 * @return
+	 * @return column start
 	 */
 	public int getColumnStart(int columnIndex);
 
 	/**
 	 * @param columnIndex
-	 * @return
+	 * @return the column width
 	 */
 	public int getColumnWidth(int columnIndex);
 
 	/**
 	 * @param rowIndex
-	 * @return
+	 * @return the row start
 	 */
 	public int getRowStart(int rowIndex);
 
 	/**
 	 * @param rowIndex
-	 * @return
+	 * @return the row height
 	 */
 	public int getRowHeight(int rowIndex);
 
 	/**
 	 * @param rowIndex
-	 * @return
+	 * @return starting point of the row resize
 	 */
 	public int getRowResizeStart(int rowIndex);
 
 	/**
-	 * @return
+	 * @return the row resize width
 	 */
 	public int getRowResizeWidth();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/JSFDropEditPolicy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/JSFDropEditPolicy.java
index 14af9bd..0b36919 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/JSFDropEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/JSFDropEditPolicy.java
@@ -24,6 +24,9 @@
 public class JSFDropEditPolicy extends GraphicalEditPolicy {
 	String _attrName;
 
+	/**
+	 * @param attrname
+	 */
 	public JSFDropEditPolicy(String attrname) {
 		_attrName = attrname;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/LocationHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/LocationHelper.java
index 657067f..b6e09fe 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/LocationHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/LocationHelper.java
@@ -31,13 +31,14 @@
 /**
  * @author mengbo
  */
-public class LocationHelper {
+public final class LocationHelper {
 	/**
+	 * @param host 
 	 * @param p
 	 * @param result
 	 * @param tagName
 	 * @param skip
-	 * @return
+	 * @return  true if insertion point is found
 	 */
 	public static boolean findInsertLocation(GraphicalEditPart host, Point p,
 			GraphicalEditPart[] result, String tagName, Node skip) {
@@ -114,10 +115,10 @@
 	/**
 	 * @param figure
 	 * @param box
-	 * @return
+	 * @return the bounding rectangle
 	 */
 	public static Rectangle getAbsoluteBounds(IFigure figure, FlowBox box) {
-		Rectangle r = new Rectangle(box._x, box._y, box.getWidth(), box
+		Rectangle r = new Rectangle(box.getX(), box.getY(), box.getWidth(), box
 				.getHeight());
 		figure.translateToAbsolute(r);
 		return r;
@@ -125,7 +126,7 @@
 
 	/**
 	 * @param child
-	 * @return
+	 * @return the bounding rectangle
 	 */
 	public static Rectangle getAbsoluteBounds(GraphicalEditPart child) {
 		Rectangle bounds = child.getFigure().getBounds().getCopy();
@@ -180,7 +181,7 @@
 		return false;
 	}
 
-	protected static ModelQuery getModelQuery(Node node) {
+	private static ModelQuery getModelQuery(Node node) {
         Document doc = node.getOwnerDocument();
         
 		if (node.getNodeType() == Node.DOCUMENT_NODE) {
@@ -189,4 +190,8 @@
         return ModelQueryUtil.getModelQuery(doc);
 	}
 
+	private LocationHelper()
+	{
+	    // util class, no external instantiation
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MouseSelectableChildDecorator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MouseSelectableChildDecorator.java
index 216c676..0da7f9b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MouseSelectableChildDecorator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MouseSelectableChildDecorator.java
@@ -33,6 +33,12 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Display;
 
+/**
+ * A child decorator that supports mouse selection
+ * 
+ * @author cbateman
+ *
+ */
 class MouseSelectableChildDecorator extends NonVisualChildDecorator
 {
     // no visual or affordance showing
@@ -56,9 +62,21 @@
     // the menu bar has primary selection
     private static final int           STATE_HANDLE_MENU_BAR_SELECTED = 6;
     
+    /**
+     * An event indicating the host received hover
+     */
     public static final int           EVENT_HOST_HOVER_RECEIVED = 31;
+    /**
+     * An event indicating the host lost hover
+     */
     public static final int           EVENT_HOST_HOVER_LOST = 32;
+    /**
+     * An event indicating the host received selection
+     */
     public static final int           EVENT_HOST_SELECTION_RECEIVED = 33;
+    /**
+     * An event indicating the host lost selection
+     */
     public static final int           EVENT_HOST_SELECTION_LOST = 34;
     private static final int          EVENT_HANDLE_HOVER_RECEIVED = 35;
     private static final int          EVENT_HANDLE_HOVER_LOST = 36;
@@ -164,7 +182,7 @@
     }
 
     /**
-     * @param newState
+     * @param event
      */
     public void updateState(int event)
     {
@@ -172,6 +190,9 @@
         updateVisual(oldState);
     }
     
+    /**
+     * @param oldState
+     */
     protected void updateVisual(int oldState)
     {
         // overriding all other considerations is whether the menu bar even has
@@ -264,6 +285,9 @@
         setPreferredSize(new Dimension(12, 12));
     }
     
+    /**
+     * 
+     */
     public void dispose()
     {
         hide(_elementMenuBar, false);
@@ -325,6 +349,10 @@
     {
         private int _curState = STATE_START;
         
+        /**
+         * @param event
+         * @return execute a state machine transition on event
+         */
         public int doTransition(int event)
         {
             final int     oldState = _curState;
@@ -430,11 +458,18 @@
             return oldState;
         }
 
+        /**
+         * @return true if the  menu should be showing in the  current state
+         */
         public boolean isMenuShowing()
         {
             return isMenuShowing(_curState);
         }
 
+        /**
+         * @param state
+         * @return true if state is one in which the menu should be showing
+         */ 
         public boolean isMenuShowing(int state)
         {
             return _curState == STATE_HANDLE_MENU_BAR_SHOWING 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MoveSupport.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MoveSupport.java
index 978ac51..dc420cf 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MoveSupport.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/MoveSupport.java
@@ -26,7 +26,7 @@
 	 * Check whether the move operation only drags a single node.
 	 * 
 	 * @param request
-	 * @return
+	 * @return true if the request affects a single node
 	 */
 	public static boolean isSingleNode(ChangeBoundsRequest request) {
 		List parts = request.getEditParts();
@@ -41,7 +41,7 @@
 	 * this method must be called after isSingleNode
 	 * 
 	 * @param request
-	 * @return
+	 * @return the dragged part
 	 */
 	public static NodeEditPart getDraggedPart(ChangeBoundsRequest request) {
 		List parts = request.getEditParts();
@@ -53,7 +53,7 @@
 	 * this method must be called after isSingleNode
 	 * 
 	 * @param request
-	 * @return
+	 * @return the dragged node
 	 */
 	public static Node getDraggedNode(ChangeBoundsRequest request) {
 		return getDraggedPart(request).getIDOMNode();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/NonVisualChildGraphicalEditPolicy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/NonVisualChildGraphicalEditPolicy.java
index dfa02d4..59678d2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/NonVisualChildGraphicalEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/NonVisualChildGraphicalEditPolicy.java
@@ -27,6 +27,11 @@
 import org.eclipse.swt.graphics.Color;
 import org.w3c.dom.Element;
 
+/**
+ * An edit policy for non visual child edit parts
+ * @author cbateman
+ *
+ */
 public class NonVisualChildGraphicalEditPolicy extends NonResizableEditPolicy 
 {
     // the number of pixels to offset the top left of tooltop feedback
@@ -35,8 +40,8 @@
     private final static Color HOVER_FEEDBACK_COLOR = ColorConstants.blue;
     
     
-    protected BasicLabelToolTip   _toolTip;
-    protected boolean             _showLabelFeedback;
+    private BasicLabelToolTip   _toolTip;
+    private boolean             _showLabelFeedback;
     private RectangleFigure _mouseOverBorder;
 
     public void showTargetFeedback(Request request) {
@@ -58,7 +63,10 @@
         removeMouseOverBorder();
     }
 
-    protected void showHoverFeedback(LocationRequest request)
+    /**
+     * @param request
+     */
+    private void showHoverFeedback(LocationRequest request)
     {
         if (_showLabelFeedback)
         {
@@ -76,13 +84,13 @@
         }
     }
     
-    protected String getTooltipText() {
+    private String getTooltipText() {
         Element element = (Element) ((NonVisualComponentEditPart)getHost()).getDOMNode();
         StringBuffer text = new StringBuffer(element.getTagName());
         return text.toString();
     }
     
-    protected void addMouseOverBorder()
+    private void addMouseOverBorder()
     {
         if (_mouseOverBorder == null)
         {
@@ -103,7 +111,10 @@
         _mouseOverBorder.setBounds(r);
     }
     
-    protected void removeMouseOverBorder()
+    /**
+     * 
+     */
+    private void removeMouseOverBorder()
     {
         if (_mouseOverBorder != null) {
             removeFeedback(_mouseOverBorder);
@@ -116,7 +127,10 @@
         return Collections.EMPTY_LIST;  
     }
 
-    protected void removeToolTipLabel()
+    /**
+     * 
+     */
+    private void removeToolTipLabel()
     {
         if (_toolTip != null) {
             removeFeedback(_toolTip);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/PDEditPolicy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/PDEditPolicy.java
index 48f4076..72e76d6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/PDEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/PDEditPolicy.java
@@ -15,5 +15,8 @@
  * @author mengbo
  */
 public interface PDEditPolicy {
+	/**
+	 * the edit policy for PD Drop
+	 */
 	String PDDROP_ROLE = "PDDropEditPolicy"; //$NON-NLS-1$
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/PolicyHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/PolicyHelper.java
index 2496013..79b8f7f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/PolicyHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editpolicies/PolicyHelper.java
@@ -16,7 +16,7 @@
 import org.eclipse.jface.action.IStatusLineManager;
 import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
 import org.eclipse.jst.pagedesigner.PDPlugin;
-import org.eclipse.jst.pagedesigner.viewer.HTMLGraphicalViewer;
+import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
 
 /**
  * @author mengbo
@@ -24,10 +24,14 @@
 public class PolicyHelper {
 	private static Logger _log = PDPlugin.getLogger(PolicyHelper.class);
 
+	/**
+	 * @param part
+	 * @return the current viewer's status line manager or null
+	 */
 	public static IStatusLineManager getStatusLineManager(EditPart part) {
 		EditPartViewer v = part.getViewer();
-		if (v instanceof HTMLGraphicalViewer) {
-			HTMLGraphicalViewer htmlviewer = (HTMLGraphicalViewer) v;
+		if (v instanceof IHTMLGraphicalViewer) {
+			IHTMLGraphicalViewer htmlviewer = (IHTMLGraphicalViewer) v;
 			IStatusLineManager m = htmlviewer.getStatusLineManager();
 			if (m == null) {
 				_log.info("Warn.PolicyHelper.0", (String) null); //$NON-NLS-1$
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEdit.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEdit.java
index d7d3dd6..ac2c123 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEdit.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEdit.java
@@ -16,6 +16,9 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jst.jsf.common.dom.TagIdentifier;
 import org.eclipse.jst.jsf.core.internal.tld.CMUtil;
+import org.eclipse.jst.pagedesigner.itemcreation.ITagCreator;
+import org.eclipse.jst.pagedesigner.itemcreation.customizer.AbstractDropCustomizer;
+import org.eclipse.jst.pagedesigner.itemcreation.customizer.IDropCustomizer;
 import org.eclipse.jst.pagedesigner.parts.ElementEditPart;
 import org.eclipse.jst.pagedesigner.parts.NodeEditPart;
 import org.eclipse.jst.pagedesigner.viewer.IDropLocationStrategy;
@@ -23,6 +26,7 @@
 import org.w3c.dom.Element;
 
 /**
+ * <p><b>Provisional API - subject to change</b></p>
  * @author mengbo
  * @version 1.5
  */
@@ -78,7 +82,7 @@
 	 * Also, the default ResizeCommand will adjust "style", so if child class
 	 * override this method, they should also use different command.
 	 * 
-	 * @see org.eclipse.jst.pagedesigner.editpolicies.ElementResizableEditPolicy#getResizeCommand(ChangeBoundsRequest)
+	 * @see org.eclipse.jst.pagedesigner.editpolicies.ElementResizableEditPolicy#getResizeCommand(org.eclipse.gef.requests.ChangeBoundsRequest)
 	 */
 	public boolean isResizable(Element ele) {
 		CMElementDeclaration decl = CMUtil.getElementDeclaration(ele);
@@ -97,6 +101,20 @@
     public IDropLocationStrategy getDropRequestorLocationStrategy(TagIdentifier tag, EditPartViewer viewer) {
         return null;
     }
+
+    private final static IDropCustomizer   DEFAULT_DROP_CUSTOMIZER = 
+        new AbstractDropCustomizer(){/* do nothing; use defaults */};
     
-    
+    public IDropCustomizer getDropCustomizer(TagIdentifier tagId) 
+    {
+        return DEFAULT_DROP_CUSTOMIZER;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.pagedesigner.elementedit.IElementEdit#getTagCreator(org.eclipse.jst.jsf.common.dom.TagIdentifier)
+     */
+    public ITagCreator getTagCreator(TagIdentifier tagId) 
+    {
+        return null;
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEditFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEditFactory.java
new file mode 100644
index 0000000..b778788
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/AbstractElementEditFactory.java
@@ -0,0 +1,31 @@
+package org.eclipse.jst.pagedesigner.elementedit;
+
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+
+/**
+ * @author cbateman
+ *
+ */
+public abstract class AbstractElementEditFactory implements IElementEditFactory 
+{
+    private String _supportedUri;
+    
+    /**
+     * @param uri
+     */
+    protected AbstractElementEditFactory(final String uri)
+    {
+        _supportedUri = uri;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.pagedesigner.elementedit.IElementEditFactory#createElementEdit(org.eclipse.jst.jsf.common.dom.TagIdentifier)
+     */
+    public abstract IElementEdit createElementEdit(TagIdentifier tag); 
+
+    public String getSupportedURI() 
+    {
+        return _supportedUri;
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/ElementEditFacRegistryReader.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/ElementEditFacRegistryReader.java
index 4733fa8..e0e1b7b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/ElementEditFacRegistryReader.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/ElementEditFacRegistryReader.java
@@ -12,6 +12,7 @@
 package org.eclipse.jst.pagedesigner.elementedit;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
@@ -27,17 +28,20 @@
  * @version 1.5
  */
 public class ElementEditFacRegistryReader {
-	static IElementEditFactory[] _handlers = null;
+	private static List<IElementEditFactory> _handlers = null;
 
-	public static synchronized IElementEditFactory[] getAllHandlers() {
+	/**
+	 * @return all available handers for the ext-pt.  List is not
+	 * modifiable
+	 */
+	public static synchronized List<IElementEditFactory> getAllHandlers() {
 		if (_handlers == null) {
 			_handlers = readAllHandlers();
 		}
-		return _handlers;
-
+		return Collections.unmodifiableList(_handlers);
 	}
 
-	private static IElementEditFactory[] readAllHandlers() {
+	private static List<IElementEditFactory> readAllHandlers() {
 		List result = new ArrayList();
 		IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
 				.getExtensionPoint(PDPlugin.getPluginId(),
@@ -68,9 +72,7 @@
 				}
 			}
 		}
-		IElementEditFactory[] ret = new IElementEditFactory[result.size()];
-		result.toArray(ret);
-		return ret;
+		return result;
 	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/ElementEditFactoryRegistry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/ElementEditFactoryRegistry.java
index 5f12616..7ca7daf 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/ElementEditFactoryRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/ElementEditFactoryRegistry.java
@@ -36,22 +36,29 @@
 		addFactory(new HTMLElementEditFactory());
         addFactory(new JSPElementEditFactory());
 
-		IElementEditFactory facs[] = ElementEditFacRegistryReader
-				.getAllHandlers();
-		if (facs != null) {
-			for (int i = 0; i < facs.length; i++) {
-				addFactory(facs[i]);
+		List<IElementEditFactory> facs = 
+		    ElementEditFacRegistryReader.getAllHandlers();
+
+		if (facs != null) 
+		{
+			for (IElementEditFactory fac : facs) 
+			{
+				addFactory(fac);
 			}
 		}
 	}
 
+	/**
+	 * Add a factory to list available.
+	 * 
+	 * @param fac
+	 */
 	public void addFactory(IElementEditFactory fac) {
 		_factories.add(fac);
 	}
 
     /**
-     * @param uri
-     * @param tagName
+     * @param tagIdentifier 
      * @return an IElementEdit constructed for the tag uniquely identified
      * by the ns uri (tag uri for JSP tags) and tagName (element name) or null
      * if the system can't create one.
@@ -97,6 +104,9 @@
         return createElementEdit(tagIdentifier);
 	}
 
+	/**
+	 * @return the single instance of the factory registry
+	 */
 	public static ElementEditFactoryRegistry getInstance() {
 		if (_instance == null) {
 			_instance = new ElementEditFactoryRegistry();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/IElementEdit.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/IElementEdit.java
index e4f4bd4..bdd91a3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/IElementEdit.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/IElementEdit.java
@@ -15,18 +15,30 @@
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.pagedesigner.itemcreation.ITagCreator;
+import org.eclipse.jst.pagedesigner.itemcreation.customizer.IDropCustomizer;
 import org.eclipse.jst.pagedesigner.parts.ElementEditPart;
 import org.eclipse.jst.pagedesigner.parts.NodeEditPart;
 import org.eclipse.jst.pagedesigner.viewer.IDropLocationStrategy;
 import org.w3c.dom.Element;
 
 /**
- * IElementEdit support additional edit support to an element
+ * IElementEdit support additional edit support to an element.
+ * 
+ * This interface should not be extended by clients.  Extend AbstractElementEdit
+ * instead.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  * 
  * @author mengbo
  * @version 1.5
  */
-public interface IElementEdit {
+public interface IElementEdit 
+{
+	/**
+	 * override default edit policies on part
+	 * @param part
+	 */
 	public void createEditPolicies(ElementEditPart part);
 
 	/**
@@ -34,7 +46,8 @@
 	 * 
 	 * @param ele
 	 * @param part
-	 * @return
+	 * @param recursive 
+	 * @return handle model changes on part.
 	 */
 	public boolean handleModelChange(Element ele, ElementEditPart part,
 			boolean recursive);
@@ -43,6 +56,7 @@
 	 * Add special menu items for the particular element to the context menu.
 	 * 
 	 * @param contextMenu
+	 * @param ele 
 	 */
 	public void fillContextMenu(IMenuManager contextMenu, Element ele);
 
@@ -72,13 +86,14 @@
 	 * whether the corresponding element support resize. If it does, then the
 	 * corresponding policy installed through <code>createEditPolicies</code>
 	 * should handle resize.
+	 * @param ele 
 	 * 
-	 * @return
+	 * @return true if ele has resize support
 	 */
 	public boolean isResizable(Element ele);
     
     /**
-     * @param element the element to return a drop location strategy for.
+     * @param tag the element to return a drop location strategy for.
      * This is the requesting element (being dropped), not the drop target
      * 
      * @param viewer is the viewer where the new strategy will optionally
@@ -90,4 +105,20 @@
      * 
      */
      public IDropLocationStrategy getDropRequestorLocationStrategy(TagIdentifier tag, EditPartViewer viewer);
+
+    /**
+     * @param tagId 
+     * @return the drop customizer for this edit's element.  May return null.
+     * Returning null and returning a IDropCustomizer whose runCustomizer always returns
+     * OK and getDropCustomizationData always returns null will be considered 
+     * equivalent by the framework.
+     */
+    public IDropCustomizer getDropCustomizer(TagIdentifier tagId);
+    
+    /**
+     * @param tagId
+     * @return a tag creator for the indicated tag or null to indicate that the
+     * system should use it's default tag creator
+     */
+    public ITagCreator getTagCreator(TagIdentifier tagId);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/IElementEditFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/IElementEditFactory.java
index fe1eb66..052275a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/IElementEditFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/IElementEditFactory.java
@@ -17,14 +17,16 @@
 /**
  * @author mengbo
  * @version 1.5
+ * 
+ * Clients should not implement this interface.  Extend AbstractElementEditFactory instead.
  */
 public interface IElementEditFactory {
 	/**
 	 * 
-	 * @param element
+	 * @param tag
 	 * @return null if this factory don't support this element
 	 */
-	public IElementEdit createElementEdit(TagIdentifier tagWrapper);
+	public IElementEdit createElementEdit(TagIdentifier tag);
 
 	/**
 	 * get the URI namespace that this factory support. "null" means this
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/html/TableElementEdit.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/html/TableElementEdit.java
index 1febdd2..31b9127 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/html/TableElementEdit.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/html/TableElementEdit.java
@@ -218,6 +218,9 @@
 	static class TableResizePolicy extends TableResizableEditPolicy {
 		ElementEditPart _part;
 
+		/**
+		 * @param part
+		 */
 		public TableResizePolicy(ElementEditPart part) {
 			_part = part;
 		}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/jsp/TaglibURIAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/jsp/TaglibURIAction.java
index ba3512c..eefc1b3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/jsp/TaglibURIAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/elementedit/jsp/TaglibURIAction.java
@@ -38,6 +38,9 @@
 
 	private Element element;
 
+	/**
+	 * Default constructor
+	 */
 	public TaglibURIAction() {
 		setText(PDPlugin.getResourceString("ElementEdit.Submenu.Taglib"));//$NON-NLS-1$
 	}
@@ -113,10 +116,10 @@
 		return null;
 	}
 
-	private String getResolvedURL(Element element, String attrName) {
+	private String getResolvedURL(Element element_, String attrName) {
 		URIResolver resolver = null;
-		if (element instanceof IDOMNode) {
-			resolver = ((IDOMNode) element).getModel().getResolver();
+		if (element_ instanceof IDOMNode) {
+			resolver = ((IDOMNode) element_).getModel().getResolver();
 		}
 		if (null == resolver) {
 			return null;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/extensionpoint/IContextMenuItemContributor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/extensionpoint/IContextMenuItemContributor.java
index 5f892ad..83bd334 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/extensionpoint/IContextMenuItemContributor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/extensionpoint/IContextMenuItemContributor.java
@@ -18,12 +18,27 @@
 
 /**
  * @author mengbo
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
+
 public interface IContextMenuItemContributor {
+	/**
+	 * @param uri
+	 */
 	void setURI(String uri);
 
+	/**
+	 * @return the uri
+	 */
 	String getURI();
 
+	/**
+	 * @param manager
+	 * @param selection
+	 * @param model
+	 * @param parentUI
+	 */
 	void fillContextMenu(IMenuManager manager, ISelection selection,
 			IStructuredModel model, Control parentUI);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/AbstractFigureHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/AbstractFigureHandler.java
index eb93312..06090c3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/AbstractFigureHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/AbstractFigureHandler.java
@@ -45,6 +45,10 @@
         // TODO: anything?
 	}
 
+	/**
+	 * @param node
+	 * @return the css style on the node
+	 */
 	protected ICSSStyle getCSSStyle(Element node) {
 		ICSSStyle style = null;
 		if (node instanceof IDOMElement) {
@@ -58,6 +62,9 @@
         return style;
 	}
 
+	/**
+	 * @param oldFigure
+	 */
 	protected void setCurrentFigure(CSSFigure oldFigure) {
 		this._figure = oldFigure;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/BRFigureHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/BRFigureHandler.java
index 78f3fec..ff32c72 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/BRFigureHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/BRFigureHandler.java
@@ -20,6 +20,10 @@
  * @author mengbo
  */
 public class BRFigureHandler extends AbstractFigureHandler {
+	/**
+	 * @param figure
+	 * @return the CSS layout for fixed layout
+	 */
 	protected CSSLayout getFixedCSSLayout(CSSFigure figure) {
 		return new CSSBrFlowLayout(figure);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/FigureFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/FigureFactory.java
index 82406a2..cb6dfed 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/FigureFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/FigureFactory.java
@@ -14,13 +14,17 @@
 import java.util.List;
 
 import org.eclipse.draw2d.IFigure;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory2;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.css2.layout.CSSFigure;
 import org.eclipse.jst.pagedesigner.css2.layout.CSSTextFigure;
 import org.eclipse.jst.pagedesigner.css2.provider.ICSSTextProvider;
+import org.eclipse.jst.pagedesigner.editors.palette.TagImageManager;
 import org.eclipse.jst.pagedesigner.utils.HTMLUtil;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -31,23 +35,8 @@
  * @author mengbo
  * @version 1.5
  */
-public class FigureFactory {
-	// public static IFigure createFigure(Element ele, boolean deep)
-	// {
-	// IFigureHandler handler = createAndAdapt(ele);
-	// IFigure figure = handler.createFigure(ele);
-	//
-	// if (deep && !handler.isWidget())
-	// {
-	// NodeList children = ele.getChildNodes();
-	// for (int i = 0, size = children.getLength(); i < size; i++)
-	// {
-	// createFigureDeep(figure, children.item(i));
-	// }
-	// }
-	// return figure;
-	// }
-
+public final class FigureFactory 
+{
 	/**
 	 * @param figure
 	 * @param node
@@ -120,6 +109,12 @@
 		}
 	}
 
+	/**
+	 * @param ele
+	 * @param old
+	 * @param figure
+	 * @return the figure
+	 */
 	public static IFigure updateDeepFigure(Element ele, Element old,
 			CSSFigure figure) {
 		recursiveDisposeAndUnadapt(old);
@@ -139,15 +134,8 @@
 		return figure;
 	}
 
-	public static void updateNonDeepFigure(Element ele, CSSFigure figure) {
-		IFigureHandler handler = getHandler(ele);
-		if (handler == null) {
-			handler = createAndAdapt(ele);
-		}
-		handler.updateFigure(ele, figure);
-	}
 
-	static void recursiveDisposeAndUnadapt(Element ele) {
+	private static void recursiveDisposeAndUnadapt(Element ele) {
 		disposeAndUnadapt(ele);
 		NodeList nl = ele.getChildNodes();
 		for (int i = 0, size = nl.getLength(); i < size; i++) {
@@ -158,7 +146,7 @@
 		}
 	}
 
-	static void disposeAndUnadapt(Element ele) {
+	private static void disposeAndUnadapt(Element ele) {
 		IFigureHandler handler = getHandler(ele);
 		if (handler != null) {
 			handler.dispose();
@@ -166,7 +154,7 @@
 		}
 	}
 
-	static IFigureHandler getHandler(Element ele) {
+	private static IFigureHandler getHandler(Element ele) {
 		if (ele instanceof IDOMElement) {
 			IDOMElement xmlele = (IDOMElement) ele;
 			return (IFigureHandler) xmlele.getAdapterFor(IFigureHandler.class);
@@ -174,7 +162,7 @@
 		return null;
 	}
 
-	static IFigureHandler createAndAdapt(Element ele) {
+	private static IFigureHandler createAndAdapt(Element ele) {
 		IFigureHandler handler = createFigureHandler(ele);
 		if (ele instanceof IDOMElement) {
 			((IDOMElement) ele).addAdapter(handler);
@@ -182,7 +170,7 @@
 		return handler;
 	}
 
-	static IFigureHandler createFigureHandler(Element ele) {
+	private static IFigureHandler createFigureHandler(Element ele) {
 		String tag = ele.getTagName();
 		if ("input".equalsIgnoreCase(tag)) {
 			return new InputFigureHandler();
@@ -197,7 +185,7 @@
 		} else if ("br".equalsIgnoreCase(tag)) {
 			return new BRFigureHandler();
 		} else if (!HTMLUtil.isVisualHtmlElement(tag)) {
-			return new HiddenFigureHandler(getSharedHTMLImage(tag));
+			return new HiddenFigureHandler(getSharedHTMLImage(ele));
 		} else {
 			return new DefaultFigureHandler();
 		}
@@ -207,14 +195,22 @@
 	 * @param tag
 	 * @return
 	 */
-	private static Image getSharedHTMLImage(String tag) {
-		Image image = PDPlugin.getDefault().getImage(
-				"palette/HTML/small/HTML_" + tag.toUpperCase() + ".gif");
-		ImageData imageData = image.getImageData();
-		if (imageData.width < 16 || imageData.height < 16) {
-			return PDPlugin.getDefault().getImage(
-					"palette/GENERIC/small/PD_Palette_Default.gif");
-		}
-		return image;
+	private static Image getSharedHTMLImage(Element element) {
+		Image image = null;
+		
+        IStructuredDocumentContext context = IStructuredDocumentContextFactory2.INSTANCE.getContext(element);
+        if (context != null){   
+        	IWorkspaceContextResolver wsResolver  = IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(context);
+        	if (wsResolver != null){
+        		image = TagImageManager.getInstance().getSmallIconImage(wsResolver.getProject(),"HTML", element.getLocalName());
+        	}
+        }
+		return image != null ? image : PDPlugin.getDefault().getImage(
+			"palette/GENERIC/small/PD_Palette_Default.gif");	
+	}
+	
+	private FigureFactory()
+	{
+	    // no external instantiation
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/HiddenFigureHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/HiddenFigureHandler.java
index 0d94757..4a253cd 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/HiddenFigureHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/HiddenFigureHandler.java
@@ -21,9 +21,12 @@
  * @author mengbo
  * @version 1.5
  */
-public class HiddenFigureHandler extends WidgetFigureHandler {
-	Image _image;
+/*package*/ class HiddenFigureHandler extends WidgetFigureHandler {
+	private Image _image;
 
+	/**
+	 * @param image
+	 */
 	public HiddenFigureHandler(Image image) {
 		_image = image;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/IFigureHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/IFigureHandler.java
index 8283a48..99cfe3a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/IFigureHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/IFigureHandler.java
@@ -23,11 +23,24 @@
  * @version 1.5
  */
 public interface IFigureHandler extends INodeAdapter {
+	/**
+	 * @param node
+	 * @param oldFigure
+	 */
 	public void updateFigure(Element node, CSSFigure oldFigure);
 
+	/**
+	 * 
+	 */
 	public void dispose();
 
+	/**
+	 * @return true if the node is deemed a widget
+	 */
 	public boolean isWidget();
 
+	/**
+	 * @return the figure
+	 */
 	public CSSFigure getFigure();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/ImgFigureHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/ImgFigureHandler.java
index 46ca9ac..b47e945 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/ImgFigureHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/ImgFigureHandler.java
@@ -20,7 +20,10 @@
 /**
  * @author mengbo
  */
-public class ImgFigureHandler extends WidgetFigureHandler {
+/*package*/ class ImgFigureHandler extends WidgetFigureHandler {
+	/**
+	 * the image provided for a widget
+	 */
 	protected Image _image;
 
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/InputFigureHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/InputFigureHandler.java
index 68c6d49..069e121 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/InputFigureHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/InputFigureHandler.java
@@ -29,7 +29,7 @@
 /**
  * @author mengbo
  */
-public class InputFigureHandler extends WidgetFigureHandler {
+/*package*/ class InputFigureHandler extends WidgetFigureHandler {
 	private Image _image;
 
 	void initializeImage(Element node) {
@@ -76,7 +76,7 @@
 	/**
 	 * should not return null
 	 * 
-	 * @return
+	 * @return the image
 	 */
 	protected Image getHiddenImage() {
 		return PDPlugin.getDefault().getImage(
@@ -137,7 +137,7 @@
 	}
 
 	/**
-	 * @return
+	 * @return the widget provider
 	 */
 	protected ICSSWidgetProvider initializeWidgetProvider(Element node) {
 		reset();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/ObjectFigureHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/ObjectFigureHandler.java
index a608387..93f36a8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/ObjectFigureHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/ObjectFigureHandler.java
@@ -19,7 +19,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class ObjectFigureHandler extends ImgFigureHandler {
+/*package*/ class ObjectFigureHandler extends ImgFigureHandler {
 
 	/*
 	 * (non-Javadoc)
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/SelectFigureHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/SelectFigureHandler.java
index 35b65eb..6876b54 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/SelectFigureHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/SelectFigureHandler.java
@@ -24,8 +24,12 @@
 /**
  * @author mengbo
  */
-public class SelectFigureHandler extends WidgetFigureHandler {
+/*package*/ class SelectFigureHandler extends WidgetFigureHandler {
 
+	/**
+	 * @param node
+	 * @return the labels
+	 */
 	public String[] getOptionLabels(Element node) {
 		List options = DOMUtil.getChildElementsByTagIgnoreCase(node,
 				IHTMLConstants.TAG_OPTION);
@@ -37,6 +41,10 @@
 		return ret;
 	}
 
+	/**
+	 * @param node
+	 * @return the label
+	 */
 	public String getSelectedLabels(Element node) {
 		List options = DOMUtil.getChildElementsByTagIgnoreCase(node,
 				IHTMLConstants.TAG_OPTION);
@@ -50,15 +58,19 @@
 		return result;
 	}
 
-	protected boolean isMultiple(Element node) {
+	/**
+	 * @param node
+	 * @return true if is multiple
+	 */
+	private boolean isMultiple(Element node) {
 		return DOMUtil
 				.getAttributeIgnoreCase(node, ICSSPropertyID.VAL_MULTIPLE) != null;
 	}
 
 	/**
-	 * @return
+	 * @return the provider
 	 */
-	protected ICSSWidgetProvider initializeWidgetProvider(Element node) {
+	protected final ICSSWidgetProvider initializeWidgetProvider(Element node) {
 		String[] labels = getOptionLabels(node);
 		String rows = DOMUtil.getAttributeIgnoreCase(node,
 				IHTMLConstants.ATTR_SIZE);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/TextareaFigureHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/TextareaFigureHandler.java
index d92eee6..2b42a4f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/TextareaFigureHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/TextareaFigureHandler.java
@@ -20,7 +20,7 @@
  * @author mengbo
  * @version 1.5
  */
-public class TextareaFigureHandler extends WidgetFigureHandler {
+/*package*/ class TextareaFigureHandler extends WidgetFigureHandler {
 	protected ICSSWidgetProvider initializeWidgetProvider(Element node) {
 		TextAreaWidgetProvider provider = new TextAreaWidgetProvider(
 				getCSSStyle(node));
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/WidgetFigureHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/WidgetFigureHandler.java
index 3f3fa28..d2a3421 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/WidgetFigureHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/figurehandler/WidgetFigureHandler.java
@@ -16,8 +16,15 @@
 import org.eclipse.jst.pagedesigner.css2.provider.ICSSWidgetProvider;
 import org.w3c.dom.Element;
 
-public abstract class WidgetFigureHandler extends AbstractFigureHandler {
+/**
+ * A widget figure handler
+ *
+ */
+abstract class WidgetFigureHandler extends AbstractFigureHandler {
 
+	/**
+	 * default constructor
+	 */
 	public WidgetFigureHandler() {
 		super();
 	}
@@ -30,6 +37,10 @@
 				.setFixedLayoutManager(new CSSWidgetLayout(oldFigure, provider));
 	}
 
+	/**
+	 * @param ele
+	 * @return the widget provider
+	 */
 	protected abstract ICSSWidgetProvider initializeWidgetProvider(Element ele);
 
 	public boolean isWidget() {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/internal/metadata/SybaseCMConfigMetaDataLocator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/internal/metadata/SybaseCMConfigMetaDataLocator.java
new file mode 100644
index 0000000..6c259f5
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/internal/metadata/SybaseCMConfigMetaDataLocator.java
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.internal.metadata;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jst.jsf.common.metadata.internal.AbstractMetaDataLocator;
+import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataLocator;
+import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider;
+import org.eclipse.jst.pagedesigner.IJMTConstants;
+import org.eclipse.jst.pagedesigner.PDPlugin;
+import org.eclipse.jst.pagedesigner.meta.ICMRegistry;
+import org.eclipse.jst.pagedesigner.meta.internal.SimpleCMRegistry;
+import org.osgi.framework.Bundle;
+import org.xml.sax.SAXException;
+
+/**
+ * Locates Sybase CM config metadata files. 
+ * 
+ * Supplied to ease migration to JSF Common meta data by allowing current MD into JSF common md format.
+ * 
+ * @deprecated this will be disappearing along with all of the Sybase meta data 
+ * and supporting classes before Ganymede release
+ *
+ */
+public class SybaseCMConfigMetaDataLocator extends AbstractMetaDataLocator {
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jst.jsf.common.metadata.internal.IMetaDataLocator#locateMetaDataModelProviders(java.lang.String)
+	 */
+	public List locateMetaDataModelProviders(String uri) {
+//		if (1==1)
+//			return null; //temp... turn off translation!
+		
+		List <ICMRegistry> registries = findCMRegistries(uri);
+		if (! registries.isEmpty()) {
+			List <IMetaDataSourceModelProvider> providers = new ArrayList<IMetaDataSourceModelProvider>(registries.size());
+			for (ICMRegistry reg : registries) {
+				if (reg.getSupportedURI().equals(uri)) {
+					providers.add(createMetaDataSourceProvider(reg));
+				}
+			}
+			return providers;
+		}
+		return null;
+	}
+
+	private List<ICMRegistry> findCMRegistries(String uri) {
+		List<ICMRegistry> contributedRegistries = new ArrayList<ICMRegistry>();
+		IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
+				.getExtensionPoint(PDPlugin.getPluginId(),
+						IJMTConstants.EXTENSION_POINT_CMREGISTRY);
+		IConfigurationElement[] eles = extensionPoint
+				.getConfigurationElements();
+
+		for (int i = 0; i < eles.length; i++) {
+			if (eles[i].getName().equals("registry")) {
+				String cmUri = eles[i].getAttribute("uri");
+				if (cmUri != null && cmUri.equals(uri)) {
+					String configFile = eles[i].getAttribute("configFile");
+					if (configFile != null && configFile.length() > 0) {
+						String bundleName = eles[i].getDeclaringExtension()
+								.getContributor().getName();
+						try {
+							Bundle bundle = Platform.getBundle(bundleName);
+							URL cmFileUrl = bundle.getEntry(configFile);
+							SimpleCMRegistry reg = new SimpleCMRegistry(uri,
+									cmFileUrl);
+							contributedRegistries.add(reg);
+						} catch (ParserConfigurationException e) {
+			                PDPlugin.getLogger(getClass()).error(new Throwable(e));
+			            } catch (FactoryConfigurationError e) {
+			                PDPlugin.getLogger(getClass()).error(new Throwable(e));                    
+			            } catch (SAXException e) {
+			                PDPlugin.getLogger(getClass()).error(new Throwable(e));
+			            } catch (IOException e) {
+			                PDPlugin.getLogger(getClass()).error(new Throwable(e));
+			            }
+					}
+					String className = eles[i].getAttribute("class");
+					if (className != null && className.length() > 0) {
+						try {
+							Object obj = eles[i].createExecutableExtension("class");
+							
+							if (obj instanceof ICMRegistry) {
+								contributedRegistries.add((ICMRegistry)obj);
+							}
+						} catch (CoreException e) {
+						    PDPlugin.getLogger(getClass()).error(new Throwable(e));
+						}
+					}
+				}
+			}
+		}
+		return contributedRegistries;
+	}
+	
+	private IMetaDataSourceModelProvider createMetaDataSourceProvider(ICMRegistry reg) {		
+		IMetaDataSourceModelProvider provider = new SybaseCMConfigMetadataProvider(reg);
+		provider.setLocator(this);
+		return provider;
+	}
+
+	/* 
+	 * Does nothing.
+	 */
+	public void startLocating() {
+		//do nothing
+	}
+
+	/* 
+	 * Does nothing.
+	 */
+	public void stopLocating() {
+		//do nothing
+	}
+
+	/**
+	 *
+	 */
+	public class SybaseCMConfigMetadataProvider implements IMetaDataSourceModelProvider {
+		private IMetaDataLocator _locator;
+		private ICMRegistry _reg;
+		/**
+		 * Construct from ICMRegsistry
+		 * @param reg
+		 */
+		public SybaseCMConfigMetadataProvider(ICMRegistry reg) {
+			_reg = reg;
+		}
+
+		public Object getSourceModel() {
+			return _reg;
+		}
+		
+		public IMetaDataLocator getLocator() {
+			return _locator;
+		}
+
+		public void setLocator(IMetaDataLocator locator) {
+			_locator = locator;
+		}
+		
+		public Object getAdapter(Class adapter) {
+			// TODO Auto-generated method stub
+			return null;
+		}
+	}	
+}
+
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/internal/metadata/SybaseCMConfigMetaDataTranslator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/internal/metadata/SybaseCMConfigMetaDataTranslator.java
new file mode 100644
index 0000000..4ff0a8a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/internal/metadata/SybaseCMConfigMetaDataTranslator.java
@@ -0,0 +1,376 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.internal.metadata;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.eclipse.emf.ecore.xml.type.SimpleAnyType;
+import org.eclipse.emf.ecore.xml.type.XMLTypeFactory;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.MetadataFactory;
+import org.eclipse.jst.jsf.common.metadata.Model;
+import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataModelMergeAssistant;
+import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataSourceModelProvider;
+import org.eclipse.jst.jsf.common.metadata.internal.IMetaDataTranslator;
+import org.eclipse.jst.jsf.common.metadata.traittypes.traittypes.ListOfValues;
+import org.eclipse.jst.jsf.common.metadata.traittypes.traittypes.TraitTypesFactory;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
+import org.eclipse.jst.pagedesigner.meta.IAttributeRuntimeValueType;
+import org.eclipse.jst.pagedesigner.meta.IElementDescriptor;
+import org.eclipse.jst.pagedesigner.meta.OLDIValueType;
+import org.eclipse.jst.pagedesigner.meta.internal.SimpleCMRegistry;
+
+/**
+ * Translates Sybase MD into JSF common MD and attribute value type system.
+ * 
+ * Supplied to ease migration to JSF Common meta data by allowing current MD into JSF common md format.
+ * 
+ * @deprecated this will be disappearing along with all of the Sybase meta data 
+ * and supporting classes before Ganymede release
+ *
+ */
+public class SybaseCMConfigMetaDataTranslator implements IMetaDataTranslator {
+	private static final String ATTR_VAL_RUNTIME_TYPE = "attribute-value-runtime-type";
+	private IMetaDataModelMergeAssistant _assistant;
+
+	public boolean canTranslate(IMetaDataSourceModelProvider modelProvider) {		
+		if (modelProvider.getSourceModel() != null && 
+				modelProvider.getSourceModel() instanceof SimpleCMRegistry)
+			return true;
+		return false;
+	}
+	
+	public void translate(IMetaDataModelMergeAssistant assistant) {
+		_assistant = assistant;
+		SimpleCMRegistry reg = (SimpleCMRegistry)assistant.getSourceModelProvider().getSourceModel();
+		traverseCMRegistryModel(reg);
+	}
+
+	private void traverseCMRegistryModel(SimpleCMRegistry reg){
+		for (Iterator it=reg.getMap().entrySet().iterator(); it.hasNext();){
+		    Map.Entry entry = (Map.Entry)it.next();			
+			IElementDescriptor tagElem = (IElementDescriptor)entry.getValue();
+			findOrCreateTag(tagElem);
+		}
+	}
+	
+	private void findOrCreateTag(IElementDescriptor tagElem) {
+		Entity tag =_assistant.getMergedEntity(getMergedModel(), tagElem.getTagName());
+		if (tag == null){
+			tag = internalCreateTagEntity(tagElem);
+			getMergedModel().getChildEntities().add(tag);
+		}
+		createTagTraits(tag, tagElem);
+		createAttributeEntities(tag, tagElem);
+	}
+
+	private void createAttributeEntities(Entity tag, IElementDescriptor tagElem) {
+		for (IAttributeDescriptor attrDesc : tagElem.getAttributeDescriptors()){
+			Entity attr =_assistant.getMergedEntity(tag, attrDesc.getAttributeName());
+			if (attr == null) {
+				attr = internalCreateAttributeEntity(attrDesc);
+				tag.getChildEntities().add(attr);
+			}
+			createAttributeTraits(attr, attrDesc);
+		}
+		if (tagElem.getReference() != null) {
+			//create attributes from referenced tag
+			createAttributeEntities(tag,tagElem.getReference());
+		}
+	}
+
+	private void createAttributeTraits(Entity attr,
+			IAttributeDescriptor attrDesc) {
+		
+		//convert ValueType to runtime-attrib-values
+		convertValueType(attr, attrDesc);
+
+		createTraitAndSimpleAnyTypeValue(attr, "display-label", attrDesc.getLabelString());
+		createTraitAndSimpleAnyTypeValue(attr, "description", attrDesc.getDescription());
+		createTraitAndSimpleAnyTypeValue(attr, "default-value", attrDesc.getDefaultValue());
+		createTraitAndSimpleAnyTypeValue(attr, IPropertyPageDescriptor.PROP_DESC_CATEGORY, attrDesc.getCategory());
+		createTraitAndSimpleAnyTypeValue(attr, "required", String.valueOf(attrDesc.isRequired()));
+		
+		
+		
+	}
+
+	private void createTraitAndSimpleAnyTypeValue(Entity attr, String traitKey,
+			String traitValue) {
+		
+		if (traitValue != null && traitValue.trim().length() > 0) {
+			Trait trait = createTrait(attr, traitKey);
+			setTraitValueUsingSimpleAnyType(trait, traitValue);	
+			attr.getTraits().add(trait);
+		}
+	}
+
+	private void convertValueType(Entity attr, IAttributeDescriptor attrDesc) {
+		if (hasTrait(attr, ATTR_VAL_RUNTIME_TYPE)){
+			return;
+		}
+		String rtType = null;
+		String valType = attrDesc.getValueType();
+		Trait trait = createTrait(attr, ATTR_VAL_RUNTIME_TYPE);
+		if (OLDIValueType.ENUMERATED.equals(valType)){
+			if ("lang".equalsIgnoreCase(attrDesc.getAttributeName()))
+				rtType = IAttributeRuntimeValueType.LANGUAGECODE;
+//			else if ()
+			else {
+				rtType = IAttributeRuntimeValueType.STRING;
+				createPossibleValuesAndValidValueTraits(attr, attrDesc);
+			}
+		}
+		else if (OLDIValueType.BOOLEAN.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.BOOLEAN;
+		}
+		else if (OLDIValueType.CLASSNAME.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.JAVACLASS;
+			//"superType=I:javax.faces.event.ActionListener" 
+			int colonIndex = attrDesc.getTypeParameter().lastIndexOf(":");
+			String superTypeValue= attrDesc.getTypeParameter().substring(colonIndex+1);
+			String superTypeType= attrDesc.getTypeParameter().substring(colonIndex-1,colonIndex);
+			if (superTypeType.equalsIgnoreCase("I"))
+				createTraitAndSimpleAnyTypeValue(attr, "valid-interfaces", superTypeValue);
+			else
+				createTraitAndSimpleAnyTypeValue(attr, "valid-superclass", superTypeValue);
+		}
+		else if (OLDIValueType.CLASSPATH_RESOURCE.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.RESOURCEBUNDLE;
+		}
+		else if (OLDIValueType.COLOR.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.COLOR;
+		}
+		else if (OLDIValueType.CSSCLASS.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.CSSCLASS;
+		}
+		else if (OLDIValueType.CSSID.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.CSSID;
+		}
+		else if (OLDIValueType.CSSSTYLE.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.CSSSTYLE;
+		}
+		else if (OLDIValueType.CURRENCYCODE.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.CURRENCYCODE;
+		}
+		else if (OLDIValueType.JAVASCRIPT.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.SCRIPT;
+		}
+		else if (OLDIValueType.LINK.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.LINK;
+		}
+		else if (OLDIValueType.LOCALE.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.LOCALE;
+		}
+		else if (OLDIValueType.METHODBINDING.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.METHODBINDING;
+			if (attr.getId().equals("validator"))			
+				createValidatorParams(attr);
+			else if (attr.getId().equals("actionListener")){
+				Trait t = createTrait(attr, "runtime-param-types");
+				t.setValue(createAndSetSimpleAnyTypeValue("javax.faces.event.ActionEvent"));
+				attr.getTraits().add(t);
+			}
+			else if (attr.getId().equals("valueChangeListener")){
+				Trait t = createTrait(attr, "runtime-param-types");
+				t.setValue(createAndSetSimpleAnyTypeValue("javax.faces.event.ValueChangeEvent"));
+				attr.getTraits().add(t);
+			}
+			Trait t2 = createTrait(attr, "runtime-return-type");
+			t2.setValue(createAndSetSimpleAnyTypeValue("void"));	
+			attr.getTraits().add(t2);
+		}
+		else if (OLDIValueType.MULTICHOICE.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.STRING;
+		}
+		else if (OLDIValueType.NAMED_BOOLEAN.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.BOOLEAN;
+		}
+		else if (OLDIValueType.PROPERTYBINDING.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.VALUEBINDING;
+		}
+		else if (OLDIValueType.RELATIVEPATH.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.RELATIVEPATH;
+		}
+		else if (OLDIValueType.TIMEZONE.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.TIMEZONE;
+		}
+		else if (OLDIValueType.WEBPATH.equals(valType)) {
+			rtType = IAttributeRuntimeValueType.WEBPATH;
+//			createWebPathValidExtensionsTrait(attr, attrDesc);
+		}
+		else
+			rtType = IAttributeRuntimeValueType.STRING;
+		
+		setTraitValueUsingSimpleAnyType(trait, rtType.toString());		
+		setTypeParamsIfAny(attr, attrDesc);
+		attr.getTraits().add(trait);
+	}
+
+	private void setTypeParamsIfAny(Entity attr, IAttributeDescriptor attrDesc) {
+		//this method is relying on the fact that only one typeParam is being set.   this is all that was ever done by the Sybase config
+		if (attrDesc.getTypeParameter()!= null){
+			String typeParam = attrDesc.getTypeParameter(); 
+			if (typeParam.indexOf(IAttributeDescriptor.PARAMETER_SUFFIX) > -1){
+				int i = typeParam.indexOf(IAttributeDescriptor.PARAMETER_SUFFIX);
+				String suffixes = typeParam.substring(i+IAttributeDescriptor.PARAMETER_SUFFIX.length()+1);
+				Trait trait = createTrait(attr, "file-extensions");
+				StringTokenizer st = new StringTokenizer(suffixes, ";");
+				ListOfValues exts = TraitTypesFactory.eINSTANCE.createListOfValues();
+				while (st.hasMoreElements()){
+					String ext = st.nextToken();
+					exts.getEntries().add(createAndSetSimpleAnyTypeValue(ext));
+				}
+				trait.setValue(exts);
+				attr.getTraits().add(trait);
+			}
+			else if (typeParam.indexOf(IAttributeDescriptor.PARAMETER_DEFAULT) > -1){
+				int i = typeParam.indexOf(IAttributeDescriptor.PARAMETER_DEFAULT);
+				String defaultVal = typeParam.substring(i+IAttributeDescriptor.PARAMETER_DEFAULT.length()+1);
+				createTraitAndSimpleAnyTypeValue(attr, "default-value", defaultVal);
+			}
+			else if (typeParam.indexOf(IAttributeDescriptor.PARAMETER_SEPARATOR) > -1){
+				int i = typeParam.indexOf(IAttributeDescriptor.PARAMETER_SEPARATOR);
+				String sep = typeParam.substring(i+IAttributeDescriptor.PARAMETER_SEPARATOR.length()+1);
+				createTraitAndSimpleAnyTypeValue(attr, "multi-choice-seperator", sep);
+			}
+			else if (typeParam.indexOf(IAttributeDescriptor.PARAMETER_STYLE) > -1){
+				int i = typeParam.indexOf(IAttributeDescriptor.PARAMETER_STYLE);
+				String style = typeParam.substring(i+IAttributeDescriptor.PARAMETER_STYLE.length()+1);
+				createTraitAndSimpleAnyTypeValue(attr, "style", style);
+			}
+			else if (typeParam.indexOf(IAttributeDescriptor.PARAMETER_SUPER_TYPE) > -1){
+				//do nothing; handled by JavaClassType translation
+			}
+			else if (typeParam.length() > 0){
+				//what to do?  CSSClass seems to require 'empty' type param
+				System.out.println(typeParam);
+			}
+		}
+	}
+
+//	private void createWebPathValidExtensionsTrait(Entity attr, IAttributeDescriptor attrDesc) {
+//		List<String> exts = new ArrayList<String>();
+//		if (attrDesc.getTypeParameter().indexOf("=") > 0){
+//			String extS = attrDesc.getTypeParameter().substring(attrDesc.getTypeParameter().indexOf("=")+1);//remove "suffix="
+//			StringTokenizer st = new StringTokenizer(extS, ";");
+//			while (st.hasMoreElements()){
+//				exts.add((String)st.nextElement());
+//			}
+//			Trait trait = createTrait(attr, "file-extension-filters");
+//			ListOfValues list =  TraitTypesFactory.eINSTANCE.createListOfValues();
+//			for (String ext : exts){
+//				list.getEntries().add(createAndSetSimpleAnyTypeValue(ext));
+//			}
+//			trait.setValue(list);
+//			attr.getTraits().add(trait);
+//		}
+//	}
+
+	private void createValidatorParams(Entity attr) {
+		Trait t = createTrait(attr, "runtime-param-types");
+		ListOfValues list =  TraitTypesFactory.eINSTANCE.createListOfValues();
+		list.getEntries().add(createAndSetSimpleAnyTypeValue("javax.faces.context.FacesContext"));
+		list.getEntries().add(createAndSetSimpleAnyTypeValue("javax.faces.component.UIComponent"));
+		list.getEntries().add(createAndSetSimpleAnyTypeValue("java.lang.Object"));
+	
+		t.setValue(list);
+		attr.getTraits().add(t);
+	}
+	
+	private SimpleAnyType createAndSetSimpleAnyTypeValue(String rawVal){
+		SimpleAnyType item = XMLTypeFactory.eINSTANCE.createSimpleAnyType();
+		item.setRawValue(rawVal);
+		return item;
+	}
+
+	private void createPossibleValuesAndValidValueTraits(Entity attr,
+			IAttributeDescriptor attrDesc) {
+		if (attrDesc.getOptions() != null){
+			Trait validVals = MetadataFactory.eINSTANCE.createTrait();
+			validVals.setId("valid-values");
+			validVals.setSourceModelProvider(_assistant.getSourceModelProvider());
+			
+			Trait displayVals = MetadataFactory.eINSTANCE.createTrait();
+			displayVals.setId("displayed-values");
+			displayVals.setSourceModelProvider(_assistant.getSourceModelProvider());
+			
+			Map options = attrDesc.getOptions();
+			ListOfValues validVs = TraitTypesFactory.eINSTANCE.createListOfValues();
+			ListOfValues displayVs = TraitTypesFactory.eINSTANCE.createListOfValues();
+			for (Iterator it=options.entrySet().iterator();it.hasNext();){
+				Map.Entry entry = (Map.Entry)it.next();
+				validVs.getEntries().add(createAndSetSimpleAnyTypeValue((String)entry.getKey()));
+				displayVs.getEntries().add(createAndSetSimpleAnyTypeValue((String)entry.getValue()));
+			}
+			if (validVs.getEntries().size() > 0) {
+				validVals.setValue(validVs);
+				displayVals.setValue(displayVs);
+				attr.getTraits().add(validVals);
+				attr.getTraits().add(displayVals);
+			}
+		}		
+	}
+
+	private void setTraitValueUsingSimpleAnyType(Trait trait, String type) {
+		SimpleAnyType value = XMLTypeFactory.eINSTANCE.createSimpleAnyType();
+		value.setRawValue(type);
+		trait.setValue(value);
+	}
+	
+	private Trait createTrait(Entity entity, String id){
+		Trait trait = MetadataFactory.eINSTANCE.createTrait();
+		trait.setId(id);
+		trait.setSourceModelProvider(_assistant.getSourceModelProvider());
+		return trait;
+	}
+	
+	private boolean hasTrait(Entity attr, String traitKey) {
+		
+		return false;
+	}
+
+	private void createTagTraits(Entity tag, IElementDescriptor tagElem) {
+		if (tagElem.getHelpContextID() != null && !tagElem.getHelpContextID().equals("")){
+			//create help-topic-id trait...
+			//not bothering at the moment as we are not providing tooling at the moment
+		}
+	}
+
+	private Entity internalCreateTagEntity(IElementDescriptor tagElem) {
+		Entity tag = MetadataFactory.eINSTANCE.createEntity();
+		tag.setId(tagElem.getTagName());
+		return tag;
+	}
+	
+	private Entity internalCreateAttributeEntity(IAttributeDescriptor attrDesc) {
+		Entity attr = MetadataFactory.eINSTANCE.createEntity();
+		attr.setId(attrDesc.getAttributeName());
+		return attr;
+	}
+
+	private Model getMergedModel(){
+		if ((Model)_assistant.getMergedModel().getRoot() != null)
+			return (Model)_assistant.getMergedModel().getRoot();
+		
+		Model model = MetadataFactory.eINSTANCE.createModel();
+		model.setId(_assistant.getMergedModel().getModelKey().getUri());
+		model.setSourceModelProvider(_assistant.getSourceModelProvider());
+		_assistant.getMergedModel().setRoot(model);
+		return model;
+		
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/AbstractTagCreationAdvisor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/AbstractTagCreationAdvisor.java
new file mode 100644
index 0000000..6f05ef6
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/AbstractTagCreationAdvisor.java
@@ -0,0 +1,116 @@
+package org.eclipse.jst.pagedesigner.itemcreation;
+
+import java.util.Collection;
+
+import org.eclipse.jst.pagedesigner.dom.DOMPositionHelper;
+import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
+import org.eclipse.jst.pagedesigner.itemcreation.command.ContainerCreationCommand;
+import org.eclipse.jst.pagedesigner.itemcreation.command.ElementCustomizationCommand;
+import org.eclipse.jst.pagedesigner.utils.BodyHelper;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.w3c.dom.Element;
+
+/**
+ * Clients should sub-class in order to create a new ITagCreationAdvisor type,
+ * however, it is preferable to extend DefaultTagCreationAdvisor where possible.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class AbstractTagCreationAdvisor implements ITagCreationAdvisor 
+{
+    /**
+     * Information passed by the framework about the tag to be created
+     * {@link CreationData}
+     */
+    protected final CreationData  _creationData;
+
+    /**
+     * @param creationData
+     */
+    public AbstractTagCreationAdvisor(CreationData  creationData)
+    {
+        this._creationData = creationData;
+    }
+
+    /**
+     * @param model
+     * @param tagElement
+     */
+    public final void applyCustomization(IDOMModel model, Element tagElement)
+    {
+        ElementCustomizationCommand command = 
+            getElementCustomizationCommand(model, tagElement);
+        
+        if (command != null && command.canExecute())
+        {
+            command.execute();
+        }
+    }
+
+    /**
+     * @param model
+     * @param tagElement
+     * @return the customization command
+     */
+    protected abstract ElementCustomizationCommand getElementCustomizationCommand(IDOMModel model, Element tagElement);
+
+    /**
+     * Return position for tag after all necessary containers are created.  
+     * If nnecessary containers cannot be created and do not exist for any reason,
+     * implementer should return null
+     * to signal that the tag creation should not occur.
+     * 
+     * Clients may override this method to provide custom container positioning
+     * 
+     * @param model
+     * @param domPosition
+     * @return position after necessary containers are created
+     */
+    public final IDOMPosition checkAndApplyNecessaryContainers(
+            IDOMModel model, IDOMPosition domPosition) 
+    {
+        IDOMPosition position = DOMPositionHelper.splitText(domPosition);
+
+        position = BodyHelper.adjustInsertPosition
+            (_creationData.getUri(), _creationData.getTagName(), position);
+        
+        //position = getContainerCreationCommands(position);
+        ContainerCreationCommand command = getContainerCreationCommand(position);
+        
+        if (command != null)
+        {
+            command.execute();
+            Collection<IDOMPosition>  collection = command.getResult();
+            
+            if (collection.size()==1)
+            {
+                position = collection.iterator().next(); 
+            }
+            else
+            {
+                position = null;
+            }
+        }
+
+        if (position == null) {
+            // user cancelled
+            return null;
+        }
+
+        // because the next call of getPrefix() may insert new taglib node
+        // into the document, if we use the normal
+        // DOMPositin which use index, maybe it will be invalidated by the
+        // new taglib node. So use RefPosition here.
+        return DOMPositionHelper.toDOMRefPosition(position);
+    }
+
+    /**
+     * @param position
+     * @return a command (could be CompoundCommand or chained command) that when executed
+     * will add any necessary containers.
+     */
+    protected abstract ContainerCreationCommand getContainerCreationCommand(IDOMPosition position);
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/AbstractTagCreator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/AbstractTagCreator.java
new file mode 100644
index 0000000..98b747f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/AbstractTagCreator.java
@@ -0,0 +1,126 @@
+package org.eclipse.jst.pagedesigner.itemcreation;
+
+import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
+import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.w3c.dom.Element;
+
+/**
+ * The abstract class from which all client ITagCreator instances
+ * should be derived.
+ * 
+ * The createTag method enforces a set of steps required by the framework
+ * to create a new tag.  However, it allows you to configure some of the steps
+ * by providing an ITagCreationAdvisor through the doSelectCreationAdvisor.
+ *
+ * <p><b>Provisional API - subject to change</b></p>
+ *
+ * @author cbateman
+ *
+ */
+public abstract class AbstractTagCreator implements ITagCreator 
+{
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.pagedesigner.itemcreation.ITagCreator#createTag(org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry, org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel, org.eclipse.jst.pagedesigner.dom.IDOMPosition)
+     */
+    public final Element createTag(final CreationData creationData) 
+    {
+        final ITagCreationAdvisor  advisor = selectCreationAdvisor(creationData);
+        
+        // adjust the creation position to accommodate required containers
+        final IDOMPosition position = 
+            advisor.checkAndApplyNecessaryContainers(creationData.getModel(), creationData.getDomPosition());
+        
+        if (position == null) return null;//throw exception?
+
+        creationData.setAdjustedPosition(position);
+        
+        // create the element
+        final Element ele =  createElement(creationData);
+        if (ele == null) return null;//throw exception?
+
+        // apply tag customization
+        advisor.applyCustomization(creationData.getModel(), ele);
+
+        // ensure that any attributes required by the tag's definition
+        // is initialized.
+        // TODO: a drawback of this approach is that it leaves the tag in
+        // a state where there are no error flags to tell the user something is
+        // missing, but may initialize the tag with an (empty) invalid value
+        //ensureRequiredAttrs(ele, creationData);
+
+        addTagToContainer(position, ele);
+
+        return ele;
+    }
+
+    private ITagCreationAdvisor selectCreationAdvisor(CreationData creationData)
+    {
+        ITagCreationAdvisor advisor  = doSelectCreationAdvisor(creationData);
+
+        // enforce that the advisor must be an AbstractTagCreationAdvisor to 
+        // avoid using the default (not this case also covers advisor == null)
+        if (! (advisor instanceof AbstractTagCreationAdvisor))
+        {
+            advisor = new DefaultTagCreationAdvisor(creationData);
+        }
+
+        return advisor;
+    }
+    
+    /**
+     * @param creationData
+     * @return a tag creation advisor or null to indicate the use of the system default
+     */
+    protected abstract ITagCreationAdvisor doSelectCreationAdvisor(CreationData creationData);
+
+    /**
+     * @param creationData 
+     * @return {@link Element}
+     */
+    protected final Element createElement(final CreationData creationData)
+    {
+        Element ele =  creationData.getModel().getDocument().createElement(creationData.getTagName());
+        if (ele == null) return null;
+
+        //ugly... fix me
+        
+        // TODO: move this into an ensure method?
+        // XXX: we are using "startsWith("directive.")" to test whether
+        // should setJSPTag, this
+        // maybe is not the best way. Need check whether SSE have special
+        // API for it.
+        if (ITLDConstants.URI_JSP.equals(creationData.getUri())
+                && (ele.getLocalName().startsWith("directive.")
+                        || "declaration".equals(ele.getLocalName())
+                        || "expression".equals(ele.getLocalName()) || "scriptlet"
+                        .equals(ele.getLocalName()))) {
+            // it is a jsp tag
+            ((IDOMElement) ele).setJSPTag(true);
+        }
+
+        if (creationData.getPrefix() != null)
+        {
+            ele.setPrefix(creationData.getPrefix());
+        }
+
+        return ele;
+    }
+
+    /**
+     * @param position
+     * @param tagElement
+     */
+    private void addTagToContainer(final IDOMPosition position, final Element tagElement) {
+        if (position == null || position.getContainerNode() == null) {
+            return;
+        }
+
+        if (position.getNextSiblingNode() == null) {
+            position.getContainerNode().appendChild(tagElement);
+        } else {
+            position.getContainerNode().insertBefore(tagElement,
+                    position.getNextSiblingNode());
+        }
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java
new file mode 100644
index 0000000..9499c9e
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/CreationData.java
@@ -0,0 +1,251 @@
+package org.eclipse.jst.pagedesigner.itemcreation;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.Model;
+import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper;
+import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
+import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
+import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory;
+import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
+import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry;
+import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.PaletteInfo;
+import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.PaletteInfos;
+import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.TagCreationInfo;
+import org.eclipse.jst.pagedesigner.utils.JSPUtil;
+import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocType;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+
+/**
+ * Value object that wraps creation data
+ *  
+ * <p><b>Provisional API - subject to change</b></p>
+ *  
+ * @author cbateman
+ *
+ */
+public final class CreationData
+{
+    private final TagToolPaletteEntry   _tagEntry;
+    private final String                _prefix; 
+    private final IDOMPosition          _domPosition;
+    private final IDOMModel             _model;
+    private final IAdaptable            _customizationData;
+    
+    private TagIdentifier               _tagId; // = null; lazy init on creation 
+    
+    /**
+     * The tag {@link Entity} being created
+     */
+    private Entity _tagEntity; // = null; lazy load because derived from
+                               // potentially expensive meta-data search
+    
+    /**
+     * The {@link ITaglibDomainMetaDataModelContext} for the tag creation
+     */
+    private final ITaglibDomainMetaDataModelContext _taglibMetaDataContext;
+
+    // mutable because it may be changed from the original _domPosition
+    private IDOMPosition _adjustedPosition;
+
+    
+    /**
+     * @param tagEntry  TODO: remove this direct dependence on the palette
+     * @param model 
+     * @param domPosition 
+     * @param taglibMetaDataContext 
+     * @param customizationData 
+     */
+    public CreationData(final TagToolPaletteEntry tagEntry, final IDOMModel model, final IDOMPosition domPosition, final ITaglibDomainMetaDataModelContext taglibMetaDataContext, final IAdaptable customizationData) 
+    {
+        super();
+        this._tagEntry = tagEntry;
+        this._prefix = getPrefix(getUri(), model, getDefaultPrefix());
+        this._taglibMetaDataContext = taglibMetaDataContext;
+        this._domPosition = domPosition;
+        this._adjustedPosition = _domPosition;
+        this._model = model;
+        this._customizationData = customizationData; 
+    }
+
+    /**
+     * Returns the ns prefix for the tag and also creates taglib reference if necessary
+     * @param uri
+     * @param model
+     * @param suggested
+     * @return prefix to use
+     */
+    protected static String getPrefix(String uri, IDOMModel model,
+            String suggested) {
+        // TODO: this shouldn't really add to the document
+        if (ITLDConstants.URI_HTML.equalsIgnoreCase(uri)
+                || ITLDConstants.URI_JSP.equalsIgnoreCase(uri)
+                || CMDocType.JSP11_DOC_TYPE.equalsIgnoreCase(uri)) {
+            return null;
+        }
+
+        // now handles custom tag lib
+        return JSPUtil.getOrCreatePrefix(model, uri, suggested);
+    }
+    
+    /**
+     * @return the tag identifier uri
+     */
+    public String getUri() {
+        return _tagEntry.getURI();
+    }
+
+    /**
+     * @return the default prefix
+     */
+    public String getDefaultPrefix() {
+        return _tagEntry.getDefaultPrefix();
+    }
+
+    /**
+     * @return the local prefix for the  tag
+     */
+    public String getPrefix() {
+        return _prefix;
+    }
+
+    /**
+     * @return the tag name
+     */
+    public String getTagName() {
+        return _tagEntry.getTagName();
+    }
+
+    /**
+     * @return the id
+     */
+    private String getItemId() {
+        return _tagEntry.getId();
+    }
+
+    /**
+     * @return the palette entry that this creation info is based on
+     */
+    public TagToolPaletteEntry getTagEntry() {
+        return _tagEntry;
+    }
+    
+    /**
+     * @return {@link TagCreationInfo} for the tag entity
+     */
+    public TagCreationInfo getTagCreationInfo(){
+        Model model = TaglibDomainMetaDataQueryHelper.getModel(_taglibMetaDataContext);
+        if (model != null){
+            Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(model, PaletteInfos.TRAIT_ID);
+            if (trait != null){
+                PaletteInfos pis = (PaletteInfos)trait.getValue();
+                PaletteInfo pi = pis.findPaletteInfoById(getItemId());
+                if (pi != null){
+                    return pi.getTagCreation();                 
+                }
+            }
+            //tag-creation trait on entity directly?
+            Entity tag = getTagEntity();
+            if (tag != null){//metadata exists
+                trait = TaglibDomainMetaDataQueryHelper.getTrait(tag, "tag-create");
+                if (trait != null && trait.getValue() != null){
+                    return (TagCreationInfo)trait.getValue();                   
+                }
+            }
+        }
+        return null;
+    }
+
+    
+    /**
+     * @return the {@link Entity} for this tag element being created
+     */
+    public Entity getTagEntity() {
+        if (_tagEntity == null){
+            _tagEntity = TaglibDomainMetaDataQueryHelper.getEntity(_taglibMetaDataContext, getTagName());
+            
+        }
+        return _tagEntity;
+    }
+    
+    /**
+     * @return flag indicating that html form container ancestor is required
+     */
+    public boolean isHTMLFormRequired() {
+        Trait t = TaglibDomainMetaDataQueryHelper.getTrait(getTagEntity(), "requires-html-form");
+        if (t != null)
+            return TraitValueHelper.getValueAsBoolean(t);
+        
+        return false;
+    }
+    
+    /**
+     * @return flag indicating that jsf component
+     */
+    public boolean isJSFComponent() {      
+        Model model = TaglibDomainMetaDataQueryHelper.getModel(_taglibMetaDataContext);
+        Trait t = TaglibDomainMetaDataQueryHelper.getTrait(model, "is-jsf-component-library");
+        if (t != null)
+            return TraitValueHelper.getValueAsBoolean(t);
+        
+        return false;
+    }
+
+    /**
+     * @return the metadata context for the tag
+     */
+    public ITaglibDomainMetaDataModelContext getTaglibMetaDataContext() {
+        return _taglibMetaDataContext;
+    }
+
+    /**
+     * @return the original dom position of the tag creation
+     */
+    public IDOMPosition getDomPosition() {
+        return _domPosition;
+    }
+
+    /**
+     * @return the dom model
+     */
+    public IDOMModel getModel() 
+    {
+        return _model;
+    }
+
+    /**
+     * @return the adjusted position (calculated to account for containers etc.)
+     */
+    public IDOMPosition getAdjustedPosition() {
+        return _adjustedPosition;
+    }
+
+    /**
+     * @param adjustedPosition
+     */
+    /*package*/ void setAdjustedPosition(IDOMPosition adjustedPosition) {
+        _adjustedPosition = adjustedPosition;
+    }
+
+    /**
+     * @return the TagIdentifer for the tag to be created
+     */
+    public TagIdentifier getTagId() 
+    {
+        if (_tagId == null)
+        {
+            _tagId = TagIdentifierFactory.createJSPTagWrapper(getUri(), getTagName());
+        }
+        return _tagId;
+    }
+
+    /**
+     * @return the customization data passed in from the tool.  May be null.
+     */
+    public IAdaptable getDropCustomizationData() {
+        return _customizationData;
+    }
+}
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/DefaultTagCreationAdvisor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/DefaultTagCreationAdvisor.java
new file mode 100644
index 0000000..4517801
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/DefaultTagCreationAdvisor.java
@@ -0,0 +1,79 @@
+package org.eclipse.jst.pagedesigner.itemcreation;
+
+import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
+import org.eclipse.jst.pagedesigner.IHTMLConstants;
+import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
+import org.eclipse.jst.pagedesigner.itemcreation.command.ContainerCreationCommand;
+import org.eclipse.jst.pagedesigner.itemcreation.command.ElementCustomizationCommand;
+import org.eclipse.jst.pagedesigner.itemcreation.command.SingletonContainerCreationCommand;
+import org.eclipse.jst.pagedesigner.itemcreation.command.TagContainerCreationCommand;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.w3c.dom.Element;
+
+/**
+ * The default advisor.
+ * 
+ * Clients may extend this class.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ * @author cbateman
+ *
+ */
+public class DefaultTagCreationAdvisor extends AbstractTagCreationAdvisor 
+{
+    /**
+     * @param creationData
+     */
+    public DefaultTagCreationAdvisor(CreationData creationData) 
+    {
+        super(creationData);
+    }
+
+    
+    @Override
+    protected ElementCustomizationCommand getElementCustomizationCommand(
+            IDOMModel model, Element tagElement) {
+        return new ElementCustomizationCommand(model, tagElement, _creationData);
+    }
+
+    /**
+     * @param position the initial drop position
+     * @return position after creating required containers
+     */
+    protected ContainerCreationCommand getContainerCreationCommand(final IDOMPosition position) {
+        if (_creationData.isJSFComponent()) {
+            return getJSFContainerCommand(position);
+        }
+        else if (_creationData.isHTMLFormRequired()){
+            return getHtmlFormCommand(position);
+        }
+        return null;
+    }
+    
+    /**
+     * @param position
+     * @return the default container creation command for a JSF tag
+     */
+    protected ContainerCreationCommand getJSFContainerCommand(final IDOMPosition position)
+    {
+        ContainerCreationCommand command = 
+            new SingletonContainerCreationCommand(position, IJSFConstants.TAG_IDENTIFIER_VIEW, _creationData.getTagId());
+        
+        if (_creationData.isHTMLFormRequired())
+        {
+            command.chain(new TagContainerCreationCommand(position, IJSFConstants.TAG_IDENTIFIER_FORM, _creationData.getTagId()));
+        }
+        
+        return command;
+    }
+    
+    /**
+     * @param position
+     * @return the default container creation command for an HTML form tag
+     */
+    protected ContainerCreationCommand getHtmlFormCommand(final IDOMPosition position)
+    {
+        return new TagContainerCreationCommand(position, IHTMLConstants.TAG_IDENTIFIER_HTML_FORM, _creationData.getTagId());
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ITagCreationAdvisor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ITagCreationAdvisor.java
new file mode 100644
index 0000000..92ff5c1
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ITagCreationAdvisor.java
@@ -0,0 +1,38 @@
+package org.eclipse.jst.pagedesigner.itemcreation;
+
+import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.w3c.dom.Element;
+
+/**
+ * An advisor object that allows customization of tag creation in an ITagCreator
+ * 
+ * Clients should *not* implement this interface.  Extend AbstractTagCreationAdvisor
+ * or DefaultTagCreationAdvisor instead.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ * @author cbateman
+ *
+ */
+public interface ITagCreationAdvisor
+{
+    /**
+     * @param model
+     * @param domPosition
+     * @return a new IDOMPosition adjust for required containers or domPosition
+     * if no adjust is required.  ???May return null???
+     */
+    IDOMPosition checkAndApplyNecessaryContainers(IDOMModel model,
+            IDOMPosition domPosition);
+
+    /**
+     * Apply customization to tagElement.  May use to modify
+     * attributes and child elements of the tag.
+     * 
+     * @param model
+     * @param tagElement
+     * @param tagToolItem
+     */
+    void applyCustomization(IDOMModel model, Element tagElement);
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ITagCreator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ITagCreator.java
index 7da0f81..c8d56e0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ITagCreator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ITagCreator.java
@@ -10,21 +10,19 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.itemcreation;
 
-import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
-import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 import org.w3c.dom.Element;
 
 /**
- * Interface to be implemented by tag creator factories
- * currently NOT to be implemented by clients 
+ * The interface type of all tag creators.
+ * 
+ * Clients should *not* implement this interface.  Extend AbstractTagCreator instead.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
  */
 public interface ITagCreator {
 	/**
-	 * @param tagToolPaletteEntry
-	 * @param model
-	 * @param domPosition
+	 * @param creationData 
 	 * @return W3C Element for the  tag at the correct position in the DOM.   May be null if creation cannot occur.
 	 */
-	public Element createTag(TagToolPaletteEntry tagToolPaletteEntry, IDOMModel model, IDOMPosition domPosition);
+	public Element createTag(final CreationData creationData);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationEditPolicy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationEditPolicy.java
index d61e1af..96929a0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationEditPolicy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationEditPolicy.java
@@ -56,7 +56,7 @@
 			return new CreateItemCommand(
 					PDPlugin
 							.getResourceString("ItemCreationEditPolicy.CommandLabel.CreateItem"),//$NON-NLS-1$
-					getViewer(getHost()), domposition, r.getTagToolPaletteEntry());
+					getViewer(getHost()).getModel(), domposition, r.getTagToolPaletteEntry());
 		}
 		return null;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationRequest.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationRequest.java
index b4b89fe..27715c6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationRequest.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationRequest.java
@@ -18,6 +18,7 @@
 
 /**
  * Tag tool item creation request class
+ * 
  * @author mengbo
  */
 public class ItemCreationRequest extends Request implements DropRequest {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationTool.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationTool.java
index 33ee60a..4e3c9c1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationTool.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/ItemCreationTool.java
@@ -11,11 +11,19 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.itemcreation;
 
-import org.eclipse.gef.EditPart;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.gef.Request;
 import org.eclipse.gef.SharedCursors;
+import org.eclipse.gef.commands.Command;
 import org.eclipse.gef.tools.TargetingTool;
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.jsf.core.internal.tld.TagIdentifierFactory;
+import org.eclipse.jst.pagedesigner.commands.CreateItemCommand;
 import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry;
+import org.eclipse.jst.pagedesigner.elementedit.ElementEditFactoryRegistry;
+import org.eclipse.jst.pagedesigner.elementedit.IElementEdit;
+import org.eclipse.jst.pagedesigner.itemcreation.customizer.IDropCustomizer;
 import org.eclipse.swt.graphics.Cursor;
 
 /**
@@ -106,7 +114,7 @@
 	 * button in a right-handed world). If any other button is pressed, the tool
 	 * goes into an invalid state. Otherwise, it goes into the drag state,
 	 * updates the request's location and calls
-	 * {@link TargetingTool#lockTargetEditPart(EditPart)}with the edit part
+	 * {@link TargetingTool#lockTargetEditPart(org.eclipse.gef.EditPart)}with the edit part
 	 * that was just clicked on.
 	 * 
 	 * @see org.eclipse.gef.tools.AbstractTool#handleButtonDown(int)
@@ -136,13 +144,17 @@
 	 * 
 	 * @see org.eclipse.gef.tools.AbstractTool#handleButtonUp(int)
 	 */
-	protected boolean handleButtonUp(int button) {
-		if (stateTransition(STATE_DRAG | STATE_DRAG_IN_PROGRESS, STATE_TERMINAL)) {
+	protected boolean handleButtonUp(int button) 
+	{
+		if (stateTransition(STATE_DRAG | STATE_DRAG_IN_PROGRESS, STATE_TERMINAL)) 
+		{
 			eraseTargetFeedback();
 			unlockTargetEditPart();
-			performCreation(button);
+			
+			// customizer may cancel the drop
+			customizeDropAndMaybeExecute(button);
 		}
-
+		
 		setState(STATE_TERMINAL);
 		handleFinished();
 
@@ -150,6 +162,51 @@
 	}
 
 	/**
+	 * @param button
+	 */
+	protected void customizeDropAndMaybeExecute(final int button)
+	{
+        Command command = getCurrentCommand();
+        
+        int status = IStatus.OK;
+        if (command instanceof CreateItemCommand)
+        {
+            status = performCustomization((CreateItemCommand)command);
+        }
+        
+        if (status == IStatus.OK)
+        {
+            performCreation(button);
+        }
+	}
+
+	private int performCustomization(CreateItemCommand command)
+	{
+	    IStatus status = Status.OK_STATUS;
+	    TagIdentifier tagId = 
+	        TagIdentifierFactory.createJSPTagWrapper
+	            (_tagPaletteItem.getURI(), _tagPaletteItem.getTagName());
+	    
+	    IElementEdit elementEdit = ElementEditFactoryRegistry.getInstance().createElementEdit(tagId);
+
+	    if (elementEdit != null)
+	    {
+	        IDropCustomizer customizer = elementEdit.getDropCustomizer(tagId);
+    	    
+    	    if (customizer != null)
+    	    {
+        	    status = customizer.runCustomizer();
+        	    
+        	    if (status.getSeverity() == IStatus.OK)
+        	    {
+        	        command.setCustomizationData(customizer.getDropCustomizationData());
+        	    }
+    	    }
+	    }
+	    return status.getSeverity();
+	}
+
+	/**
 	 * Updates the request, sets the current command, and asks to show feedback.
 	 * 
 	 * @see org.eclipse.gef.tools.AbstractTool#handleDragInProgress()
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/TagCreationFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/TagCreationFactory.java
deleted file mode 100644
index e95ba55..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/TagCreationFactory.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2007 Oracle Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Oracle Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.itemcreation;
-
-import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
-import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
-import org.eclipse.jst.pagedesigner.editors.palette.DesignerPaletteRoot;
-import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry;
-import org.eclipse.jst.pagedesigner.itemcreation.internal.DefaultTagCreator;
-
-/**
- * Creates instances of {@link ITagCreator}s for a the given {@link TagToolPaletteEntry}
- * (Eventually) Will use TagCreavtorFactories registered using org.eclipse.jst.jsf.pagedesigner.tagcreationfactories ext-pt.  
- * Currently only using DefaultTagCreator.
- */
-public class TagCreationFactory {
-	private static TagCreationFactory INSTANCE = null;
-	
-	/**
-	 * @return singleton instance
-	 */
-	public static TagCreationFactory getInstance(){
-		if (INSTANCE == null){
-			INSTANCE = new TagCreationFactory();
-		}
-		return INSTANCE;
-	}
-
-	/**
-	 * Using the TagToolPaletteEntry, locate the factory to use for tag creation
-	 * 
-	 * @param tagToolPaletteEntry
-	 * @return ITagCreator
-	 */
-	public ITagCreator createTagCreator(TagToolPaletteEntry tagToolPaletteEntry) {
-		tagToolPaletteEntry.getURI();
-
-		//eventually we will look for additional TagCreatorFactories from ext-pt..
-		//for now return default metadata-enabled factory
-		
-		DesignerPaletteRoot root = (DesignerPaletteRoot)  tagToolPaletteEntry.getParent().getParent();
-		ITaglibDomainMetaDataModelContext modelContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(root.getPaletteManager().getProject(),  tagToolPaletteEntry.getURI());
-		
-		return new DefaultTagCreator(modelContext);	
-
-	}
-
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/ContainerCreationCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/ContainerCreationCommand.java
new file mode 100644
index 0000000..bf2f60d
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/ContainerCreationCommand.java
@@ -0,0 +1,134 @@
+package org.eclipse.jst.pagedesigner.itemcreation.command;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
+import org.eclipse.jst.pagedesigner.itemcreation.internal.AbstractCreationCommand;
+
+/**
+ * Command for creating containers.
+ * 
+ *  * <p><b>Provisional API - subject to change</b></p>
+ *  
+ *  Clients may sub-class, but is preferable to use {@link SingletonContainerCreationCommand}
+ *  or {@link TagContainerCreationCommand} instead.
+ *  
+ * @author cbateman
+ *
+ */
+public abstract class ContainerCreationCommand extends AbstractCreationCommand 
+{
+    private final IDOMPosition          _originalDomPosition;
+    private final TagIdentifier         _containerTag;
+    private final TagIdentifier         _tagBeingCreated;
+    private IDOMPosition                _domPosition;
+    private ContainerCreationCommand    _nextCommand = null;
+    
+    /**
+     * @param domPosition
+     * @param containerTag
+     */
+    /*package*/ ContainerCreationCommand(IDOMPosition domPosition, TagIdentifier containerTag, TagIdentifier tagBeingCreated)
+    {
+        _domPosition = domPosition;
+        _originalDomPosition = domPosition;
+        _containerTag = containerTag;
+        _tagBeingCreated = tagBeingCreated;
+    }
+    
+    @Override
+    public final void execute() 
+    {
+        _domPosition = doExecute();
+        
+        if (_nextCommand != null)
+        {
+            _nextCommand.setDomPosition(_domPosition);
+            _nextCommand.execute();
+            // update the dom position
+            _domPosition = _nextCommand.getDomPosition();
+        }
+    }
+
+    @Override
+    public final Collection<IDOMPosition> getResult() 
+    {
+        return Collections.singletonList(_domPosition);
+    }
+
+    /**
+     * @return the new dom position after the container insert
+     */
+    protected abstract IDOMPosition doExecute();
+
+    @Override
+    public final ContainerCreationCommand chain(Command command) 
+    {
+        if (!(command instanceof ContainerCreationCommand))
+        {
+            throw new IllegalArgumentException("Can only chain ContainerCreationCommand's");
+        }
+        
+        if (_nextCommand == null)
+        {
+            _nextCommand = (ContainerCreationCommand) command;
+        }
+        else
+        {
+            _nextCommand.chain(command);
+        }
+        
+        return this;
+    }
+
+    /**
+     * Update the domPosition
+     * 
+     * @param domPosition
+     */
+    public final void setDomPosition(final IDOMPosition domPosition)
+    {
+        if (_domPosition.getContainerNode().getOwnerDocument() == 
+                domPosition.getContainerNode().getOwnerDocument())
+        {
+            _domPosition = domPosition;
+        }
+        else
+        {
+            // if not in same document, then error
+            throw new IllegalArgumentException("New domPosition must be in same document as old domPosition");
+        }
+    }
+
+    /**
+     * @return the dom position
+     */
+    protected final IDOMPosition getDomPosition() {
+        return _domPosition;
+    }
+
+    /**
+     * @return the original dom position that this container creation command
+     * was created with.
+     */
+    protected final IDOMPosition getOriginalDomPosition() {
+        return _originalDomPosition;
+    }
+
+    /**
+     * @return the container tag to be created
+     */
+    protected final TagIdentifier getContainerTag() {
+        return _containerTag;
+    }
+
+    /**
+     * @return the tag that is being created for which we are adding the container
+     */
+    protected final TagIdentifier getTagBeingCreated() {
+        return _tagBeingCreated;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/ElementCustomizationCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/ElementCustomizationCommand.java
new file mode 100644
index 0000000..c6acf4a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/ElementCustomizationCommand.java
@@ -0,0 +1,163 @@
+package org.eclipse.jst.pagedesigner.itemcreation.command;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.jst.jsf.core.internal.tld.CMUtil;
+import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteElementTemplateHelper;
+import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.TagCreationAttribute;
+import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.TagCreationInfo;
+import org.eclipse.jst.pagedesigner.itemcreation.CreationData;
+import org.eclipse.jst.pagedesigner.itemcreation.internal.AbstractCreationCommand;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.w3c.dom.Element;
+
+/**
+ * A command to customize a new tag element
+ * <p>
+ * <b>Provisional API - subject to change</b>
+ * </p>
+ * 
+ * Clients may sub-class.
+ * 
+ * @author cbateman
+ * 
+ */
+public class ElementCustomizationCommand extends AbstractCreationCommand
+{
+    /**
+     * the dom model where the element will be added
+     */
+    protected final IDOMModel _model;
+    /**
+     * the element to be customized
+     */
+    protected final Element _element;
+    /**
+     * the creation data for the new tag
+     */
+    protected final CreationData _creationData;
+
+    /**
+     * @param model
+     * @param element
+     * @param creationData
+     */
+    public ElementCustomizationCommand(final IDOMModel model,
+            final Element element, final CreationData creationData)
+    {
+        _model = model;
+        _element = element;
+        _creationData = creationData;
+    }
+
+    @Override
+    public void execute()
+    {
+        applyChildElementCustomization();
+        applyAttributeCustomization();
+    }
+
+    @Override
+    protected boolean prepare()
+    {
+        // do nothing by default; return true to indicate can execute
+        return true;
+    }
+
+    /**
+     * Override to customize the children of the tag being created
+     * 
+     * Default implementation uses meta-data to load a template. This is the
+     * prefered method for static child values (i.e. those that are not
+     * calculated dynamically at runtime).
+     */
+    protected void applyChildElementCustomization()
+    {
+        final TagCreationInfo tagCreationInfo = _creationData.getTagCreationInfo();
+        if (tagCreationInfo != null)
+        {
+            PaletteElementTemplateHelper.applyTemplate(_model, _element,
+                    _creationData.getTagEntry(), tagCreationInfo);
+        }
+    }
+
+    /**
+     * Add required attributes and default values, if set, to the created tag
+     * element
+     * 
+     * To customize the attributes that get added, use TagCreationInfo metadata
+     * 
+     * This method is provided as a utility for clients. It is not used by
+     * default
+     * 
+     * @param element
+     * @param creationData
+     */
+    protected final void ensureRequiredAttrs(final Element element,
+            final CreationData creationData)
+    {
+        final CMElementDeclaration ed = CMUtil.getTLDElementDeclaration(creationData
+                .getUri(), creationData.getTagName(), creationData.getModel()
+                .getDocument().getStructuredDocument());
+
+        if (ed != null)
+        {
+            for (final Iterator it = ed.getAttributes().iterator(); it.hasNext();)
+            {
+                final CMAttributeDeclaration attr = (CMAttributeDeclaration) it
+                        .next();
+                if (attr.getUsage() == CMAttributeDeclaration.REQUIRED
+                        && element.getAttribute(attr.getAttrName()) == null)
+                {
+                    element.setAttribute(attr.getAttrName(), attr
+                            .getDefaultValue());
+                }
+            }
+        }
+    }
+
+    /**
+     * Override to customize the attributes of the tag being created
+     * 
+     * Default implementation uses meta-data to set the attribut values. This is
+     * the prefered method for static attribute values (i.e. those that are not
+     * calculated dynamically at runtime).
+     * 
+     */
+    protected void applyAttributeCustomization()
+    {
+        final TagCreationInfo info = _creationData.getTagCreationInfo();
+        if (info != null)
+        {
+            final EList list = info.getAttributes();
+            if (list != null)
+            {
+                for (final Iterator it = list.iterator(); it.hasNext();)
+                {
+                    final TagCreationAttribute attr = (TagCreationAttribute) it
+                            .next();
+                    _element.setAttribute(attr.getId(),
+                            (attr.getValue() == null ? "" : attr.getValue()));
+                }
+            }
+        }
+    }
+
+    @Override
+    public final Command chain(final Command command)
+    {
+        return super.chain(command);
+    }
+
+    @Override
+    public final Collection<Element> getResult()
+    {
+        return Collections.singletonList(_element);
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/SingletonContainerCreationCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/SingletonContainerCreationCommand.java
new file mode 100644
index 0000000..edaee8d
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/SingletonContainerCreationCommand.java
@@ -0,0 +1,84 @@
+package org.eclipse.jst.pagedesigner.itemcreation.command;
+
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.pagedesigner.dom.EditModelQuery;
+import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
+import org.eclipse.jst.pagedesigner.utils.BodyHelper;
+import org.eclipse.jst.pagedesigner.validation.caret.JSFRootContainerPositionRule;
+import org.w3c.dom.Document;
+
+/**
+ * Used to create a container that should only occur once per document. Typically
+ * used for HTML body and JSF f:view tags.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ * Clients may reference but not sub-class.
+ * @author cbateman
+ *
+ */
+public final class SingletonContainerCreationCommand extends ContainerCreationCommand 
+{
+    private static final int  MAX_DEPTH_TO_SEARCH_FOR_CONTAINER = 10;
+
+    /**
+     * @param domPosition
+     * @param containerTag
+     * @param tagBeingCreated 
+     */
+    public SingletonContainerCreationCommand(IDOMPosition domPosition,
+            TagIdentifier containerTag, TagIdentifier tagBeingCreated) 
+    {
+        super(domPosition, containerTag, tagBeingCreated);
+    }
+
+    @Override
+    protected IDOMPosition doExecute() 
+    {
+       return insertSingletonIfNotPresent();
+    }
+    
+    private IDOMPosition insertSingletonIfNotPresent()
+    {
+        IDOMPosition domPosition = getDomPosition();
+        final TagIdentifier containerTag = getContainerTag();
+        final TagIdentifier tagBeingCreated = getTagBeingCreated();
+        
+        final Document document = EditModelQuery.getDocumentNode(domPosition
+                .getContainerNode());
+        
+        final boolean isContainerAlreadyPresent =
+            JSFRootContainerPositionRule.hasBasicContainers
+                (document, MAX_DEPTH_TO_SEARCH_FOR_CONTAINER);
+
+        if (isContainerAlreadyPresent) 
+        {
+            // if the container and element to be created are the same,
+            // then return null indicating to abort
+            if (containerTag.equals(tagBeingCreated))
+            {
+                domPosition =  null;
+            }
+            // otherwise, simply fall through keeping domPosition unchanged
+        }
+        // if the container isn't already present
+        else
+        {
+            
+            if (!containerTag.equals(tagBeingCreated)) 
+            {
+            // if the container is different and doesn't exist, then add it.
+                domPosition = BodyHelper.insertBody(domPosition, containerTag.asQName(), "f");
+            }
+            // otherwise, fall through leaving domPosition unchanged
+        }
+
+        return domPosition;
+    }
+
+    @Override
+    protected boolean prepare()
+    {
+        throw new UnsupportedOperationException("don't use");
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/TagContainerCreationCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/TagContainerCreationCommand.java
new file mode 100644
index 0000000..162f97f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/command/TagContainerCreationCommand.java
@@ -0,0 +1,62 @@
+package org.eclipse.jst.pagedesigner.itemcreation.command;
+
+import javax.xml.namespace.QName;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
+import org.eclipse.jst.pagedesigner.dom.ValidatorSupport;
+
+/**
+ * @author cbateman
+ * 
+ *  * <p><b>Provisional API - subject to change</b></p>
+ *  
+ *  Clients may sub-class
+ *
+ */
+public class TagContainerCreationCommand extends ContainerCreationCommand {
+
+    /**
+     * @param domPosition
+     * @param containerTag
+     * @param tagBeingCreated
+     */
+    public TagContainerCreationCommand(IDOMPosition domPosition,
+            TagIdentifier containerTag, TagIdentifier tagBeingCreated) 
+    {
+        super(domPosition, containerTag, tagBeingCreated);
+    }
+
+    @Override
+    protected IDOMPosition doExecute() 
+    {
+        final IDOMPosition domPosition = getDomPosition();
+        final QName  containerQName = getContainerTag().asQName();
+        boolean hasform = ValidatorSupport.checkContainer(domPosition, containerQName);
+        IDOMPosition newPosition = domPosition;
+        if (!hasform) {
+            newPosition = ValidatorSupport
+                    .insertContainer(domPosition, containerQName, getContainerCustomizationData());
+            if (newPosition == null) {
+                newPosition = domPosition;
+            }
+        }
+        return newPosition;
+    }
+
+    /**
+     * Override to inject customization data into the tag creation
+     * @return a customization data for the container.
+     */
+    protected IAdaptable getContainerCustomizationData()
+    {
+        return null;
+    }
+    
+    @Override
+    protected final boolean prepare()
+    {
+        throw new UnsupportedOperationException("don't use");
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/customizer/AbstractDropCustomizer.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/customizer/AbstractDropCustomizer.java
new file mode 100644
index 0000000..a41bf5d
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/customizer/AbstractDropCustomizer.java
@@ -0,0 +1,32 @@
+package org.eclipse.jst.pagedesigner.itemcreation.customizer;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+
+/**
+ * Clients should extend to implement their own IDropCustomizer.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class AbstractDropCustomizer implements IDropCustomizer 
+{
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.pagedesigner.itemcreation.customizer.IDropCustomizer#getDropCustomizationData()
+     */
+    public IAdaptable getDropCustomizationData() 
+    {
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.pagedesigner.itemcreation.customizer.IDropCustomizer#runCustomizer()
+     */
+    public IStatus runCustomizer() 
+    {
+        return Status.OK_STATUS;
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/customizer/IDropCustomizer.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/customizer/IDropCustomizer.java
new file mode 100644
index 0000000..2f93062
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/customizer/IDropCustomizer.java
@@ -0,0 +1,43 @@
+package org.eclipse.jst.pagedesigner.itemcreation.customizer;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IStatus;
+
+/**
+ * Interface used to declare an object that customizes tag creation data prior
+ * to a drop.  The drop customizer should be used to illicit data on per-drop basis.
+ * 
+ * Clients should not implement this interface.  Extend AbstractDropCustomizer instead.
+ * 
+ * <p><b>Provisional API - subject to change</b></p>
+ * @author cbateman
+ *
+ */
+public interface IDropCustomizer 
+{
+    /**
+     * Executed when the user performs a drop gesture for a tag, but before the
+     * command is dispatched to create the tag in the target document.  Implementers
+     * may do calculations or raise customization UI.  There return value is used
+     * to decide whether to continue.  Values other than OK and CANCEL are currently
+     * ignored.  If the return value has a severity of CANCEL, then the drop will
+     * be aborted.  If the return severity is OK, then getDropCustomizationData will
+     * be called and it's value will be passed to the ITagCreator framework through
+     * the CreationData object.
+     * 
+     * NOTE: This method may be called on the UI thread, although this is not guaranteed.
+     * Implementer should ensure that anything that is long-running (such as a dialog)
+     * is user-cancellable and that any UI code is run on the display thread.
+     * 
+     * @return the status condition of the customizer
+     */
+    public IStatus runCustomizer();
+
+    /**
+     * @return the customization data.  This method will only be called after runCustomizer
+     * and only if runCustomizer returns IStatus.OK in its severity.  The adaptable will
+     * be passed to the ITagCreator framework through the CreationData value object.  You
+     * may return null even if runCustomizer() returns OK.
+     */
+    public IAdaptable getDropCustomizationData();
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/AbstractCreationCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/AbstractCreationCommand.java
new file mode 100644
index 0000000..d088496
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/AbstractCreationCommand.java
@@ -0,0 +1,97 @@
+package org.eclipse.jst.pagedesigner.itemcreation.internal;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.eclipse.emf.common.command.AbstractCommand;
+import org.eclipse.emf.common.command.Command;
+
+/**
+ * Internal super-class of all tag creation commands.
+ * 
+ * @author cbateman
+ *
+ */
+public abstract class AbstractCreationCommand extends AbstractCommand implements
+        ICreationCommand 
+{
+    public abstract void execute(); 
+
+    public final void redo() 
+    {
+        throw new UnsupportedOperationException("don't use");
+    }
+
+    @Override
+    public final boolean canExecute() 
+    {
+        return super.canExecute();
+    }
+
+    @Override
+    public final boolean canUndo() {
+        return super.canUndo();
+    }
+
+    @Override
+    public Command chain(Command command) {
+        if (command instanceof ICreationCommand)
+        {
+            return super.chain(command);
+        }
+        throw new IllegalArgumentException("command must an ICreationCommand");
+    }
+
+    @Override
+    public final void dispose() 
+    {
+        throw new UnsupportedOperationException("don't use");
+    }
+
+    @Override
+    public final Collection<?> getAffectedObjects() {
+        return super.getAffectedObjects();
+    }
+
+    @Override
+    public final String getDescription() 
+    {
+        return super.getDescription();
+    }
+
+    @Override
+    public final String getLabel() 
+    {
+        return super.getLabel();
+    }
+
+    @Override
+    public Collection<?> getResult() 
+    {
+        return Collections.EMPTY_LIST;
+    }
+
+    @Override
+    protected abstract boolean prepare(); 
+
+    @Override
+    public final void setDescription(String description) 
+    {
+        super.setDescription(description);
+    }
+
+    @Override
+    public final void setLabel(String label) 
+    {
+        super.setLabel(label);
+    }
+
+    @Override
+    public final void undo() 
+    {
+        // for now, there is no undo
+        super.undo();
+    }
+
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/DefaultTagCreator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/DefaultTagCreator.java
index 22d0021..a5bfea3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/DefaultTagCreator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/DefaultTagCreator.java
@@ -10,365 +10,22 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.itemcreation.internal;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.xml.namespace.QName;
-
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.jst.jsf.common.metadata.Entity;
-import org.eclipse.jst.jsf.common.metadata.MetadataFactory;
-import org.eclipse.jst.jsf.common.metadata.Model;
-import org.eclipse.jst.jsf.common.metadata.Trait;
-import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper;
-import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
-import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
-import org.eclipse.jst.jsf.core.internal.tld.ITLDConstants;
-import org.eclipse.jst.pagedesigner.IHTMLConstants;
-import org.eclipse.jst.pagedesigner.dom.DOMPositionHelper;
-import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
-import org.eclipse.jst.pagedesigner.dom.JSFValidatorSupport;
-import org.eclipse.jst.pagedesigner.dom.ValidatorSupport;
-import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry;
-import org.eclipse.jst.pagedesigner.editors.palette.impl.PaletteElementTemplateHelper;
-import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.PaletteInfo;
-import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.PaletteInfos;
-import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.PaletteInfosFactory;
-import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.TagCreationAttribute;
-import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.TagCreationInfo;
-import org.eclipse.jst.pagedesigner.itemcreation.ITagCreator;
-import org.eclipse.jst.pagedesigner.utils.BodyHelper;
-import org.eclipse.jst.pagedesigner.utils.JSPUtil;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration;
-import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
-import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocType;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
-import org.w3c.dom.Element;
+import org.eclipse.jst.pagedesigner.itemcreation.AbstractTagCreator;
+import org.eclipse.jst.pagedesigner.itemcreation.CreationData;
+import org.eclipse.jst.pagedesigner.itemcreation.ITagCreationAdvisor;
 
 /**
- * {@link ITagCreator} used by the Web Page Editor palette. 
+ * {@link org.eclipse.jst.pagedesigner.itemcreation.ITagCreator} used by the Web Page Editor palette. 
  * 
  * Uses org.eclipse.jst.jsf.common.metadata 
  */
-public class DefaultTagCreator implements ITagCreator {
-	
-	private static final QName _qnameHTMLForm = new QName(CMDocType.HTML_DOC_TYPE, IHTMLConstants.TAG_FORM);
-	
-	/**
-	 * The {@link TagToolPaletteEntry} being used
-	 */
-	protected TagToolPaletteEntry _tagItem;
-	/**
-	 * The {@link ITaglibDomainMetaDataModelContext} for the tag creation
-	 */
-	protected ITaglibDomainMetaDataModelContext _modelContext;
-	/**
-	 * The tag {@link Entity} being created
-	 */
-	private Entity _tagEntity;
-	
-	/**
-	 * Construct a tag creator for the _modelContext
-	 * @param modelContext
-	 */
-	public DefaultTagCreator(ITaglibDomainMetaDataModelContext modelContext) {
-		this._modelContext = modelContext;
-	}
+public class DefaultTagCreator extends AbstractTagCreator 
+{
 
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.pagedesigner.itemcreation.ITagCreator#createTag(org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry, org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel, org.eclipse.jst.pagedesigner.dom.IDOMPosition)
-	 */
-	public Element createTag(TagToolPaletteEntry tagToolPaletteEntry, IDOMModel model, IDOMPosition domPosition) {
-		this._tagItem = tagToolPaletteEntry;
-	
-		IDOMPosition position = preAdjustPositionForNecessaryContainers(model, domPosition);
-		if (position == null)//throw exception?
-			return null;
-
-		String uri = getURI();
-		String defaultPrefix = getDefaultPrefix();		
-		String prefix = getPrefix(uri, model, defaultPrefix);
-		
-		Element ele =  createElement(model, prefix);
-		if (ele == null)//throw exception?
-			return null;
-		
-		applyTemplate(model, ele);
-		applyRequiredAttrs(ele);
-		
-		addTagToContainer(position, ele);
-		
-		return ele;
-	}
-
-	/**
-	 * @param model
-	 * @param prefix
-	 * @return {@link Element}
-	 */
-	protected Element createElement(IDOMModel model, String prefix){
-		Element ele =  model.getDocument().createElement(_tagItem.getTagName());
-		if (ele == null)
-			return null;
-		
-		//ugly... fix me
-		
-		// XXX: we are using "startsWith("directive.")" to test whether
-		// should setJSPTag, this
-		// maybe is not the best way. Need check whether SSE have special
-		// API for it.
-		if (ITLDConstants.URI_JSP.equals(getURI())
-				&& (ele.getLocalName().startsWith("directive.")
-						|| "declaration".equals(ele.getLocalName())
-						|| "expression".equals(ele.getLocalName()) || "scriptlet"
-						.equals(ele.getLocalName()))) {
-			// it is a jsp tag
-			((IDOMElement) ele).setJSPTag(true);
-		}
-		if (prefix != null)
-			ele.setPrefix(prefix);
-		return ele;
-	}
-	/**
-	 * @param position
-	 * @param tagElement
-	 */
-	protected void addTagToContainer(IDOMPosition position, Element tagElement) {
-		if (position == null || position.getContainerNode() == null) {
-			return;
-		}
-		
-		if (position.getNextSiblingNode() == null) {
-			position.getContainerNode().appendChild(tagElement);
-		} else {
-			position.getContainerNode().insertBefore(tagElement,
-					position.getNextSiblingNode());
-		}
-		
-	}
-
-	/**
-	 * Return position for tag after all necessary containers are created.  
-	 * If nnecessary containers cannot be created and do not exist for any reason, implementer should return null
-	 * to signal that the tag creation should not occur.
-	 * @param model
-	 * @param domPosition
-	 * @return position after necessary containers are created
-	 */
-	protected IDOMPosition preAdjustPositionForNecessaryContainers(IDOMModel model,
-			IDOMPosition domPosition) {
-				
-		IDOMPosition position = DOMPositionHelper.splitText(domPosition);
-
-		position = BodyHelper
-				.adjustInsertPosition(getURI(), getLocalTagName(), position);
-		
-		position = createContainers(position);
-		if (position == null) {
-			// user cancelled
-			return null;
-		}
-		
-		// because the next call of getPrefix() may insert new taglib node
-		// into the document, if we use the normal
-		// DOMPositin which use index, maybe it will be invalidated by the
-		// new taglib node. So use RefPosition here.
-		return DOMPositionHelper.toDOMRefPosition(position);
-	}
-
-	/**
-	 * @param position
-	 * @return position after creating required containers
-	 */
-	protected IDOMPosition createContainers(IDOMPosition position) {
-		
-		//FIX ME - should be done in subclass
-		if (isJSFComponent()) {
-			return JSFValidatorSupport.prepareInsertJSFComponent(position, getURI(), getLocalTagName(), isHTMLFormRequired());
-		}
-		else if (isHTMLFormRequired()){
-			boolean hasform = ValidatorSupport.checkContainer(position, _qnameHTMLForm);
-			IDOMPosition newPosition = position;
-			if (!hasform) {
-				newPosition = ValidatorSupport
-						.insertContainer(position, _qnameHTMLForm);
-				if (newPosition == null) {
-					newPosition = position;
-				}
-			}
-			return newPosition;
-		}
-        return position;
-	}
-
-	private boolean isJSFComponent() {		
-		Model model = TaglibDomainMetaDataQueryHelper.getModel(_modelContext);
-		Trait t = TaglibDomainMetaDataQueryHelper.getTrait(model, "is-jsf-component-library");
-		if (t != null)
-			return TraitValueHelper.getValueAsBoolean(t);
-		
-		return false;
-	}
-
-	/**
-	 * @return convenience method returning default prefix to be used by the tag item
-	 */
-	private  String getDefaultPrefix() {
-		return _tagItem.getDefaultPrefix();
-	}
-
-	/**
-	 * @return convenience method returning uri of the tag item's library
-	 */
-	private String getURI() {		
-		return _tagItem.getURI();
-	}
-	
-	/**
-	 * @return convenience method returning the tag name without prefix
-	 * 
-	 */
-	private String getLocalTagName(){
-		return _tagItem.getTagName();
-	}
-	/**
-	 * Add required attributes and default values, if set, to the created tag element
-	 * @param element
-	 */
-	protected void applyRequiredAttrs(Element element) {
-		TagCreationInfo info = getTagCreationInfo();
-		if (info != null){
-			EList list = info.getAttributes();
-			if (list != null) {
-				for (Iterator it = list.iterator(); it.hasNext();) {
-					TagCreationAttribute attr = (TagCreationAttribute)it.next();
-					element.setAttribute(attr.getId(), (attr.getValue() == null ? "" : attr.getValue()));
-				}
-			}
-		}			
-	}
-
-	/**
-	 * If TagCreationInfo is defined for the tag element, apply the template if defined
-	 * @param model
-	 * @param tagElement
-	 */
-	protected void applyTemplate(IDOMModel model, Element tagElement) {
-		TagCreationInfo tagCreationInfo = getTagCreationInfo();
-		if (tagCreationInfo != null)
-			PaletteElementTemplateHelper.applyTemplate(model, tagElement, getTagToolItem(), tagCreationInfo); 		
-	}
-
-	/**
-	 * @return {@link TagCreationInfo} for the tag entity
-	 */
-	protected TagCreationInfo getTagCreationInfo(){
-		Model model = TaglibDomainMetaDataQueryHelper.getModel(_modelContext);
-		if (model != null){
-			Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(model, PaletteInfos.TRAIT_ID);
-			if (trait != null){
-				PaletteInfos pis = (PaletteInfos)trait.getValue();
-				PaletteInfo pi = pis.findPaletteInfoById(_tagItem.getId());
-				if (pi != null){
-					return pi.getTagCreation();					
-				}
-			}
-			//tag-creation trait on entity directly?
-			Entity tag = getTagEntity();
-			if (tag != null){//metadata exists
-				trait = TaglibDomainMetaDataQueryHelper.getTrait(tag, "tag-create");
-				if (trait != null && trait.getValue() != null){
-					return (TagCreationInfo)trait.getValue();					
-				}
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * @return the {@link TagToolPaletteEntry}
-	 */
-	protected TagToolPaletteEntry getTagToolItem(){
-		return _tagItem;
-	}
-	
-	
-	/**
-	 * Returns the ns prefix for the tag and also creates taglib reference if necessary
-	 * @param uri
-	 * @param model
-	 * @param suggested
-	 * @return prefix to use
-	 */
-	protected String getPrefix(String uri, IDOMModel model,
-			String suggested) {
-		if (ITLDConstants.URI_HTML.equalsIgnoreCase(uri)
-				|| ITLDConstants.URI_JSP.equalsIgnoreCase(uri)
-				|| CMDocType.JSP11_DOC_TYPE.equalsIgnoreCase(uri)) {
-			return null;
-		}
-
-		// now handles custom tag lib
-		return JSPUtil.getOrCreatePrefix(model, uri, suggested);
-	}
-	
-	/**
-	 * @param tag
-	 * @return a "create-tag" {@link Trait} for the tag.  May be null there are no required attrs.
-	 */
-	protected Trait createRequiredAttrTraits(CMElementDeclaration tag) {
-
-		List reqs = new ArrayList();
-		for (Iterator it=tag.getAttributes().iterator();it.hasNext();){
-			CMAttributeDeclaration attr = (CMAttributeDeclaration)it.next();
-			if (attr.getUsage() == CMAttributeDeclaration.REQUIRED){
-				reqs.add(attr);
-			}			
-		}
-		if (reqs.size() > 0)
-			return internalCreateTagCreateAttributes(reqs);
-		
-		return null;
-	}		
-	
-	private Trait internalCreateTagCreateAttributes(List reqs) {
-		Trait t = MetadataFactory.eINSTANCE.createTrait();
-		t.setId("create-trait");
-		
-		TagCreationInfo info = PaletteInfosFactory.eINSTANCE.createTagCreationInfo();
-		for (Iterator it=reqs.iterator();it.hasNext();){
-			TagCreationAttribute attrInfo = PaletteInfosFactory.eINSTANCE.createTagCreationAttribute();
-			CMAttributeDeclaration attr = (CMAttributeDeclaration)it.next();
-			attrInfo.setId(attr.getAttrName());
-			attrInfo.setValue("");//TODO: use default value?
-			info.getAttributes().add(attrInfo);
-		}
-		t.setValue(info); 
-		return t;
-	}
-	
-	/**
-	 * @return flag indicating that html form container ancestor is required
-	 */
-	protected boolean isHTMLFormRequired() {
-		Trait t = TaglibDomainMetaDataQueryHelper.getTrait(getTagEntity(), "requires-html-form");
-		if (t != null)
-			return TraitValueHelper.getValueAsBoolean(t);
-		
-		return false;
-	}
-
-	/**
-	 * @return the {@link Entity} for this tag element being created
-	 */
-	protected Entity getTagEntity() {
-		if (_tagEntity == null){
-			_tagEntity = TaglibDomainMetaDataQueryHelper.getEntity(_modelContext, _tagItem.getTagName());
-			
-		}
-		return _tagEntity;
-	}
+    @Override
+    protected ITagCreationAdvisor doSelectCreationAdvisor(
+            CreationData creationData) {
+        // return null by default. This causes the default advisor to be used.
+        return null;
+    }
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/ICreationCommand.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/ICreationCommand.java
new file mode 100644
index 0000000..37be020
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/ICreationCommand.java
@@ -0,0 +1,17 @@
+package org.eclipse.jst.pagedesigner.itemcreation.internal;
+
+
+/**
+ * Implemented by commands that do tag model creation.  NOTE: this interface is highly provisional
+ * and mainly exists to provide a facade to the future use of an existing Command infrastructure:
+ * probably the EMF commands.  We haven't decided yet so it is important that:
+ * 
+ * This interface should NOT be implemented by clients
+ * 
+ * @author cbateman
+ *
+ */
+public interface ICreationCommand 
+{
+    // tagging interface only
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/TagCreationFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/TagCreationFactory.java
new file mode 100644
index 0000000..6304e85
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/TagCreationFactory.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.itemcreation.internal;
+
+import org.eclipse.jst.jsf.common.dom.TagIdentifier;
+import org.eclipse.jst.pagedesigner.PDPlugin;
+import org.eclipse.jst.pagedesigner.elementedit.ElementEditFactoryRegistry;
+import org.eclipse.jst.pagedesigner.elementedit.IElementEdit;
+import org.eclipse.jst.pagedesigner.itemcreation.AbstractTagCreator;
+import org.eclipse.jst.pagedesigner.itemcreation.ITagCreator;
+
+/**
+ * Creates instances of
+ * {@link org.eclipse.jst.pagedesigner.itemcreation.ITagCreator}s for a the
+ * given
+ * {@link org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry}
+ * (Eventually) Will use TagCreavtorFactories registered using
+ * org.eclipse.jst.jsf.pagedesigner.tagcreationfactories ext-pt. Currently only
+ * using DefaultTagCreator.
+ */
+public class TagCreationFactory
+{
+    private static TagCreationFactory INSTANCE = null;
+
+    /**
+     * @return singleton instance
+     */
+    public synchronized static TagCreationFactory getInstance()
+    {
+        if (INSTANCE == null)
+        {
+            INSTANCE = new TagCreationFactory();
+        }
+        return INSTANCE;
+    }
+
+    /**
+     * Using the TagToolPaletteEntry, locate the factory to use for tag creation
+     * 
+     * @param tagId
+     * 
+     * @return ITagCreator
+     */
+    public ITagCreator createTagCreator(final TagIdentifier tagId)
+    {
+
+        IElementEdit elementEdit = ElementEditFactoryRegistry.getInstance()
+                .createElementEdit(tagId);
+
+        if (elementEdit != null)
+        {
+            // for (ITagCreatorFactory factory : factories)
+            // {
+            ITagCreator tagCreator = null;
+            try
+            {
+                tagCreator = elementEdit.getTagCreator(tagId);
+            }
+            catch (Exception e)
+            {
+                PDPlugin.getLogger(getClass()).error(
+                        "Error.ProblemLoadingTagCreatorFactory",
+                        elementEdit.getClass().toString(), e);
+            }
+
+            if (tagCreator != null)
+            {
+                if (tagCreator instanceof AbstractTagCreator)
+                {
+                    return tagCreator;
+                }
+                // if non-null, skipped, log the issue
+                PDPlugin.getLogger(getClass()).error(
+                        "Error.ProblemLoadingTagCreatorFactory",
+                        "Tag creator must extend AbstractTagCreator",
+                        new Throwable());
+            }
+        }
+
+        // all else fails, use the internal default
+        return new DefaultTagCreator();
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/TagCreatorFactoryRegistryReader.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/TagCreatorFactoryRegistryReader.java
new file mode 100644
index 0000000..1dcde61
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/itemcreation/internal/TagCreatorFactoryRegistryReader.java
@@ -0,0 +1,193 @@
+package org.eclipse.jst.pagedesigner.itemcreation.internal;
+
+
+/**
+ * A registry reader that lazy initializes a list of uri-sensitive
+ * extensions
+ * 
+ * @author cbateman
+ *
+ */
+public final class TagCreatorFactoryRegistryReader 
+{
+    // TODO: move this logic into the ElementEditFacRegistryReader
+//    private static Map<String, List<ITagCreatorFactory>> _handlers = null;
+//
+//    /**
+//     * @param uri the uri to get a list of factories for
+//     * @return all available handers for the ext-pt
+//     */
+//    public static synchronized List<ITagCreatorFactory> getAllHandlers(final String uri) 
+//    {
+//        if (_handlers == null) {
+//            _handlers = readAllHandlers();
+//        }
+//        return _handlers.get(uri);
+//    }
+//
+//    private static Map<String, List<ITagCreatorFactory>> readAllHandlers() 
+//    {
+//        final Map<String, List<ExtElement>>  map = 
+//            new HashMap<String, List<ExtElement>>();
+//
+//        IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
+//                .getExtensionPoint(PDPlugin.getPluginId(),
+//                        IJMTConstants.TAG_CREATOR_FACTORY_EXT_NAME);
+//        IExtension[] extensions = extensionPoint.getExtensions();
+//
+//        for (int i = 0; i < extensions.length; i++) 
+//        {
+//            IExtension ext = extensions[i];
+//            IConfigurationElement[] tagCreationHandlers = ext
+//                    .getConfigurationElements();
+//
+//            for (int j = 0; j < tagCreationHandlers.length; j++) {
+//                if (tagCreationHandlers[j].getName().equals(
+//                        IJMTConstants.TAG_CREATOR_FACTORY_ELEMENT_NAME)) 
+//                {
+//                    try
+//                    {
+//                        final ExtElement extElement = 
+//                            new ExtElement(tagCreationHandlers[j]);
+//                        List<ExtElement> elements = 
+//                            map.get(extElement.getUri());
+//                        
+//                        if (elements == null)
+//                        {
+//                            elements = new ArrayList<ExtElement>();
+//                            map.put(extElement.getUri(), elements);
+//                        }
+//                        
+//                        elements.add(extElement);
+//                    }
+//                    catch (CoreException ce)
+//                    {
+//                        PDPlugin.getLogger(ExtElement.class)
+//                            .error("Error.ProblemLoadingExtensionPoint", ce);
+//                    }
+//                }
+//            }
+//        }
+//        
+//        final Map<String, List<ITagCreatorFactory>> handlers = 
+//            new HashMap<String, List<ITagCreatorFactory>>();
+//        
+//        // now loop through the extensions, looking for collisions
+//        // on the same uri
+//        for (String uri : map.keySet())
+//        {
+//            List<ExtElement>  elements = map.get(uri);
+//            
+//            if (elements.size() > 1)
+//            {
+//                Collections.sort(elements);
+//                
+//                MultiStatus chainedStatus = new MultiStatus(PDPlugin.getPluginId(), 0, "Collision detected in ITagCreatorFactory extensions for uri: "+uri+". Factories will be queried in the following order with the first contender to provide a ITagCreator winning",
+//                        new Throwable());
+//                
+//                for (ExtElement element : elements)
+//                {
+//                    IStatus status = 
+//                        new Status(IStatus.WARNING, PDPlugin.getPluginId(), element.getClassName());
+//                    chainedStatus.add(status);
+//                }
+//                
+//                PDPlugin.log(chainedStatus);
+//            }
+//            
+//            List<ITagCreatorFactory>  factories = 
+//                new ArrayList<ITagCreatorFactory>();
+//
+//            for (ExtElement element : elements)
+//            {
+//                factories.add(element.getFactoryInstance());
+//            }
+//            
+//            handlers.put(uri, factories);
+//        }
+//
+//        return handlers;
+//    }
+//
+//    private static class ExtElement implements Comparable<ExtElement>
+//    {
+//        private final IConfigurationElement  _element;
+//        
+//        private final ITagCreatorFactory  _factoryInstance;
+//        
+//        ExtElement(IConfigurationElement element) throws CoreException
+//        {
+//            _element = element;
+//            
+//            final String uri = getUri();
+//            final String factory = getClassName();
+//            
+//            if (uri == null || factory == null)
+//            {
+//                throw new CoreException(new Status(IStatus.ERROR,PDPlugin.getPluginId(), "uri and factory must not be null: uri="+uri+", factory="+factory));
+//            }
+//            
+//            Object obj = _element.createExecutableExtension("factory");
+//
+//            if (obj instanceof ITagCreatorFactory) 
+//            {
+//                _factoryInstance = (ITagCreatorFactory) obj;
+//            }
+//            else
+//            {
+//                throw new CoreException(new Status(IStatus.ERROR,PDPlugin.getPluginId(), "Factory must be instanceof ITagCreatorFactory"));
+//            }
+//        }
+//
+//        /**
+//         * @return the uri
+//         */
+//        public String getUri() {
+//            return _element.getAttribute("uri");
+//        }
+//
+//        /**
+//         * @return the class name
+//         */
+//        public String getClassName() {
+//            return _element.getAttribute("factory");
+//        }
+//
+//        /**
+//         * @return the factory instance or null
+//         */
+//        public ITagCreatorFactory getFactoryInstance() 
+//        {
+//            return _factoryInstance;
+//        }
+//
+//        /* 
+//         * Two elements compare by the canonical comparision of their
+//         * contributor's bundle name string
+//         */
+//        public int compareTo(ExtElement o)
+//        {
+//            return _element.getContributor().getName().compareTo
+//                (o._element.getContributor().getName());
+//        }
+//
+//        @Override
+//        public boolean equals(Object obj) 
+//        {
+//            // ensure that x.equals(y) iff x.compareTo(y) == 0
+//            if (obj instanceof ExtElement)
+//            {
+//                return compareTo((ExtElement) obj) == 0;
+//            }
+//            
+//            return false;
+//        }
+//
+//        @Override
+//        public int hashCode() 
+//        {
+//            // ensure that x.equals(y) => x.hashCode == y.hashCode
+//            return _element.getContributor().getName().hashCode();
+//        }
+//    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/AttributeDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/AttributeDescriptor.java
index 724deca..c05f6f1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/AttributeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/AttributeDescriptor.java
@@ -19,6 +19,7 @@
 
 /**
  * @author mengbo
+ * @deprecated
  */
 public class AttributeDescriptor implements IAttributeDescriptor {
 	private String _attributeName;
@@ -48,18 +49,30 @@
 		super();
 	}
 
+	/**
+	 * @param attrName
+	 */
 	public AttributeDescriptor(String attrName) {
 		this.setAttributeName(attrName);
 	}
 
+	/**
+	 * @param attributeName
+	 */
 	public void setAttributeName(String attributeName) {
 		this._attributeName = attributeName;
 	}
 
+	/**
+	 * @param category
+	 */
 	public void setCategory(String category) {
 		this._category = category;
 	}
 
+	/**
+	 * @param valueType
+	 */
 	public void setValueType(String valueType) {
 		this._valueType = valueType;
 	}
@@ -109,10 +122,17 @@
 		return _options;
 	}
 
+	/**
+	 * @param description
+	 */
 	public void setDescription(String description) {
 		_description = description;
 	}
 
+	/**
+	 * @param map
+	 * @param defaultValue
+	 */
 	public void setOptions(Map map, String defaultValue) {
 		_options = map;
 		_defaultValue = defaultValue;
@@ -190,6 +210,9 @@
 		return _defaultValue;
 	}
 
+	/**
+	 * @param value
+	 */
 	public void setDefaultValue(String value) {
 		_defaultValue = value;
 	}
@@ -198,7 +221,16 @@
 		return _required;
 	}
 
+	/**
+	 * @param required
+	 */
 	public void setRequired(boolean required) {
 		this._required = required;
 	}
+	
+	public String toString(){
+		StringBuffer buf = new StringBuffer("AttributeDescriptor: ");
+		buf.append(this.getAttributeName());
+		return buf.toString();
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/BindingHandlerDelegate.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/BindingHandlerDelegate.java
index ec88bcf..9a75e8d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/BindingHandlerDelegate.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/BindingHandlerDelegate.java
@@ -23,6 +23,7 @@
 /**
  * @author mengbo
  * @version 1.5
+ * @deprecated
  */
 public class BindingHandlerDelegate implements IBindingHandler {
 	/*
@@ -69,6 +70,14 @@
 				uri, tagName, attr);
 	}
 
+//	public boolean isEnabled(IDOMNode ancester, IDOMElement element,
+//			IPropertyPageDescriptor attr) {
+//		IBindingHandler handler = getDelegatedHandler(ancester, element);
+//		return (handler == null) ? false : handler.isEnabled(ancester, element,
+//				attr);
+//	}
+	
+	
 	/*
 	 * (non-Javadoc)
 	 * 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/DefaultEditorCreator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/DefaultEditorCreator.java
new file mode 100644
index 0000000..2275079
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/DefaultEditorCreator.java
@@ -0,0 +1,256 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. 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:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.meta;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.meta.internal.CellEditorFactoryRegistry;
+import org.eclipse.jst.pagedesigner.ui.dialogfields.DialogFieldWrapper;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+
+/**
+ * @author mengbo
+ * @version 1.5
+ */
+public class DefaultEditorCreator extends EditorCreator {
+	static IPropertyPageDescriptor _staticAttr;
+
+	static IDOMElement _staticElement;
+
+	//static IBindingHandler _staticHandler;
+
+	static CellEditorHolder _staticHolder;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jst.pagedesigner.meta.EditorCreator#createCellEditor(org.eclipse.swt.widgets.Composite,
+	 *      org.eclipse.jst.pagedesigner.meta.IPropertyPageDescriptor,
+	 *      org.w3c.dom.Element)
+	 */
+	public CellEditor createCellEditor(Composite parent,
+			IPropertyPageDescriptor attr, IDOMElement element) {
+		return CellEditorFactoryRegistry.getInstance().createCellEditor(parent,
+				attr, element);
+	}
+
+//	/*
+//	 * (non-Javadoc)
+//	 * 
+//	 * @see org.eclipse.jst.pagedesigner.meta.EditorCreator#createDialogField(org.eclipse.jst.pagedesigner.meta.IPropertyPageDescriptor)
+//	 */
+//	public DialogField createDialogField(IPropertyPageDescriptor attr) {
+//		return CellEditorFactoryRegistry.getInstance().createDialogField(attr);
+//	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jst.pagedesigner.meta.EditorCreator#createCellEditorWithWrapper(org.eclipse.swt.widgets.Composite,
+	 *      org.eclipse.jst.pagedesigner.meta.IPropertyPageDescriptor,
+	 *      org.w3c.dom.Element,
+	 *      org.eclipse.jst.pagedesigner.meta.IBindingHandler,
+	 *      org.eclipse.swt.graphics.Image)
+	 */
+	@SuppressWarnings("deprecation")
+    public CellEditor createCellEditorWithWrapper(Composite parent,
+			IPropertyPageDescriptor attr, final IDOMElement element,
+			IBindingHandler handler1) {
+//		final IBindingHandler handler = (handler1 == null ? getSystemDefaultBindingHandler()
+//				: handler1);
+//		String uri = CMUtil.getElementNamespaceURI(element);
+//		String tagName = element.getLocalName();
+		
+		return createCellEditor(parent, attr, element);
+//		
+//		if (!handler.isEnabled(element, element, uri, tagName, attr)) {
+//			// should not enabled, so directly return original cell editor
+//			return createCellEditor(parent, attr, element);
+//		}
+//		try {
+//			// since "createWrappedCellEditor()" and "getBindingImage()" is
+//			// called from the constructor of CellEditorWrapper, at that time,
+//			// can't reference this DefaultEditorCreator and final fields yet,
+//			// so use static variable for it.
+//			_staticAttr = attr;
+//			_staticElement = element;
+//			_staticHandler = handler;
+//
+//			return new CellEditorWrapper(parent) {
+//				/*
+//				 * (non-Javadoc)
+//				 * 
+//				 * @see org.eclipse.jst.pagedesigner.properties.celleditors.CellEditorWrapper#createWrappedCellEditor(org.eclipse.swt.widgets.Composite)
+//				 */
+//				protected CellEditor createWrappedCellEditor(Composite cell) {
+//					return EditorCreator.getInstance().createCellEditor(cell,
+//							_staticAttr, _staticElement);
+//				}
+//
+//				/*
+//				 * (non-Javadoc)
+//				 * 
+//				 * @see org.eclipse.jst.pagedesigner.properties.celleditors.CellEditorWrapper#openDialogBox(org.eclipse.swt.widgets.Control)
+//				 */
+//				protected Object openDialogBox(Control cellEditorWindow) {
+//					return handler.handleBinding(cellEditorWindow.getShell(),
+//							element, element, convertToString(this.getValue()));
+//				}
+//
+//				/*
+//				 * (non-Javadoc)
+//				 * 
+//				 * @see org.eclipse.jst.pagedesigner.properties.celleditors.CellEditorWrapper#getBindingImage()
+//				 */
+//				protected Image getBindingImage() {
+//					return _staticHandler.getImage();
+//				}
+//			};
+//		} finally {
+//			_staticAttr = null;
+//			_staticElement = null;
+//			_staticHandler = null;
+//			_staticHolder = null;
+//		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jst.pagedesigner.meta.EditorCreator#createCellEditorWithWrapper(org.eclipse.swt.widgets.Composite,
+	 *      org.eclipse.jst.pagedesigner.meta.IPropertyPageDescriptor,
+	 *      org.eclipse.jst.pagedesigner.meta.EditorCreator.CellEditorHolder,
+	 *      org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement,
+	 *      org.eclipse.jst.pagedesigner.meta.IBindingHandler)
+	 */
+	@SuppressWarnings("deprecation")
+    public CellEditor createCellEditorWithWrapper(Composite parent,
+			IPropertyPageDescriptor attr, CellEditorHolder holder,
+			final IDOMElement element, IBindingHandler handler1) {
+//		final IBindingHandler handler = (handler1 == null ? getSystemDefaultBindingHandler()
+//				: handler1);
+//		String uri = CMUtil.getElementNamespaceURI(element);
+//		String tagName = element.getLocalName();
+		
+		return holder.createCellEditor(parent);
+		
+//		if (!handler.isEnabled(element, element, uri, tagName, attr)) {
+//			// should not enabled, so directly return original cell editor
+//			return holder.createCellEditor(parent);
+//		}
+//		try {
+//			// since "createWrappedCellEditor()" and "getBindingImage()" is
+//			// called from the constructor of CellEditorWrapper, at that time,
+//			// can't reference this DefaultEditorCreator and final fields yet,
+//			// so use static variable for it.
+//			_staticElement = element;
+//			_staticHandler = handler;
+//			_staticHolder = holder;
+//
+//			return new CellEditorWrapper(parent) {
+//				/*
+//				 * (non-Javadoc)
+//				 * 
+//				 * @see org.eclipse.jst.pagedesigner.properties.celleditors.CellEditorWrapper#createWrappedCellEditor(org.eclipse.swt.widgets.Composite)
+//				 */
+//				protected CellEditor createWrappedCellEditor(Composite cell) {
+//					return _staticHolder.createCellEditor(cell);
+//				}
+//
+//				/*
+//				 * (non-Javadoc)
+//				 * 
+//				 * @see org.eclipse.jst.pagedesigner.properties.celleditors.CellEditorWrapper#openDialogBox(org.eclipse.swt.widgets.Control)
+//				 */
+//				protected Object openDialogBox(Control cellEditorWindow) {
+//					return handler.handleBinding(cellEditorWindow.getShell(),
+//							element, element, convertToString(this.getValue()));
+//				}
+//
+//				/*
+//				 * (non-Javadoc)
+//				 * 
+//				 * @see org.eclipse.jst.pagedesigner.properties.celleditors.CellEditorWrapper#getBindingImage()
+//				 */
+//				protected Image getBindingImage() {
+//					return _staticHandler.getImage();
+//				}
+//			};
+//		} finally {
+//			_staticAttr = null;
+//			_staticElement = null;
+//			_staticHandler = null;
+//			_staticHolder = null;
+//		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jst.pagedesigner.meta.EditorCreator#createDialogFieldWithWrapper(java.lang.String,
+	 *      java.lang.String,
+	 *      org.eclipse.jst.pagedesigner.meta.IPropertyPageDescriptor,
+	 *      org.eclipse.jst.pagedesigner.meta.IBindingHandler)
+	 */
+	@SuppressWarnings("deprecation")
+    public DialogField createDialogFieldWithWrapper(String uri, String tagName,
+			IPropertyPageDescriptor attr, IBindingHandler handler1) {
+		final IBindingHandler handler = (handler1 == null ? getSystemDefaultBindingHandler()
+				: handler1);
+		DialogField field = createDialogField(attr);
+		// if (field instanceof StringButtonDialogField)
+		// {
+		// ((StringButtonDialogField) field).setButtonLabel("...");
+		// }
+		DialogFieldWrapper wrapper = new DialogFieldWrapper(field, handler
+				.getImage(), handler.getDisabledImage(), uri, tagName, attr,
+				handler);
+		wrapper.setDatabindingEnabled(true);
+
+		return wrapper;
+	}
+
+
+//	private String convertToString(Object value) {
+//		if (value == null) {
+//			return null;
+//		}
+//        return value.toString();
+//	}
+
+	@SuppressWarnings("deprecation")
+    @Override
+	public DialogField createDialogFieldWithWrapper(
+			IPropertyPageDescriptor attr, IBindingHandler handler1) {
+		final IBindingHandler handler = (handler1 == null ? getSystemDefaultBindingHandler()
+				: handler1);
+		DialogField field = createDialogField(attr);
+		// if (field instanceof StringButtonDialogField)
+		// {
+		// ((StringButtonDialogField) field).setButtonLabel("...");
+		// }
+		DialogFieldWrapper wrapper = new DialogFieldWrapper(field, handler
+				.getImage(), handler.getDisabledImage(), attr.getUri(), attr.getTagName(), attr,
+				handler);
+		wrapper.setDatabindingEnabled(true);
+
+		return wrapper;
+	}
+
+	@Override
+	public DialogField createDialogField(IPropertyPageDescriptor attr) {
+		return CellEditorFactoryRegistry.getInstance().createDialogField(attr);		
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/EditorCreator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/EditorCreator.java
index c436fdb..a6d6bb6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/EditorCreator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/EditorCreator.java
@@ -13,7 +13,7 @@
 
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
-import org.eclipse.jst.pagedesigner.meta.internal.DefaultEditorCreator;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 
@@ -24,9 +24,17 @@
 public abstract class EditorCreator {
 	static EditorCreator _instance;
 
-	static IBindingHandler _defaultHandler = new BindingHandlerDelegate();
+	@SuppressWarnings("deprecation")
+    static IBindingHandler _defaultHandler = new BindingHandlerDelegate();
 
+	/**
+	 * 
+	 */
 	public static interface CellEditorHolder {
+		/**
+		 * @param parent
+		 * @return the cell editor
+		 */
 		public CellEditor createCellEditor(Composite parent);
 	}
 
@@ -35,9 +43,9 @@
 	 * descriptor.
 	 * 
 	 * @param attr
-	 * @return
+	 * @return DialogField
 	 */
-	public abstract DialogField createDialogField(IAttributeDescriptor attr);
+	public abstract DialogField createDialogField(IPropertyPageDescriptor attr);
 
 	/**
 	 * Create a dialog field that will have databinding support. Basically, this
@@ -51,21 +59,47 @@
 	 * @param attr
 	 * @param handler
 	 *            if null, system default mechanism will be used.
-	 * @return
+	 * @return DialogField
 	 */
-	public abstract DialogField createDialogFieldWithWrapper(String uri,
-			String tagName, IAttributeDescriptor attr, IBindingHandler handler);
+	@SuppressWarnings("deprecation")
+    public abstract DialogField createDialogFieldWithWrapper(String uri,
+			String tagName, IPropertyPageDescriptor attr, IBindingHandler handler);
 
+
+	/**
+	 * @param descriptor
+	 * @param handler
+	 * @return the dialog field
+	 */
+	@SuppressWarnings("deprecation")
+    public abstract DialogField createDialogFieldWithWrapper(IPropertyPageDescriptor descriptor, IBindingHandler handler);
+//	
+//	/**
+//	 * Create a dialog field that will have databinding support. Basically, this
+//	 * method will create a normal dialog field using the attribute descriptor,
+//	 * then make a wrapper on it.
+//	 *
+//	 * @param uri
+//	 *            the namespace uri
+//	 * @param tagName
+//	 *            the local tag name
+//	 * @param attrName
+//	 * @param handler
+//	 *            if null, system default mechanism will be used.
+//	 * @return DialogField
+//	 */
+//	public abstract DialogField createDialogFieldWithWrapper(String uri,
+//			String tagName, String attrName, IBindingHandler handler);
 	/**
 	 * Create a cell editor.
 	 * 
 	 * @param parent
 	 * @param attr
 	 * @param element
-	 * @return
+	 * @return CellEditor
 	 */
 	public abstract CellEditor createCellEditor(Composite parent,
-			IAttributeDescriptor attr, IDOMElement element);
+			IPropertyPageDescriptor attr, IDOMElement element);
 
 	/**
 	 * Create a cell editor that will have databinding support.
@@ -75,10 +109,11 @@
 	 * @param element
 	 * @param handler
 	 *            if null, system default mechanism will be used.
-	 * @return
+	 * @return CellEditor
 	 */
-	public abstract CellEditor createCellEditorWithWrapper(Composite parent,
-			IAttributeDescriptor attr, IDOMElement element,
+	@SuppressWarnings("deprecation")
+    public abstract CellEditor createCellEditorWithWrapper(Composite parent,
+			IPropertyPageDescriptor attr, IDOMElement element,
 			IBindingHandler handler);
 
 	/**
@@ -93,12 +128,16 @@
 	 * @param element
 	 * @param handler
 	 *            if null, system default mechanism will be used.
-	 * @return
+	 * @return CellEditor
 	 */
-	public abstract CellEditor createCellEditorWithWrapper(Composite parent,
-			IAttributeDescriptor attr, CellEditorHolder holder,
+	@SuppressWarnings("deprecation")
+    public abstract CellEditor createCellEditorWithWrapper(Composite parent,
+			IPropertyPageDescriptor attr, CellEditorHolder holder,
 			IDOMElement element, IBindingHandler handler);
 
+	/**
+	 * @return the singleton instance
+	 */
 	public static EditorCreator getInstance() {
 		if (_instance == null) {
 			_instance = new DefaultEditorCreator();
@@ -106,7 +145,11 @@
 		return _instance;
 	}
 
-	public IBindingHandler getSystemDefaultBindingHandler() {
+	/**
+	 * @return the binding handler
+	 */
+	@SuppressWarnings("deprecation")
+    public IBindingHandler getSystemDefaultBindingHandler() {
 		return _defaultHandler;
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeCellEditorFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeCellEditorFactory.java
index 105395a..f3d53c1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeCellEditorFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeCellEditorFactory.java
@@ -20,6 +20,7 @@
  * Factory for creating CellEditors to edit element attributes.
  * 
  * @author mengbo
+ * @deprecated - not to be used.   use ITagAttributeCellEditorFactory
  */
 public interface IAttributeCellEditorFactory {
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeDescriptor.java
index 1653219..2953efe 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeDescriptor.java
@@ -16,22 +16,38 @@
 /**
  * 
  * @author mengbo
+ * @deprecated
  */
 public interface IAttributeDescriptor {
-	public static final String PARAMETER_SUFFIX = "suffix";
+	/**
+	 * suffix
+	 */
+	final String PARAMETER_SUFFIX = "suffix";
 
-	public static final String PARAMETER_STYLE = "style";
+	/**
+	 * style
+	 */
+	final String PARAMETER_STYLE = "style";
 
-	public static final String PARAMETER_SUPER_TYPE = "superType";
+	/**
+	 * super type
+	 */
+	final String PARAMETER_SUPER_TYPE = "superType";
 
-	public static final String PARAMETER_SEPARATOR = "separator";
+	/**
+	 * separator
+	 */
+	final String PARAMETER_SEPARATOR = "separator";
 
-	public static final String PARAMETER_DEFAULT = "default";
+	/**
+	 * default
+	 */
+	final String PARAMETER_DEFAULT = "default";
 
 	/**
 	 * get the name of the attribute.
 	 * 
-	 * @return
+	 * @return the attribute name
 	 */
 	public String getAttributeName();
 
@@ -47,14 +63,14 @@
 	/**
 	 * return the category for this attribute.
 	 * 
-	 * @return
+	 * @return the category
 	 */
 	public String getCategory();
 
 	/**
 	 * value type is used to construct the cell editor.
 	 * 
-	 * @return
+	 * @return the value type
 	 */
 	public String getValueType();
 
@@ -70,6 +86,10 @@
 	 */
 	public String getTypeParameter();
 
+	/**
+	 * @param name
+	 * @return the parameter
+	 */
 	public String getParameterByName(String name);
 
 	/**
@@ -78,28 +98,28 @@
 	 * 
 	 * The Map will be (key->display string)
 	 * 
-	 * @return
+	 * @return the options
 	 */
 	public Map getOptions();
 
 	/**
 	 * Gets the default value of Options
 	 * 
-	 * @return
+	 * @return the default value
 	 */
 	public String getDefaultValue();
 
 	/**
 	 * A human readable string as the label of the attribute.
 	 * 
-	 * @return
+	 * @return the label
 	 */
 	public String getLabelString();
 
 	/**
 	 * Indicate whether the attribute is required.
 	 * 
-	 * @return
+	 * @return true if is required
 	 */
 	public boolean isRequired();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeRuntimeValueType.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeRuntimeValueType.java
new file mode 100644
index 0000000..8328bb5
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IAttributeRuntimeValueType.java
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. 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:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.meta;
+
+/**
+ * Enumeration of core attribute-value-runtime-types.
+ * Not to be implemented by clients.
+ */
+public interface IAttributeRuntimeValueType {
+	// shared for html and jsf
+	/**
+	 * 
+	 */
+	static final String prefix1 = "org.eclipse.jst.jsf.core.attributevalues.";
+	/**
+	 * 
+	 */
+	static final String prefix2 = "org.eclipse.jst.pagedesigner.attributevalues.";
+	
+	/**
+	 * 
+	 */
+	public static final String BASE = prefix1+"BaseType";
+	
+	/**
+	 * 
+	 */
+	public static final String CSSSTYLE = prefix2+"CSSStyleType";
+
+	/**
+	 * 
+	 */
+	public static final String CSSCLASS = prefix2+"CSSClassType";
+
+	/**
+	 * 
+	 */
+	public static final String CSSID = prefix2+"CSSIdType";
+
+	/**
+	 * 
+	 */
+	public static final String STRING = prefix1+"StringType";
+
+	/**
+	 * 
+	 */
+	public static final String BOOLEAN = prefix1+"BooleanType";
+
+	/**
+	 * 
+	 */
+	public static final String RELATIVEPATH = prefix1+"RelativePathType";
+
+	/**
+	 * 
+	 */
+	public static final String WEBPATH = prefix1+"WebPathType"; //FIXME
+
+	/**
+	 * 
+	 */
+	public static final String COLOR = prefix1+"ColorType";
+
+//	public static final String NAMED_BOOLEAN = prefix1+"NAMED-BOOLEAN";
+	
+	/**
+	 * 
+	 */
+	public static final String LONG = prefix1+"LongType";
+	
+	/**
+	 * 
+	 */
+	public static final String INTEGER = prefix1+"IntegerType";
+	
+	/**
+	 * 
+	 */
+	public static final String DOUBLE = prefix1+"DoubleType";
+
+	/**
+	 * 
+	 */
+	public static final String METHODBINDING = prefix1+"MethodBindingType";
+
+	/**
+	 * 
+	 */
+	public static final String JAVACLASS = prefix1+"JavaClassType";
+
+	/**
+	 * 
+	 */
+	public static final String SCRIPT = prefix1+"ScriptType";
+
+//	public static final String PROPERTYBINDING = prefix1+"PROPERTYBINDING";
+	
+	/**
+	 * 
+	 */
+	public static final String VALUE = prefix1+"ValueType";
+	
+	/**
+	 * 
+	 */
+	public static final String VALUEBINDING = prefix1+"ValueBindingType";
+
+	/**
+	 * 
+	 */
+	public static final String TIMEZONE = prefix1+"TimeZoneType";
+	
+	/**
+	 * 
+	 */
+	public static final String ACTION = prefix1+"ActionType";
+
+	/**
+	 * 
+	 */
+	public static final String CLASSPATH_RESOURCE = prefix1+"CLASSPATH_RESOURCE";
+
+	/**
+	 * 
+	 */
+	public static final String CURRENCYCODE = prefix1+"CurrencyCodeType";
+
+	/**
+	 * 
+	 */
+	public static final String LINK = prefix1+"LinkType";
+	
+	/**
+	 * 
+	 */
+	public static final String LOCALE = prefix1+"LocaleType";
+
+//	public static final String MULTICHOICE = prefix1+"MULTICHOICE";
+	
+	/**
+	 * 
+	 */
+	public static final String FACESCONFIGIDENTIFIER = prefix1+"FacesConfigIdentifierType";
+	
+	/**
+	 * 
+	 */
+	public static final String FACESCONFIGVALIDATORID = prefix1+"FacesConfigValidatorIDType";
+	
+	/**
+	 * 
+	 */
+	public static final String FACESCONFIGCONVERTERID = prefix1+"FacesConfigConverterIDType";
+	
+	/**
+	 * 
+	 */
+	public static final String COMPONENTBINDING = prefix1+"ComponentBindingType";
+	
+	/**
+	 * 
+	 */
+	public static final String COMPONENTID = prefix1+"ComponentIDType";
+	
+	/**
+	 * 
+	 */
+	public static final String LENGTH = prefix1+"LengthType";
+	
+	/**
+	 * 
+	 */
+	public static final String RESOURCEBUNDLE = prefix1+"ResourceBundleType";
+	
+	/**
+	 * 
+	 */
+	public static final String LANGUAGECODE = prefix1+"LanguageCodeType";
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IBindingHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IBindingHandler.java
index a93a780..514cb41 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IBindingHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IBindingHandler.java
@@ -19,6 +19,7 @@
 /**
  * @author mengbo
  * @version 1.5
+ * @deprecated
  */
 public interface IBindingHandler {
 	/**
@@ -43,11 +44,15 @@
 	 * @param tagName
 	 * @param attr
 	 *            could be null.
-	 * @return
+	 * @return true if is enabled
 	 */
 	public boolean isEnabled(IDOMNode ancester, IDOMElement element,
 			String uri, String tagName, IAttributeDescriptor attr);
 
+	
+//	public boolean isEnabled(IDOMNode ancester, IDOMElement element,
+//			IPropertyPageDescriptor attr);
+	
 	/**
 	 * given the meta data of an attribute, to see whether should enable binding
 	 * handler for it.
@@ -62,9 +67,12 @@
 	/**
 	 * Image used for the small button.
 	 * 
-	 * @return
+	 * @return the image
 	 */
 	public Image getImage();
 
+	/**
+	 * @return the image indicating disablement
+	 */
 	public Image getDisabledImage();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/ICMRegistry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/ICMRegistry.java
index 060795a..5c047fe 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/ICMRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/ICMRegistry.java
@@ -14,6 +14,7 @@
 /**
  * 
  * @author mengbo
+ * @deprecated
  */
 public interface ICMRegistry {
 	/**
@@ -28,7 +29,7 @@
 	 * 
 	 * @param uri
 	 * @param tagname
-	 * @return
+	 * @return the element descriptor
 	 */
 	public IElementDescriptor getElementDescriptor(String uri, String tagname);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IElementDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IElementDescriptor.java
index 78a819c..e16246c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IElementDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IElementDescriptor.java
@@ -14,29 +14,34 @@
 /**
  * 
  * @author mengbo
+ *  * @deprecated
  */
 public interface IElementDescriptor {
 	/**
 	 * get the tagname
 	 * 
-	 * @return
+	 * @return the tag name
 	 */
 	public String getTagName();
 
 	/**
 	 * get the namespace URI
 	 * 
-	 * @return
+	 * @return te namespace
 	 */
 	public String getNamespaceURI();
 
 	/**
 	 * get all attribute descriptors
 	 * 
-	 * @return
+	 * @return the attribute descriptors
 	 */
 	public IAttributeDescriptor[] getAttributeDescriptors();
 
+	/**
+	 * @param attributeName
+	 * @return the attribute by name
+	 */
 	public IAttributeDescriptor getAttributeDescriptor(String attributeName);
 
 	/**
@@ -52,7 +57,7 @@
 	 * &lt;input&gt;. So those attribute descriptor not provided by
 	 * &lt;h:inputText&gt; could still be provided by &lt;input&gt;.
 	 * 
-	 * @return
+	 * @return the reference
 	 */
 	public IElementDescriptor getReference();
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/ITagAttributeCellEditorFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/ITagAttributeCellEditorFactory.java
new file mode 100644
index 0000000..363f858
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/ITagAttributeCellEditorFactory.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.meta;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.swt.widgets.Composite;
+import org.w3c.dom.Element;
+
+/**
+ * Factory for creating CellEditors and DialogFields to edit element attributes.
+ */
+public interface ITagAttributeCellEditorFactory {
+	/**
+	 * create cell editor
+	 * 
+	 * @param parent
+	 * @param attr
+	 * @param ele
+	 * @return null means failed to create cell editor
+	 */
+	public CellEditor createCellEditor(Composite parent,
+			IPropertyPageDescriptor attr, Element ele);
+
+	/**
+	 * Normally, the DialogField for an attribute may appear in the following
+	 * places.
+	 * <ol>
+	 * <li>In the Quick Editor properties view, used to edit an element.
+	 * <li>In a dialog to edit an element
+	 * <li>In a dialog, to create an element
+	 * </ol>
+	 * 
+	 * It is the caller's responsibility to add valueChanged listener to the
+	 * dialog field to decide how to apply the value.
+	 * 
+	 * It is also the caller's responsibility to set the initial value of the
+	 * field.
+	 * 
+	 * The field should always be an instanceof <code>ISupportTextValue</code>,
+	 * it could also optionally implement <code>IElementContextable</code>
+	 * 
+	 * @param attr
+	 *            the attribute descriptor, meta data
+	 * @return A dialog field. null means this factory can't create one.
+	 * 
+	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue
+	 */
+	public DialogField createDialogField(IPropertyPageDescriptor attr);
+
+	/**
+	 * The attribute runtime value types supported by this factory.
+	 * 
+	 * @return null means this factory can behave as default factory.
+	 */
+	public String[] getSupportedValueTypes();
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IValueType.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/OLDIValueType.java
similarity index 84%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IValueType.java
rename to jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/OLDIValueType.java
index f6e930c..e702a15 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/IValueType.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/OLDIValueType.java
@@ -15,46 +15,104 @@
  * All value types will be upcased.
  * 
  * @author mengbo
+ * @deprecated
  */
-public interface IValueType {
+public interface OLDIValueType {
 	// shared for html and jsf
+	/**
+	 * 
+	 */
 	public static final String CSSSTYLE = "CSSSTYLE";
 
+	/**
+	 * 
+	 */
 	public static final String CSSCLASS = "CSSCLASS";
 
+	/**
+	 * 
+	 */
 	public static final String CSSID = "CSSID";
 
+	/**
+	 * 
+	 */
 	public static final String ENUMERATED = "ENUMERATED";
 
+	/**
+	 * 
+	 */
 	public static final String BOOLEAN = "BOOLEAN";
 
+	/**
+	 * 
+	 */
 	public static final String RELATIVEPATH = "RELATIVEPATH";
 
+	/**
+	 * 
+	 */
 	public static final String WEBPATH = "WEBPATH";
 
+	/**
+	 * 
+	 */
 	public static final String COLOR = "COLOR";
 
+	/**
+	 * 
+	 */
 	public static final String NAMED_BOOLEAN = "NAMED-BOOLEAN";
 
 	// for jsf only
+	/**
+	 * 
+	 */
 	public static final String METHODBINDING = "METHODBINDING";
 
+	/**
+	 * 
+	 */
 	public static final String CLASSNAME = "CLASSNAME";
 
 	// new types
+	/**
+	 * 
+	 */
 	public static final String LINK = "LINK";
 
+	/**
+	 * 
+	 */
 	public static final String JAVASCRIPT = "JAVASCRIPT";
 
+	/**
+	 * 
+	 */
 	public static final String PROPERTYBINDING = "PROPERTYBINDING";
 
+	/**
+	 * 
+	 */
 	public static final String TIMEZONE = "TIMEZONE";
 
+	/**
+	 * 
+	 */
 	public static final String CLASSPATH_RESOURCE = "CLASSPATH_RESOURCE";
 
+	/**
+	 * 
+	 */
 	public static final String CURRENCYCODE = "CURRENCYCODE";
 
+	/**
+	 * 
+	 */
 	public static final String LOCALE = "LOCALE";
 
+	/**
+	 * 
+	 */
 	public static final String MULTICHOICE = "MULTICHOICE";
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/XXXEditorCreator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/XXXEditorCreator.java
new file mode 100644
index 0000000..ec1bf2c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/XXXEditorCreator.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. 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:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.meta;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.meta.internal.XXXDefaultEditorCreator;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+
+/**
+ * @author mengbo
+ * @version 1.5
+ * @deprecated 
+ * will be deleted  (was EditorCreator)
+ */
+public abstract class XXXEditorCreator {
+	static XXXEditorCreator _instance;
+
+	static IBindingHandler _defaultHandler = new BindingHandlerDelegate();
+
+	/**
+	 * Cell editor holder
+	 *
+	 */
+	public static interface CellEditorHolder {
+		/**
+		 * @param parent
+		 * @return the cell editor
+		 */
+		public CellEditor createCellEditor(Composite parent);
+	}
+
+	/**
+	 * Create a dialog field without databinding using the specified attribute
+	 * descriptor.
+	 * 
+	 * @param attr
+	 * @return DialogField
+	 */
+	public abstract DialogField createDialogField(IAttributeDescriptor attr);
+
+	/**
+	 * Create a dialog field that will have databinding support. Basically, this
+	 * method will create a normal dialog field using the attribute descriptor,
+	 * then make a wrapper on it.
+	 * 
+	 * @param uri
+	 *            the namespace uri
+	 * @param tagName
+	 *            the local tag name
+	 * @param attr
+	 * @param handler
+	 *            if null, system default mechanism will be used.
+	 * @return DialogField
+	 */
+	public abstract DialogField createDialogFieldWithWrapper(String uri,
+			String tagName, IAttributeDescriptor attr, IBindingHandler handler);
+
+	/**
+	 * @param descriptor
+	 * @param handler
+	 * @return the dialog field
+	 */
+	public abstract DialogField createDialogFieldWithWrapper(IPropertyPageDescriptor descriptor, IBindingHandler handler);
+//	
+//	/**
+//	 * Create a dialog field that will have databinding support. Basically, this
+//	 * method will create a normal dialog field using the attribute descriptor,
+//	 * then make a wrapper on it.
+//	 * 
+//	 * @param uri
+//	 *            the namespace uri
+//	 * @param tagName
+//	 *            the local tag name
+//	 * @param attrName
+//	 * @param handler
+//	 *            if null, system default mechanism will be used.
+//	 * @return DialogField
+//	 */
+//	public abstract DialogField createDialogFieldWithWrapper(String uri,
+//			String tagName, String attrName, IBindingHandler handler);
+	/**
+	 * Create a cell editor.
+	 * 
+	 * @param parent
+	 * @param attr
+	 * @param element
+	 * @return CellEditor
+	 */
+	public abstract CellEditor createCellEditor(Composite parent,
+			IAttributeDescriptor attr, IDOMElement element);
+
+	/**
+	 * Create a cell editor that will have databinding support.
+	 * 
+	 * @param parent
+	 * @param attr
+	 * @param element
+	 * @param handler
+	 *            if null, system default mechanism will be used.
+	 * @return CellEditor
+	 */
+	public abstract CellEditor createCellEditorWithWrapper(Composite parent,
+			IAttributeDescriptor attr, IDOMElement element,
+			IBindingHandler handler);
+
+	/**
+	 * Create a cell edtior that will have databinding support. This method
+	 * don't provide an attribute descriptor, but it provide a CellEditorHolder
+	 * to create whatever normal cell editor it wants.
+	 * 
+	 * @param parent
+	 * @param attr
+	 *            could be null
+	 * @param holder
+	 * @param element
+	 * @param handler
+	 *            if null, system default mechanism will be used.
+	 * @return CellEditor
+	 */
+	public abstract CellEditor createCellEditorWithWrapper(Composite parent,
+			IAttributeDescriptor attr, CellEditorHolder holder,
+			IDOMElement element, IBindingHandler handler);
+
+	/**
+	 * @return the singleton instance
+	 */
+	public static XXXEditorCreator getInstance() {
+		if (_instance == null) {
+			_instance = new XXXDefaultEditorCreator();
+		}
+		return _instance;
+	}
+
+	/**
+	 * @return the binding handler
+	 */
+	public IBindingHandler getSystemDefaultBindingHandler() {
+		return _defaultHandler;
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CMRegistry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CMRegistry.java
index 4230957..d231517 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CMRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CMRegistry.java
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.meta.internal;
 
+import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -18,6 +19,9 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionPoint;
@@ -32,12 +36,14 @@
 import org.eclipse.jst.pagedesigner.meta.ICMRegistry;
 import org.eclipse.jst.pagedesigner.meta.IElementDescriptor;
 import org.osgi.framework.Bundle;
+import org.xml.sax.SAXException;
 
 /**
  * XXX: temp implementation. In the future, will need add more things to allow
  * other plugins to contribute things.
  * 
  * @author mengbo
+ * @deprecated
  */
 public class CMRegistry implements ICMRegistry {
 	static Logger _log = PDPlugin.getLogger(CMRegistry.class);
@@ -50,7 +56,10 @@
 
 	private static CMRegistry _instance = null;
 
-	public static ICMRegistry getInstance() {
+	/**
+	 * @return the singleton instance
+	 */
+	public static CMRegistry getInstance() {
 		if (_instance == null) {
 			_instance = new CMRegistry();
 		}
@@ -123,10 +132,15 @@
 						SimpleCMRegistry reg = new SimpleCMRegistry(uri,
 								cmFileUrl);
 						_contributedRegistries.add(reg);
-					} catch (Exception ex) {
-						// will not happen. skip
-						ex.printStackTrace();
-					}
+					} catch (ParserConfigurationException e) {
+                        PDPlugin.getLogger(getClass()).error(new Throwable(e));
+                    } catch (FactoryConfigurationError e) {
+                        PDPlugin.getLogger(getClass()).error(new Throwable(e));                    
+                    } catch (SAXException e) {
+                        PDPlugin.getLogger(getClass()).error(new Throwable(e));
+                    } catch (IOException e) {
+                        PDPlugin.getLogger(getClass()).error(new Throwable(e));
+                    }
 				}
 				String className = eles[i].getAttribute("class");
 				if (className != null && className.length() > 0) {
@@ -137,8 +151,7 @@
 							_contributedRegistries.add(obj);
 						}
 					} catch (CoreException e) {
-						// ignore the exception
-						e.printStackTrace();
+					    PDPlugin.getLogger(getClass()).error(new Throwable(e));
 					}
 				}
 			}
@@ -203,4 +216,20 @@
 	private IElementDescriptor getJSPElementDescriptor(String tagname) {
 		return (IElementDescriptor) _jspMap.get(tagname.toLowerCase());
 	}
+	
+	/**
+	 * @return list of {@link ICMRegistry}
+	 */
+	public List<ICMRegistry> getRegistries() {
+		List<ICMRegistry> ret = new ArrayList<ICMRegistry>(_contributedRegistries);
+		ret.add(this);
+		return ret;
+	}
+	
+	/**
+	 * call to free up memory used
+	 */
+	public void unloadRegistry(){
+		_instance = null;
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CategoryNameComparator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CategoryNameComparator.java
index 1696c7c..30c22e1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CategoryNameComparator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CategoryNameComparator.java
@@ -17,12 +17,13 @@
 import org.eclipse.jst.pagedesigner.properties.ITabbedPropertiesConstants;
 
 /**
+ * Sorts categories and ensures that @see{ITabbedPropertiesConstants.OTHER_CATEGORY} comes last
  * @author mengbo
  */
 public class CategoryNameComparator implements Comparator {
 	static HashSet _pairs = new HashSet();
 
-	private static CategoryNameComparator _instance = new CategoryNameComparator();
+	private final static CategoryNameComparator _instance = new CategoryNameComparator();
 
 	static class Pair {
 		String s1;
@@ -47,6 +48,10 @@
 		}
 	}
 
+	/**
+	 * @param s1
+	 * @param s2
+	 */
 	public static void addPair(String s1, String s2) {
 		_pairs.add(new Pair(s1, s2));
 	}
@@ -65,12 +70,15 @@
 		if (ITabbedPropertiesConstants.OTHER_CATEGORY.equals(o2))
 			return -1;
 
-		Pair p = new Pair((String) o1, (String) o2);
-		if (_pairs.contains(p))
-			return -1;
-		return 1;
+//		Pair p = new Pair((String) o1, (String) o2);
+//		if (_pairs.contains(p))
+//			return -1;
+		return ((String)o1).compareTo(((String)o2));
 	}
 
+	/**
+	 * @return the instance
+	 */
 	public static CategoryNameComparator getInstance() {
 		return _instance;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CellEditorFacRegistryReader.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CellEditorFacRegistryReader.java
index 20b98a9..36b9ac2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CellEditorFacRegistryReader.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CellEditorFacRegistryReader.java
@@ -21,7 +21,7 @@
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jst.pagedesigner.IJMTConstants;
 import org.eclipse.jst.pagedesigner.PDPlugin;
-import org.eclipse.jst.pagedesigner.meta.IAttributeCellEditorFactory;
+import org.eclipse.jst.pagedesigner.meta.ITagAttributeCellEditorFactory;
 
 /**
  * Read the registry to find out all the CellEditorFactory.
@@ -29,9 +29,12 @@
  * @author mengbo
  */
 public class CellEditorFacRegistryReader {
-	static IAttributeCellEditorFactory[] _factories = null;
+	static ITagAttributeCellEditorFactory[] _factories = null;
 
-	public static synchronized IAttributeCellEditorFactory[] getAllFactories() {
+	/**
+	 * @return ITagAttributeCellEditorFactory[]
+	 */
+	public static synchronized ITagAttributeCellEditorFactory[] getAllFactories() {
 		if (_factories == null) {
 			_factories = readAllFactories();
 		}
@@ -39,7 +42,7 @@
 
 	}
 
-	private static IAttributeCellEditorFactory[] readAllFactories() {
+	private static ITagAttributeCellEditorFactory[] readAllFactories() {
 		List result = new ArrayList();
 		IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
 				.getExtensionPoint(PDPlugin.getPluginId(),
@@ -52,13 +55,12 @@
 
 			for (int j = 0; j < facs.length; j++) {
 				if (facs[j].getName().equals(
-						IJMTConstants.ATTRIBUTE_CELLEDITOR_FACTORY)) {
-					facs[j].getAttribute("class");
+						IJMTConstants.TAG_ATTRIBUTE_CELLEDITOR_FACTORY)) {
 					Object obj;
 					try {
 						obj = facs[j].createExecutableExtension("class");
 
-						if (obj instanceof IAttributeCellEditorFactory) {
+						if (obj instanceof ITagAttributeCellEditorFactory) {
 							result.add(obj);
 						}
 					} catch (CoreException e) {
@@ -68,7 +70,7 @@
 				}
 			}
 		}
-		IAttributeCellEditorFactory[] ret = new IAttributeCellEditorFactory[result
+		ITagAttributeCellEditorFactory[] ret = new ITagAttributeCellEditorFactory[result
 				.size()];
 		result.toArray(ret);
 		return ret;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CellEditorFactoryRegistry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CellEditorFactoryRegistry.java
index 158c98d..2435800 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CellEditorFactoryRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/CellEditorFactoryRegistry.java
@@ -11,25 +11,17 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.meta.internal;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StringDialogField;
-import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
-import org.eclipse.jst.pagedesigner.PDPlugin;
-import org.eclipse.jst.pagedesigner.meta.IAttributeCellEditorFactory;
-import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
-import org.eclipse.jst.pagedesigner.meta.IValueType;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.meta.ITagAttributeCellEditorFactory;
 import org.eclipse.jst.pagedesigner.properties.celleditors.CellEditorFactory;
 import org.eclipse.swt.widgets.Composite;
 import org.w3c.dom.Element;
@@ -38,11 +30,10 @@
  * CellEditorFactoryRegistry also read information from plugin.xml extension to
  * allow other plugins to contribute new kinds of cell editors.
  * 
- * @author mengbo
  */
 public class CellEditorFactoryRegistry {
-	private static final Logger _log = PDPlugin
-			.getLogger(CellEditorFactoryRegistry.class);
+//	private static final Logger _log = PDPlugin
+//			.getLogger(CellEditorFactoryRegistry.class);
 
 	private static CellEditorFactoryRegistry _instance;
 
@@ -50,6 +41,9 @@
 
 	private List _defaultFactories = new ArrayList();
 
+	/**
+	 * @return singleton CellEditorFactoryRegistry
+	 */
 	public static CellEditorFactoryRegistry getInstance() {
 		if (_instance == null) {
 			_instance = new CellEditorFactoryRegistry();
@@ -58,7 +52,7 @@
 	}
 
 	private CellEditorFactoryRegistry() {
-		IAttributeCellEditorFactory[] facs = CellEditorFacRegistryReader
+		ITagAttributeCellEditorFactory[] facs = CellEditorFacRegistryReader
 				.getAllFactories();
 		if (facs != null) {
 			for (int i = 0; i < facs.length; i++) {
@@ -68,33 +62,43 @@
 		addCellEditorFactory(new CellEditorFactory());
 	}
 
-	public void addCellEditorFactory(IAttributeCellEditorFactory fac) {
+	/**
+	 * @param fac
+	 */
+	public void addCellEditorFactory(ITagAttributeCellEditorFactory fac) {
 		String[] types = fac.getSupportedValueTypes();
 		if (types == null || types.length == 0) {
 			_defaultFactories.add(fac);
 		} else {
 			for (int i = 0; i < types.length; i++) {
-				_factoryMap.put(types[i].toUpperCase(), fac);
+				_factoryMap.put(types[i], fac);
 			}
 		}
 	}
 
+	/**
+	 * Return cell editor for attribute based upon runtime value type
+	 * @param parent
+	 * @param attr
+	 * @param element
+	 * @return CellEditor
+	 */
 	public CellEditor createCellEditor(Composite parent,
-			IAttributeDescriptor attr, Element element) {
+			IPropertyPageDescriptor attr, Element element) {
 		String type = attr.getValueType();
 		if (type == null || type.length() == 0)
 			return null;
-		type = type.toUpperCase();
 
 		CellEditor result = null;
-		IAttributeCellEditorFactory fac = (IAttributeCellEditorFactory) _factoryMap
+		ITagAttributeCellEditorFactory fac = (ITagAttributeCellEditorFactory) _factoryMap
 				.get(type);
+		
 		if (fac != null) {
 			result = fac.createCellEditor(parent, attr, element);
 		}
 		if (result == null) {
 			for (int i = 0, size = _defaultFactories.size(); i < size; i++) {
-				result = ((IAttributeCellEditorFactory) _defaultFactories
+				result = ((ITagAttributeCellEditorFactory) _defaultFactories
 						.get(i)).createCellEditor(parent, attr, element);
 				if (result != null)
 					break;
@@ -104,30 +108,27 @@
 	}
 
 	/**
-	 * 
 	 * @param attr
-	 * @param context
-	 * @param ele
-	 * @return will never be null
+	 * @return DialogField
 	 */
-	public DialogField createDialogField(IAttributeDescriptor attr) {
+	public DialogField createDialogField(IPropertyPageDescriptor attr) {
 		String type = attr.getValueType();
 		if (type == null || type.length() == 0) {
 			DialogField result = createTextDialogField(attr);
-			result.setLabelText(attr.getLabelString() + ":"); //$NON-NLS-1$
+			result.setLabelText(attr.getLabel()); //labelProvider???
 			return result;
 		}
-		type = type.toUpperCase();
+//		type = type.toUpperCase();
 
 		DialogField result = null;
-		IAttributeCellEditorFactory fac = (IAttributeCellEditorFactory) _factoryMap
+		ITagAttributeCellEditorFactory fac = (ITagAttributeCellEditorFactory) _factoryMap
 				.get(type);
 		if (fac != null) {
 			result = fac.createDialogField(attr);
 		}
 		if (result == null) {
 			for (int i = 0, size = _defaultFactories.size(); i < size; i++) {
-				result = ((IAttributeCellEditorFactory) _defaultFactories
+				result = ((ITagAttributeCellEditorFactory) _defaultFactories
 						.get(i)).createDialogField(attr);
 				if (result != null) {
 					break;
@@ -140,62 +141,62 @@
 		if (!(result instanceof ISupportTextValue)) {
 			result = createTextDialogField(attr);
 		}
-		result.setLabelText(attr.getLabelString() + ":"); //$NON-NLS-1$
+//		result.setLabelText(attr.getLabel() + ":"); //$NON-NLS-1$
 		return result;
 	}
 
 	/**
 	 * @param attr
-	 * @param context
-	 * @param ele
-	 * @return
+	 * @return DialogField
 	 */
-	public DialogField createTextDialogField(IAttributeDescriptor attr) {
+	public DialogField createTextDialogField(IPropertyPageDescriptor attr) {
 		StringDialogField field = new StringDialogField();
-		field.setLabelText(attr.getLabelString());
+		field.setLabelText(attr.getLabel());
 		field.setRequired(attr.isRequired());
 		field.setToolTip(attr.getDescription());
 		return field;
 	}
+//	/**
+//	 * This is NOT a product method. It should only be used by testing code.
+//	 * 
+//	 * @return String[] of value types
+//	 */
+//	public String[] getAllValueTypes() {
+//		//FIXME
+//		Set valueTypes = new HashSet();
+//		for (Iterator iter = _factoryMap.values().iterator(); iter.hasNext();) {
+//			ITagAttributeCellEditorFactory fac = (ITagAttributeCellEditorFactory) iter
+//					.next();
+//			String[] supportedTypes = fac.getSupportedValueTypes();
+//
+//			if (supportedTypes != null) {
+//				for (int i = 0; i < supportedTypes.length; i++) {
+//					valueTypes.add(supportedTypes[i]);
+//				}
+//			}
+//		}
+//		// add those default ones.
+//		Field[] fields = OLDIValueType.class.getFields();
+//		for (int i = 0; i < fields.length; i++) {
+//			int modifiers = fields[i].getModifiers();
+//			if (Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)) {
+//				if (fields[i].getType() == String.class) {
+//					try {
+//						valueTypes.add(fields[i].get(null));
+//					} catch (IllegalArgumentException ex) {
+//						// "Error in fields retrieving:"
+//						_log.info("CellEditorFactoryRegistry.Info.2", ex); //$NON-NLS-1$
+//					} catch (IllegalAccessException ex) {
+//						// "Error in fields retrieving:"
+//						_log.info("CellEditorFactoryRegistry.Info.3", ex); //$NON-NLS-1$
+//					}
+//				}
+//			}
+//		}
+//		String[] ret = new String[valueTypes.size()];
+//		valueTypes.toArray(ret);
+//		return ret;
+//	}
 
-	/**
-	 * This is NOT a product method. It should only be used by testing code.
-	 * 
-	 * @return
-	 */
-	public String[] getAllValueTypes() {
-		Set valueTypes = new HashSet();
-		for (Iterator iter = _factoryMap.values().iterator(); iter.hasNext();) {
-			IAttributeCellEditorFactory fac = (IAttributeCellEditorFactory) iter
-					.next();
-			String[] supportedTypes = fac.getSupportedValueTypes();
 
-			if (supportedTypes != null) {
-				for (int i = 0; i < supportedTypes.length; i++) {
-					valueTypes.add(supportedTypes[i]);
-				}
-			}
-		}
-		// add those default ones.
-		Field[] fields = IValueType.class.getFields();
-		for (int i = 0; i < fields.length; i++) {
-			int modifiers = fields[i].getModifiers();
-			if (Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)) {
-				if (fields[i].getType() == String.class) {
-					try {
-						valueTypes.add(fields[i].get(null));
-					} catch (IllegalArgumentException ex) {
-						// "Error in fields retrieving:"
-						_log.info("CellEditorFactoryRegistry.Info.2", ex); //$NON-NLS-1$
-					} catch (IllegalAccessException ex) {
-						// "Error in fields retrieving:"
-						_log.info("CellEditorFactoryRegistry.Info.3", ex); //$NON-NLS-1$
-					}
-				}
-			}
-		}
-		String[] ret = new String[valueTypes.size()];
-		valueTypes.toArray(ret);
-		return ret;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/ElementDescReader.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/ElementDescReader.java
index 7fc1765..b0c970a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/ElementDescReader.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/ElementDescReader.java
@@ -42,7 +42,9 @@
 import org.xml.sax.SAXException;
 
 /**
+ * Used by Sybase CMConfig model loader
  * @author mengbo
+ * @deprecated
  */
 public class ElementDescReader {
 	private static Logger _log = PDPlugin.getLogger(ElementDescReader.class);
@@ -55,6 +57,9 @@
 
 	private String[] _optimizedLocales = null;
 
+	/**
+	 * @param url
+	 */
 	public ElementDescReader(URL url) {
 		this._url = url;
 	}
@@ -62,8 +67,6 @@
 	/**
 	 * Read xml information and fill the map
 	 * 
-	 * @param stream
-	 *            xml file stream
 	 * @param map
 	 * @throws ParserConfigurationException
 	 * @throws FactoryConfigurationError
@@ -74,9 +77,18 @@
 			FactoryConfigurationError, SAXException, IOException {
 		DocumentBuilder builder = DocumentBuilderFactory.newInstance()
 				.newDocumentBuilder();
-		InputStream stream = this._url.openStream();
-		Document doc = builder.parse(stream);
-		ResourceUtils.ensureClosed(stream);
+		
+		InputStream stream = null; 
+		Document doc = null;
+		try
+		{
+			stream = this._url.openStream();
+			doc = builder.parse(stream);
+		}
+		finally
+		{
+			ResourceUtils.ensureClosed(stream);
+		}
 
 		Element taglib = doc.getDocumentElement();
 		String nameSpace = taglib.getAttribute("uri");
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/ElementDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/ElementDescriptor.java
index 8a87c00..91dd59c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/ElementDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/ElementDescriptor.java
@@ -18,6 +18,7 @@
 
 /**
  * @author mengbo
+ * @deprecated 
  */
 public class ElementDescriptor implements IElementDescriptor {
 	String _tagName;
@@ -72,14 +73,23 @@
 		return null;
 	}
 
+	/**
+	 * @param namespaceURI
+	 */
 	public void setNamespaceURI(String namespaceURI) {
 		this._namespaceURI = namespaceURI;
 	}
 
+	/**
+	 * @param tagName
+	 */
 	public void setTagName(String tagName) {
 		this._tagName = tagName;
 	}
 
+	/**
+	 * @param attrs
+	 */
 	public void setAttributeDescriptors(List attrs) {
 		if (attrs == null || attrs.isEmpty()) {
 			_attrs = new IAttributeDescriptor[0];
@@ -116,7 +126,16 @@
 		return _helpContextID;
 	}
 
+	/**
+	 * @param contextid
+	 */
 	public void setHelpContextID(String contextid) {
 		_helpContextID = contextid;
 	}
+	
+	public String toString(){
+		StringBuffer buf = new StringBuffer("ElementDescriptor: ");
+		buf.append(this.getTagName()).append("(").append(this.getNamespaceURI()).append(")");
+		return buf.toString();
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/LocaleFallback.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/LocaleFallback.java
index fa62e94..d99b6d5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/LocaleFallback.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/LocaleFallback.java
@@ -20,10 +20,15 @@
 /**
  * @author mengbo
  * @version 1.5
+ * @deprecated 
  */
 public class LocaleFallback {
 	private static Map map = new HashMap();
 
+	/**
+	 * @param locale
+	 * @return the list of local values
+	 */
 	public static synchronized String[] fallBack(Locale locale) {
 		if (map.get(locale) != null) {
 			return (String[]) map.get(locale);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/SimpleCMRegistry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/SimpleCMRegistry.java
index 6c198f4..5d4e73f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/SimpleCMRegistry.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/SimpleCMRegistry.java
@@ -13,6 +13,7 @@
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -27,12 +28,15 @@
  * @author mengbo
  * @version 1.5
  */
+@SuppressWarnings("deprecation")
 public class SimpleCMRegistry implements ICMRegistry {
 	String _uri;
 
 	Map _map = new HashMap();
 
 	/**
+	 * @param uri 
+	 * @param cmFileUrl 
 	 * @throws IOException
 	 * @throws SAXException
 	 * @throws FactoryConfigurationError
@@ -68,5 +72,12 @@
 		}
 		return null;
 	}
+	
+	/**
+	 * @return an unmodifiable map of the registry
+	 */
+	public Map getMap(){
+		return Collections.unmodifiableMap(_map);
+	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/XXXCellEditorFacRegistryReader.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/XXXCellEditorFacRegistryReader.java
new file mode 100644
index 0000000..b8cab33
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/XXXCellEditorFacRegistryReader.java
@@ -0,0 +1,82 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. 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:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.meta.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jst.pagedesigner.IJMTConstants;
+import org.eclipse.jst.pagedesigner.PDPlugin;
+import org.eclipse.jst.pagedesigner.meta.IAttributeCellEditorFactory;
+
+/**
+ * Read the registry to find out all the CellEditorFactory.
+ * 
+ * @author mengbo
+ * will be deleted
+ */
+@SuppressWarnings("deprecation")
+public class XXXCellEditorFacRegistryReader {
+	static IAttributeCellEditorFactory[] _factories = null;
+
+	/**
+	 * @return the factories
+	 */
+	public static synchronized IAttributeCellEditorFactory[] getAllFactories() {
+		if (_factories == null) {
+			_factories = readAllFactories();
+		}
+		return _factories;
+
+	}
+
+	private static IAttributeCellEditorFactory[] readAllFactories() {
+		List result = new ArrayList();
+		IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
+				.getExtensionPoint(PDPlugin.getPluginId(),
+						IJMTConstants.EXTENSION_POINT_PAGEDESIGNER);
+		IExtension[] extensions = extensionPoint.getExtensions();
+
+		for (int i = 0; i < extensions.length; i++) {
+			IExtension ext = extensions[i];
+			IConfigurationElement[] facs = ext.getConfigurationElements();
+
+			for (int j = 0; j < facs.length; j++) {
+				if (facs[j].getName().equals(
+						IJMTConstants.ATTRIBUTE_CELLEDITOR_FACTORY)) {
+//					facs[j].getAttribute("class");
+					Object obj;
+					try {
+						obj = facs[j].createExecutableExtension("class");
+
+						if (obj instanceof IAttributeCellEditorFactory) {
+							result.add(obj);
+						}
+					} catch (CoreException e) {
+						// ignore the exception
+						e.printStackTrace();
+					}
+				}
+			}
+		}
+		IAttributeCellEditorFactory[] ret = new IAttributeCellEditorFactory[result
+				.size()];
+		result.toArray(ret);
+		return ret;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/XXXCellEditorFactoryRegistry.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/XXXCellEditorFactoryRegistry.java
new file mode 100644
index 0000000..d55c586
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/XXXCellEditorFactoryRegistry.java
@@ -0,0 +1,293 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. 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:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.meta.internal;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StringDialogField;
+import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
+import org.eclipse.jst.pagedesigner.PDPlugin;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.meta.IAttributeCellEditorFactory;
+import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
+import org.eclipse.jst.pagedesigner.meta.OLDIValueType;
+import org.eclipse.jst.pagedesigner.properties.celleditors.OLDCellEditorFactory;
+import org.eclipse.swt.widgets.Composite;
+import org.w3c.dom.Element;
+
+/**
+ * CellEditorFactoryRegistry also read information from plugin.xml extension to
+ * allow other plugins to contribute new kinds of cell editors.
+ * 
+ * @author mengbo
+ * will be deleted
+ */
+@SuppressWarnings("deprecation")
+public class XXXCellEditorFactoryRegistry {
+	private static final Logger _log = PDPlugin
+			.getLogger(XXXCellEditorFactoryRegistry.class);
+
+	private static XXXCellEditorFactoryRegistry _instance;
+
+	private Map _factoryMap = new HashMap();
+
+	private List _defaultFactories = new ArrayList();
+
+	/**
+	 * @return the singleton registry instance
+	 */
+	public static XXXCellEditorFactoryRegistry getInstance() {
+		if (_instance == null) {
+			_instance = new XXXCellEditorFactoryRegistry();
+		}
+		return _instance;
+	}
+
+	private XXXCellEditorFactoryRegistry() {
+		IAttributeCellEditorFactory[] facs = XXXCellEditorFacRegistryReader
+				.getAllFactories();
+		if (facs != null) {
+			for (int i = 0; i < facs.length; i++) {
+				addCellEditorFactory(facs[i]);
+			}
+		}
+		addCellEditorFactory(new OLDCellEditorFactory());
+	}
+
+	/**
+	 * @param fac
+	 */
+	public void addCellEditorFactory(IAttributeCellEditorFactory fac) {
+		String[] types = fac.getSupportedValueTypes();
+		if (types == null || types.length == 0) {
+			_defaultFactories.add(fac);
+		} else {
+			for (int i = 0; i < types.length; i++) {
+				_factoryMap.put(types[i].toUpperCase(), fac);
+			}
+		}
+	}
+
+	/**
+	 * @param parent
+	 * @param attr
+	 * @param element
+	 * @return the cell editor
+	 */
+	public CellEditor createCellEditor(Composite parent,
+			IAttributeDescriptor attr, Element element) {
+		String type = attr.getValueType();
+		if (type == null || type.length() == 0)
+			return null;
+		type = type.toUpperCase();
+
+		CellEditor result = null;
+		IAttributeCellEditorFactory fac = (IAttributeCellEditorFactory) _factoryMap
+				.get(type);
+		if (fac != null) {
+			result = fac.createCellEditor(parent, attr, element);
+		}
+		if (result == null) {
+			for (int i = 0, size = _defaultFactories.size(); i < size; i++) {
+				result = ((IAttributeCellEditorFactory) _defaultFactories
+						.get(i)).createCellEditor(parent, attr, element);
+				if (result != null)
+					break;
+			}
+		}
+		return result;
+	}
+	
+	/**
+	 * @param parent
+	 * @param attr
+	 * @param element
+	 * @return the cell editor
+	 */
+	public CellEditor createCellEditor(Composite parent,
+			IPropertyPageDescriptor attr, Element element) {
+//		String type = attr.getValueType();
+//		if (type == null || type.length() == 0)
+//			return null;
+//		type = type.toUpperCase();
+
+		CellEditor result = null;
+	result = new TextCellEditor(parent);
+//		IAttributeCellEditorFactory fac = (IAttributeCellEditorFactory) _factoryMap
+//				.get(type);
+//		if (fac != null) {
+//			result = fac.createCellEditor(parent, attr, element);
+//		}
+//		if (result == null) {
+//			for (int i = 0, size = _defaultFactories.size(); i < size; i++) {
+//				result = ((IAttributeCellEditorFactory) _defaultFactories
+//						.get(i)).createCellEditor(parent, attr, element);
+//				if (result != null)
+//					break;
+//			}
+//		}
+		return result;
+	}
+
+	/**
+	 * @param attr
+	 * @return DialogField
+	 */
+	public DialogField createDialogField(IAttributeDescriptor attr) {
+		String type = attr.getValueType();
+		if (type == null || type.length() == 0) {
+			DialogField result = createTextDialogField(attr);
+			result.setLabelText(attr.getLabelString() + ":"); //$NON-NLS-1$
+			return result;
+		}
+		type = type.toUpperCase();
+
+		DialogField result = null;
+		IAttributeCellEditorFactory fac = (IAttributeCellEditorFactory) _factoryMap
+				.get(type);
+		if (fac != null) {
+			result = fac.createDialogField(attr);
+		}
+		if (result == null) {
+			for (int i = 0, size = _defaultFactories.size(); i < size; i++) {
+				result = ((IAttributeCellEditorFactory) _defaultFactories
+						.get(i)).createDialogField(attr);
+				if (result != null) {
+					break;
+				}
+			}
+		}
+		if (result == null) {
+			result = createTextDialogField(attr);
+		}
+		if (!(result instanceof ISupportTextValue)) {
+			result = createTextDialogField(attr);
+		}
+		result.setLabelText(attr.getLabelString() + ":"); //$NON-NLS-1$
+		return result;
+	}
+
+	/**
+	 * @param attr
+	 * @return the dialog field
+	 */
+	public DialogField createDialogField(IPropertyPageDescriptor attr) {
+		String type = attr.getValueType();
+		if (type == null || type.length() == 0) {
+			DialogField result = createTextDialogField(attr);
+			result.setLabelText(attr.getLabel()); //labelProvider???
+			return result;
+		}
+		type = type.toUpperCase();
+
+		DialogField result = null;
+//		IAttributeCellEditorFactory fac = (IAttributeCellEditorFactory) _factoryMap
+//				.get(type);
+//		if (fac != null) {
+//			result = fac.createDialogField(attr);
+//		}
+//		if (result == null) {
+//			for (int i = 0, size = _defaultFactories.size(); i < size; i++) {
+//				result = ((IAttributeCellEditorFactory) _defaultFactories
+//						.get(i)).createDialogField(attr);
+//				if (result != null) {
+//					break;
+//				}
+//			}
+//		}
+//		if (result == null) {
+			result = createTextDialogField(attr);
+//		}
+		if (!(result instanceof ISupportTextValue)) {
+			result = createTextDialogField(attr);
+		}
+//		result.setLabelText(attr.getLabel() + ":"); //$NON-NLS-1$
+		return result;
+	}
+	/**
+	 * @param attr
+	 * @return DialogField
+	 */
+	public DialogField createTextDialogField(IAttributeDescriptor attr) {
+		StringDialogField field = new StringDialogField();
+		field.setLabelText(attr.getLabelString());
+		field.setRequired(attr.isRequired());
+		field.setToolTip(attr.getDescription());
+		return field;
+	}
+
+	/**
+	 * @param attr
+	 * @return DialogField
+	 */
+	public DialogField createTextDialogField(IPropertyPageDescriptor attr) {
+		StringDialogField field = new StringDialogField();
+		field.setLabelText(attr.getLabel());
+		field.setRequired(attr.isRequired());
+		field.setToolTip(attr.getDescription());
+		return field;
+	}
+	/**
+	 * This is NOT a product method. It should only be used by testing code.
+	 * 
+	 * @return String[] of value types
+	 */
+	public String[] getAllValueTypes() {
+		Set valueTypes = new HashSet();
+		for (Iterator iter = _factoryMap.values().iterator(); iter.hasNext();) {
+			IAttributeCellEditorFactory fac = (IAttributeCellEditorFactory) iter
+					.next();
+			String[] supportedTypes = fac.getSupportedValueTypes();
+
+			if (supportedTypes != null) {
+				for (int i = 0; i < supportedTypes.length; i++) {
+					valueTypes.add(supportedTypes[i]);
+				}
+			}
+		}
+		// add those default ones.
+		Field[] fields = OLDIValueType.class.getFields();
+		for (int i = 0; i < fields.length; i++) {
+			int modifiers = fields[i].getModifiers();
+			if (Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)) {
+				if (fields[i].getType() == String.class) {
+					try {
+						valueTypes.add(fields[i].get(null));
+					} catch (IllegalArgumentException ex) {
+						// "Error in fields retrieving:"
+						_log.info("CellEditorFactoryRegistry.Info.2", ex); //$NON-NLS-1$
+					} catch (IllegalAccessException ex) {
+						// "Error in fields retrieving:"
+						_log.info("CellEditorFactoryRegistry.Info.3", ex); //$NON-NLS-1$
+					}
+				}
+			}
+		}
+		String[] ret = new String[valueTypes.size()];
+		valueTypes.toArray(ret);
+		return ret;
+	}
+
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/DefaultEditorCreator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/XXXDefaultEditorCreator.java
similarity index 81%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/DefaultEditorCreator.java
rename to jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/XXXDefaultEditorCreator.java
index 71fbc24..1facad9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/DefaultEditorCreator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/meta/internal/XXXDefaultEditorCreator.java
@@ -14,9 +14,10 @@
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
 import org.eclipse.jst.jsf.core.internal.tld.CMUtil;
-import org.eclipse.jst.pagedesigner.meta.EditorCreator;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
 import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
 import org.eclipse.jst.pagedesigner.meta.IBindingHandler;
+import org.eclipse.jst.pagedesigner.meta.XXXEditorCreator;
 import org.eclipse.jst.pagedesigner.properties.celleditors.CellEditorWrapper;
 import org.eclipse.jst.pagedesigner.ui.dialogfields.DialogFieldWrapper;
 import org.eclipse.swt.graphics.Image;
@@ -27,8 +28,10 @@
 /**
  * @author mengbo
  * @version 1.5
+ * will be deleted
  */
-public class DefaultEditorCreator extends EditorCreator {
+@SuppressWarnings("deprecation")
+public class XXXDefaultEditorCreator extends XXXEditorCreator {
 	static IAttributeDescriptor _staticAttr;
 
 	static IDOMElement _staticElement;
@@ -46,7 +49,7 @@
 	 */
 	public CellEditor createCellEditor(Composite parent,
 			IAttributeDescriptor attr, IDOMElement element) {
-		return CellEditorFactoryRegistry.getInstance().createCellEditor(parent,
+		return XXXCellEditorFactoryRegistry.getInstance().createCellEditor(parent,
 				attr, element);
 	}
 
@@ -56,8 +59,27 @@
 	 * @see org.eclipse.jst.pagedesigner.meta.EditorCreator#createDialogField(org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor)
 	 */
 	public DialogField createDialogField(IAttributeDescriptor attr) {
-		return CellEditorFactoryRegistry.getInstance().createDialogField(attr);
+		return XXXCellEditorFactoryRegistry.getInstance().createDialogField(attr);
 	}
+	
+	/**
+	 * @param attr
+	 * @return the dialog field
+	 */
+	public DialogField createDialogField(IPropertyPageDescriptor attr) {
+		return XXXCellEditorFactoryRegistry.getInstance().createDialogField(attr);
+	}
+	
+	
+
+//	/*
+//	 * (non-Javadoc)
+//	 * 
+//	 * @see org.eclipse.jst.pagedesigner.meta.EditorCreator#createDialogField(org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor)
+//	 */
+//	public DialogField createDialogField(IAttributeDescriptor attr) {
+//		return XXXCellEditorFactoryRegistry.getInstance().createDialogField(attr);
+//	}
 
 	/*
 	 * (non-Javadoc)
@@ -82,7 +104,7 @@
 		try {
 			// since "createWrappedCellEditor()" and "getBindingImage()" is
 			// called from the constructor of CellEditorWrapper, at that time,
-			// can't reference this DefaultEditorCreator and final fields yet,
+			// can't reference this XXXDefaultEditorCreator and final fields yet,
 			// so use static variable for it.
 			_staticAttr = attr;
 			_staticElement = element;
@@ -95,7 +117,7 @@
 				 * @see org.eclipse.jst.pagedesigner.properties.celleditors.CellEditorWrapper#createWrappedCellEditor(org.eclipse.swt.widgets.Composite)
 				 */
 				protected CellEditor createWrappedCellEditor(Composite cell) {
-					return EditorCreator.getInstance().createCellEditor(cell,
+					return XXXEditorCreator.getInstance().createCellEditor(cell,
 							_staticAttr, _staticElement);
 				}
 
@@ -149,7 +171,7 @@
 		try {
 			// since "createWrappedCellEditor()" and "getBindingImage()" is
 			// called from the constructor of CellEditorWrapper, at that time,
-			// can't reference this DefaultEditorCreator and final fields yet,
+			// can't reference this XXXDefaultEditorCreator and final fields yet,
 			// so use static variable for it.
 			_staticElement = element;
 			_staticHandler = handler;
@@ -217,10 +239,29 @@
 		return wrapper;
 	}
 
+
 	private String convertToString(Object value) {
 		if (value == null) {
 			return null;
 		}
         return value.toString();
 	}
+
+	@Override
+	public DialogField createDialogFieldWithWrapper(
+			IPropertyPageDescriptor attr, IBindingHandler handler1) {
+		final IBindingHandler handler = (handler1 == null ? getSystemDefaultBindingHandler()
+				: handler1);
+		DialogField field = createDialogField(attr);
+		// if (field instanceof StringButtonDialogField)
+		// {
+		// ((StringButtonDialogField) field).setButtonLabel("...");
+		// }
+		DialogFieldWrapper wrapper = new DialogFieldWrapper(field, handler
+				.getImage(), handler.getDisabledImage(), attr.getUri(), attr.getTagName(), attr,
+				handler);
+		wrapper.setDatabindingEnabled(true);
+
+		return wrapper;
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/CSSStyleAdapterFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/CSSStyleAdapterFactory.java
index 3e0eee9..1ba1fd0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/CSSStyleAdapterFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/CSSStyleAdapterFactory.java
@@ -43,7 +43,7 @@
 	}
 
 	/**
-	 * @return
+	 * @return the factory instance
 	 */
 	public static CSSStyleAdapterFactory getInstance() {
         // TODO: this 'singleton' is broken
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/EditProxyAdapter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/EditProxyAdapter.java
index 9cd7ff0..cac1252 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/EditProxyAdapter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/EditProxyAdapter.java
@@ -28,7 +28,7 @@
 	ElementEditPart _part;
 
 	/**
-	 * 
+	 * @param part 
 	 */
 	public EditProxyAdapter(ElementEditPart part) {
 		_part = part;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/ElementEditPart.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/ElementEditPart.java
index be35c7d..408d1d6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/ElementEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/ElementEditPart.java
@@ -133,8 +133,7 @@
 	}
 
 	/**
-	 * @param node
-	 * @return
+	 * @return the associated element edit
 	 */
 	public IElementEdit getElementEdit() {
 		// XXX: should we cache it?
@@ -186,16 +185,16 @@
 	 * @see org.eclipse.gef.editparts.AbstractEditPart#getModelChildren()
 	 */
 	protected List getModelChildren() {
-		List children = new ArrayList(_tagConverter.getChildModeList());
+		List children_ = new ArrayList(_tagConverter.getChildModeList());
         
         for (Iterator it = _tagConverter.getNonVisualChildren().iterator(); it.hasNext();)
         {
             Element nonVisualChild = (Element) it.next();
-            children.add(DTManager.getInstance().getTagConverter(nonVisualChild,
+            children_.add(DTManager.getInstance().getTagConverter(nonVisualChild,
                 IConverterFactory.MODE_DESIGNER,
                 this.getDestDocumentForDesign()));
         }
-        return children;
+        return children_;
 	}
 
 	/*
@@ -242,6 +241,7 @@
 
 	/**
 	 * called by the
+	 * @param recursive
 	 * 
 	 */
 	public void refreshModelChange(boolean recursive) {
@@ -261,6 +261,9 @@
 		refresh(false);
 	}
 
+	/**
+	 * @param recursive
+	 */
 	public void refresh(boolean recursive) {
 		if (!_tagConverter.isVisualByHTML()) {
 			_tagConverter.convertRefresh(null);
@@ -374,7 +377,8 @@
 	}
 
 	/**
-	 * @return
+	 * @return true if we are in range mode and this is in 
+	 * the selection range
 	 */
 	public boolean isRangeSelected() {
 		IHTMLGraphicalViewer viewer = (IHTMLGraphicalViewer) this.getViewer();
@@ -398,7 +402,7 @@
 	}
 
 	/**
-	 * @return
+	 * @return true if our model node can have direct text children
 	 */
 	public boolean canHaveDirectTextChild() {
 		return CMUtil.canHaveDirectTextChild(this._elementNode);
@@ -546,7 +550,7 @@
 	}
 
 	/**
-	 * @return
+	 * @return the associated tag converter
 	 */
 	public ITagConverter getTagConvert() {
 		return _tagConverter;
@@ -575,7 +579,7 @@
 	}
 
 	/**
-	 * @return
+	 * @return true this part's node has non whitespace child nodes
 	 */
 	public boolean haveNonWhitespaceTextChild() {
 		List children1 = this.getChildren();
@@ -600,6 +604,9 @@
         return _nonVisualElementBar;
     }
 
+    /**
+     * @return the element menu bar for this element
+     */
     public ElementMenuBar getElementMenuBar() {
         return getNonVisualElementBar();
     }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/HTMLEditPartsFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/HTMLEditPartsFactory.java
index ec44b37..66dd085 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/HTMLEditPartsFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/HTMLEditPartsFactory.java
@@ -25,6 +25,9 @@
 public class HTMLEditPartsFactory implements EditPartFactory {
 	private IDOMDocument _destDocument;
 
+	/**
+	 * @param destDoc
+	 */
 	public HTMLEditPartsFactory(IDOMDocument destDoc) {
 		this._destDocument = destDoc;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/NodeEditPart.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/NodeEditPart.java
index 8b122db..653ba15 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/NodeEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/NodeEditPart.java
@@ -56,6 +56,9 @@
 		this._destDocument = doc;
 	}
 
+	/**
+	 * @return to owner document of this part's model node
+	 */
 	public IDOMDocument getDestDocumentForDesign() {
 		if (this._destDocument == null) {
 			return (IDOMDocument) this.getIDOMNode().getOwnerDocument();
@@ -158,12 +161,15 @@
 	}
 
 	/**
-	 * @return
+	 * @return the model node as an IDOMNode
 	 */
 	public IDOMNode getIDOMNode() {
 		return ((IDOMNode) getModel());
 	}
 
+    /**
+     * @return the model node as a node
+     */
     public Node getDOMNode()
     {
         return ((Node)getModel());
@@ -189,7 +195,7 @@
 	 * if a EditPart don't support caret inside it, and don't can't have child
 	 * edit part, then we call it as a widget.
 	 * 
-	 * @return
+	 * @return true if this part represents a widget
 	 */
 	public boolean isWidget() {
 		return false; // child class must override.
@@ -199,30 +205,36 @@
 	 * whether this EditPart allow the selection range to have one edge in the
 	 * edit part and one edge outside the edit part.
 	 * 
-	 * @return
+	 * @return true if selection range across is allowed
 	 */
 	public boolean allowSelectionRangeAcross() {
 		return true;
 	}
 
 	/**
-	 * @return
+	 * @return true if this part is resizable
 	 */
 	public boolean isResizable() {
 		return false;
 	}
     
+    /**
+     * @return true if drag is active on this part
+     */
     public boolean isDragActive() {
         return _isDragActive;
     }
     
+    /**
+     * @param newValue
+     */
     public void setDragActive(boolean newValue)
     {
         _isDragActive = newValue;
     }
     
     /**
-     * @param defaultCursor
+     * @param mouseLocation
      * @return this edit part's cursor or null if this edit part
      * does not wish to specify a specific cursor (the default
      * should be used).  
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/NonVisualComponentEditPart.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/NonVisualComponentEditPart.java
index 1bc6b08..5ce56b4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/NonVisualComponentEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/NonVisualComponentEditPart.java
@@ -23,11 +23,16 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
+/**
+ * Represents a node that is non-visual in the runtime rendering
+ * but which may wish to have a meta-representation on the design canvas.
+ *
+ */
 public class NonVisualComponentEditPart extends NodeEditPart 
 {
     protected IFigure createFigure() 
     {
-        IFigure figure = new ImageFigure(getTagConverter().getVisualImage())
+        IFigure figure_ = new ImageFigure(getTagConverter().getVisualImage())
         {
 
             protected void paintFigure(Graphics graphics) {
@@ -42,8 +47,8 @@
             
         };
         
-        figure.setMinimumSize(new Dimension(0,0));
-        return figure;
+        figure_.setMinimumSize(new Dimension(0,0));
+        return figure_;
     }
 
     public void notifyChanged(INodeNotifier notifier, int eventType,
@@ -59,6 +64,9 @@
                 null);
     }
 
+    /**
+     * @return the tag converter
+     */
     protected ITagConverter getTagConverter()
     {
     	ITagConverter tagConverter = (ITagConverter)getModel();
@@ -69,6 +77,9 @@
     	return tagConverter;
     }
     
+    /**
+     * @return the host element for this edit part
+     */
     protected Element getModelElement()
     {
         return getTagConverter().getHostElement();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/Refresher.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/Refresher.java
index 3f6f120..67e62f2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/Refresher.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/Refresher.java
@@ -13,7 +13,7 @@
 
 import org.eclipse.gef.EditPart;
 import org.eclipse.jst.pagedesigner.css2.ICSSStyle;
-import org.eclipse.jst.pagedesigner.viewer.HTMLGraphicalViewer;
+import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
 import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
@@ -70,7 +70,7 @@
 
 			part = (EditPart) node.getAdapterFor(EditPart.class);
 			if (part != null) {
-				((HTMLGraphicalViewer) part.getViewer()).clearSelectionRange();
+				((IHTMLGraphicalViewer) part.getViewer()).clearSelectionRange();
 			}
 		}
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/RefresherFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/RefresherFactory.java
index 04aa76e..bb9c599 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/RefresherFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/RefresherFactory.java
@@ -20,7 +20,7 @@
  * @version 1.5
  */
 public class RefresherFactory extends AbstractAdapterFactory {
-	Refresher refresher = new Refresher();
+	private final Refresher refresher = new Refresher();
 
 	RefresherFactory() {
 		super(Refresher.class, true);
@@ -36,6 +36,9 @@
 
 	static RefresherFactory _instance = new RefresherFactory();
 
+	/**
+	 * @return the factory singleton
+	 */
 	public static RefresherFactory getInstance() {
 		return _instance;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/TextEditPart.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/TextEditPart.java
index dc4ec9d..60377b5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/TextEditPart.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/parts/TextEditPart.java
@@ -96,10 +96,9 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.pagedesigner.css2.provider.ICSSTextProvider#getCSSStyle()
+
+	/**
+	 * @return the associated css style for this text node
 	 */
 	public ICSSStyle getCSSStyle() {
 		IFigure figure1 = this.getFigure();
@@ -124,7 +123,7 @@
 	 * This method return the really value that is going to be presented to
 	 * user. EditPartPosition's offset is referencing this value.
 	 * 
-	 * @return
+	 * @return the text data
 	 * @see org.eclipse.jst.pagedesigner.viewer.DesignPosition
 	 */
 	public String getTextData() {
@@ -139,7 +138,7 @@
 	/**
 	 * check what part of this text node is in the range selection.
 	 * 
-	 * @return
+	 * @return text node ranges
 	 */
 	public int[] getSelectedRange() {
 		IHTMLGraphicalViewer viewer = (IHTMLGraphicalViewer) this.getViewer();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/PageExpressionContext.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/PageExpressionContext.java
index 9e26c21..83d190d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/PageExpressionContext.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/PageExpressionContext.java
@@ -69,22 +69,38 @@
 		_prj = prj;
 	}
 
+	/**
+	 * reset the context.
+	 */
 	public static void reset() {
 		_current = null;
 	}
 
+	/**
+	 * Initialize the current context
+	 * @param prj
+	 */
 	public static void initialize(IProject prj) {
 		_current = new PageExpressionContext(prj);
 	}
 
+	/**
+	 * @return the current context
+	 */
 	public static PageExpressionContext getCurrent() {
 		return _current;
 	}
 
+	/**
+	 * @param provider
+	 */
 	public void pushPageVarProvider(IPageVariablesProvider provider) {
 		_pageVarProviders.add(provider);
 	}
 
+	/**
+	 * @param provider
+	 */
 	public void popPageVarProvider(IPageVariablesProvider provider) {
 		try {
 			_pageVarProviders.remove(_pageVarProviders.size() - 1);
@@ -99,12 +115,12 @@
 	 * handles
 	 * 
 	 * @param expression
-	 * @param pageVars
-	 * @param jspFile
+	 * @param expectedClass 
 	 * @param options
 	 *            XXX: not used today. In the future, we may support things like
 	 *            locale in options
-	 * @return
+	 * @return the result of evaluating the expression
+	 * @throws ELException 
 	 */
 	public Object evaluateExpression(String expression, Class expectedClass,
 			Map options) throws ELException {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/WindowsIEBrowser.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/WindowsIEBrowser.java
index 6bf32d5..2901f70 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/WindowsIEBrowser.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/preview/WindowsIEBrowser.java
@@ -18,26 +18,37 @@
 import org.eclipse.swt.browser.ProgressListener;
 import org.eclipse.swt.widgets.Composite;
 
+/**
+ * Models the windows IE browser for preview
+ *
+ */
 public class WindowsIEBrowser implements ProgressListener {
 	private Browser _browser;
 
-	private File _file;
-
+	/**
+	 * @param composite
+	 * @param i
+	 */
 	public void create(Composite composite, int i) {
 		_browser = new Browser(composite, i);
 		_browser.addProgressListener(this);
 	}
 
+	/**
+	 * @param file
+	 */
 	public synchronized void loadFile(File file) {
 		if (_browser == null) {
 			return;
 		}
-        _file = file;
         String s = "file:" + file.getAbsolutePath();
         _browser.setUrl(s);
         return;
 	}
 
+	/**
+	 * dispose the instance
+	 */
 	public void dispose() {
 		if (_browser == null) {
 			return;
@@ -51,16 +62,12 @@
         // do nothing
 	}
 
-	public synchronized void completed(ProgressEvent progressevent) {
-		if (_file != null) {
-			// XXX: don't delete, for debug purpose.
-			// _file.delete();
-			// _file = null;
-		}
+	public void completed(ProgressEvent progressevent) {
+	    // do nothing
 	}
 
 	/**
-	 * 
+	 * @return the underlying swt Browser instance
 	 */
 	public Browser getBrowser() {
 		return _browser;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AllPropertySection.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AllPropertySection.java
index f69e35e..de3441a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AllPropertySection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AllPropertySection.java
@@ -17,14 +17,14 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.views.properties.IPropertySourceProvider;
-import org.eclipse.wst.common.ui.properties.internal.provisional.AbstractPropertySection;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
 import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 
 /**
- * mainly copied from AdvancedPropertySection. But extend it to allow setting
+ * Mainly copied from AdvancedPropertySection. But extend it to allow setting
  * PropertySourceProvider.
  * 
  * @author mengbo
@@ -32,12 +32,21 @@
 public class AllPropertySection extends AbstractPropertySection {
 	// FIXME: workaround the eclipse properties view limitation of sorting
 	// category.
-	private MyPropertySheetPage page;
+	private AttributePropertySheetPage page;
 
+	/**
+	 * IPropertySourceProvider for this section
+	 */
 	protected IPropertySourceProvider _provider;
 
+	/**
+	 * selected tag IDOMElement 
+	 */
 	protected IDOMElement _element;
 
+	/**
+	 * The INodeAdapter to use for notification of model change
+	 */
 	protected INodeAdapter _adapter = new INodeAdapter() {
 		public boolean isAdapterForType(Object type) {
 			return false;
@@ -50,22 +59,21 @@
 	};
 
 	/**
-	 * 
+	 * Constructor
 	 */
 	public AllPropertySection() {
 		this.setPropertySourceProvider(new AttributePropertySourceProvider());
 	}
 
-	/**
-	 * @see org.eclipse.wst.common.ui.properties.ITabbedPropertySection#createControls(org.eclipse.swt.widgets.Composite,
-	 *      org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage)
-	 */
+	@Override
 	public void createControls(Composite parent,
 			TabbedPropertySheetPage tabbedPropertySheetPage) {
 		super.createControls(parent, tabbedPropertySheetPage);
+		
+	
 		Composite composite = getWidgetFactory()
 				.createFlatFormComposite(parent);
-		page = new MyPropertySheetPage();
+		page = new AttributePropertySheetPage();
 		page.init(tabbedPropertySheetPage.getSite());
 
 		if (_provider != null) {
@@ -83,17 +91,14 @@
 		page.getControl().setLayoutData(data);
 	}
 
-	/**
-	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISection#setInput(org.eclipse.ui.IWorkbenchPart,
-	 *      org.eclipse.jface.viewers.ISelection)
-	 */
+	@Override
 	public void setInput(IWorkbenchPart part, ISelection selection) {
-		super.setInput(part, selection);
-		page.selectionChanged(part, selection);
-
 		IDOMElement newEle = (IDOMElement) DesignerPropertyTool.getElement(
 				part, selection);
+
 		if (_element != newEle) {
+			super.setInput(part, selection);
+			page.selectionChanged(part, selection);
 			if (_element != null) {
 				_element.removeAdapter(_adapter);
 			}
@@ -104,9 +109,7 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.wst.common.ui.properties.view.ISection#dispose()
-	 */
+	@Override
 	public void dispose() {
 		super.dispose();
 
@@ -119,24 +122,26 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.wst.common.ui.properties.view.ISection#refresh()
-	 */
+	@Override
 	public void refresh() {
 		page.refresh();
 	}
 
-	/**
-	 * @see org.eclipse.wst.common.ui.properties.view.ISection#shouldUseExtraSpace()
-	 */
+	@Override
 	public boolean shouldUseExtraSpace() {
 		return true;
 	}
 
+	/**
+	 * Set provider into tabbedPropertiesPage
+	 * @param provider
+	 */
 	public void setPropertySourceProvider(IPropertySourceProvider provider) {
 		_provider = provider;
-		if (page != null)
+		if (page != null){
 			page.setPropertySourceProvider(_provider);
+
+		}
 	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/MyPropertySheetPage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySheetPage.java
similarity index 66%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/MyPropertySheetPage.java
rename to jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySheetPage.java
index 439cb4b..9b236f9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/MyPropertySheetPage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySheetPage.java
@@ -11,10 +11,7 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.properties;
 
-import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.meta.internal.CategoryNameComparator;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.views.properties.PropertySheetPage;
 import org.eclipse.ui.views.properties.PropertySheetSorter;
 
@@ -25,7 +22,17 @@
  * @author mengbo
  * @version 1.5
  */
-public class MyPropertySheetPage extends PropertySheetPage {
+public class AttributePropertySheetPage extends PropertySheetPage {
+//	TODO: add actions
+//	public void makeContributions(IMenuManager menuManager,
+//			IToolBarManager toolBarManager, IStatusLineManager statusLineManager) {
+//		super.makeContributions(menuManager, toolBarManager, statusLineManager);
+//		//add actions here
+//			hide/show all categories
+//			collapse
+//			remove
+//	}
+
 	/**
 	 * Use my sorter to sort the category name. Only override the
 	 * compareCategories method.
@@ -40,14 +47,17 @@
 		}
 	}
 
-	public MyPropertySheetPage() {
+	/**
+	 * Constructor
+	 */
+	public AttributePropertySheetPage() {
 		super();
 		setSorter(new MySorter());
 	}
 
-	public void createControl(Composite parent) {
-		super.createControl(parent);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
-				PDPlugin.getResourceString("MyPropertySheetPage.help.id"));
-	}
+//	public void createControl(Composite parent) {
+//		super.createControl(parent);
+////		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
+////				PDPlugin.getResourceString("MyPropertySheetPage.help.id"));
+//	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySource.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySource.java
index 3979b46..2f128d1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySource.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySource.java
@@ -12,21 +12,24 @@
 package org.eclipse.jst.pagedesigner.properties;
 
 import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import org.eclipse.gef.commands.Command;
-import org.eclipse.jst.jsf.core.internal.tld.CMUtil;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledProcessingFactory;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.commands.single.ChangeAttributeCommand;
-import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
-import org.eclipse.jst.pagedesigner.meta.ICMRegistry;
-import org.eclipse.jst.pagedesigner.meta.IElementDescriptor;
-import org.eclipse.jst.pagedesigner.meta.internal.CMRegistry;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertySource;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.w3c.dom.Element;
 
@@ -39,9 +42,50 @@
 
 	private IPropertySource _innerSource;
 
+	private Entity _tagEntity;
+
+	private IStructuredDocumentContext _context;
+
+	private IPropertyDescriptor[] _descriptors;
+
+	/**
+	 * Constructor
+	 * @param ele
+	 * @param source
+	 */
 	public AttributePropertySource(Element ele, IPropertySource source) {
 		_element = (IDOMElement) ele;
 		_innerSource = source;
+		_tagEntity = getTagEntity();
+	}
+
+	private Entity getTagEntity() {
+		_context = 
+				IStructuredDocumentContextFactory.INSTANCE.getContext(_element.getStructuredDocument(), _element);
+		if (_context == null) 
+			return null;
+		
+		IWorkspaceContextResolver wsresolver = 
+				IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(_context);
+		if (wsresolver == null) 
+			return null;
+		
+		ITaglibContextResolver resolver = 
+				IStructuredDocumentContextResolverFactory.INSTANCE.getTaglibContextResolver(_context);
+		if (resolver == null) return null;
+		
+		String uri = resolver.getTagURIForNodeName(_element);
+		
+		//TODO: make below better
+		if (uri == null){
+			if (_element.getNamespaceURI() != null && _element.getNamespaceURI().equals("http://java.sun.com/JSP/Page")) //$NON-NLS-1$
+				uri = "JSP11"; //$NON-NLS-1$
+			else
+				uri = "HTML"; //$NON-NLS-1$
+		}
+		ITaglibDomainMetaDataModelContext domainContext = 
+				TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(wsresolver.getProject(), uri);
+		return TaglibDomainMetaDataQueryHelper.getEntity(domainContext, _element.getLocalName());		
 	}
 
 	/*
@@ -116,66 +160,59 @@
 	 * the major job of this wrapper is to provide
 	 */
 	public IPropertyDescriptor[] getPropertyDescriptors() {
-		IElementDescriptor elementDescriptor = getElementDescriptor();
-		List result = new ArrayList();
-
-		if (elementDescriptor == null) {
-			IPropertyDescriptor[] original = _innerSource
-					.getPropertyDescriptors();
-			for (int i = 0; i < original.length; i++) {
-				result
-						.add(new PropertyDescriptorWrapper(_element,
-								original[i]));
-			}
-		} else {
-			// put the inner property descriptors into a map.
-			Map map = new HashMap();
-			IPropertyDescriptor[] descs = _innerSource.getPropertyDescriptors();
-			if (descs != null) {
-				for (int i = 0; i < descs.length; i++) {
-					map.put(descs[i].getId(), descs[i]);
+		if (_descriptors == null) {
+			List result = new ArrayList();
+	
+				IPropertyDescriptor[] descs = _innerSource.getPropertyDescriptors();
+				if (descs != null) {
+					for (int i = 0; i < descs.length; i++) {
+						IPropertyDescriptor pd = getAttrPropertyDescriptor((String)descs[i].getId());
+						if (pd != null)
+							result.add(new PropertyDescriptorWrapper(
+									_element,
+									pd));//, 
+									//getStatusLineManager()));
+						else {
+							if (descs[i] instanceof PropertyDescriptor)
+								((PropertyDescriptor)descs[i]).setCategory(ITabbedPropertiesConstants.OTHER_CATEGORY);
+							result.add(new PropertyDescriptorWrapper(
+									_element, 
+									descs[i]));//, 
+									//getStatusLineManager()));
+						}
+							
+					}
 				}
-			}
-
-			IAttributeDescriptor[] attrs = elementDescriptor
-					.getAttributeDescriptors();
-			if (attrs != null) {
-				for (int i = 0; i < attrs.length; i++) {
-					IPropertyDescriptor desc = (IPropertyDescriptor) map
-							.remove(attrs[i].getAttributeName());
-					result.add(new AttributePropertyDescriptor(_element,
-							attrs[i], desc));
-				}
-			}
-			// ok, we have handled all attributes declared in ElementDescriptor,
-			// let's see the remaining
-			for (Iterator iter = map.values().iterator(); iter.hasNext();) {
-				IPropertyDescriptor desc = (IPropertyDescriptor) iter.next();
-				IAttributeDescriptor attr = findReferencedAttribute(
-						elementDescriptor, desc);
-				if (attr != null) {
-					result.add(new AttributePropertyDescriptor(_element, attr,
-							desc));
-				} else {
-					result.add(new PropertyDescriptorWrapper(
-							_element, desc));
-				}
-			}
+	
+			_descriptors = new IPropertyDescriptor[result.size()];
+			result.toArray(_descriptors);
+			
 		}
-		IPropertyDescriptor[] ret = new IPropertyDescriptor[result.size()];
-		result.toArray(ret);
-		return ret;
+		return _descriptors;
 	}
 
-	private IAttributeDescriptor findReferencedAttribute(
-			IElementDescriptor elementDescriptor, IPropertyDescriptor desc) {
+//	private IAttributeDescriptor findReferencedAttribute(
+//			IElementDescriptor elementDescriptor, IPropertyDescriptor desc) {
+//		return null;
+//	}
+
+//	private IElementDescriptor getElementDescriptor() {
+//		ICMRegistry registry = CMRegistry.getInstance();
+//		String uri = CMUtil.getElementNamespaceURI(_element);
+//		return registry.getElementDescriptor(uri, _element.getLocalName());
+//	}
+
+	private IPropertyDescriptor getAttrPropertyDescriptor(String attrName){
+		Entity attrEntity = TaglibDomainMetaDataQueryHelper.getEntity(_tagEntity, attrName);
+		List ppds = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(IPropertyPageDescriptor.class, _context, attrEntity);
+		if (ppds.size() > 0)
+			return (IPropertyDescriptor)((IPropertyPageDescriptor)ppds.get(0)).getAdapter(IPropertyDescriptor.class);
+		
 		return null;
+			
 	}
-
-	private IElementDescriptor getElementDescriptor() {
-		ICMRegistry registry = CMRegistry.getInstance();
-		String uri = CMUtil.getElementNamespaceURI(_element);
-		return registry.getElementDescriptor(uri, _element.getLocalName());
-	}
-
+	
+//	private IStatusLineManager getStatusLineManager() {
+//		_page.getSite().getActionBars().getStatusLineManager();
+//	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySourceProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySourceProvider.java
index bdaa011..086072b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySourceProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertySourceProvider.java
@@ -21,15 +21,14 @@
  * @author mengbo
  */
 public class AttributePropertySourceProvider implements IPropertySourceProvider {
+
+	/**
+	 * Constructor
+	 */
 	public AttributePropertySourceProvider() {
-        // do nothing?
+		//
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.views.properties.IPropertySourceProvider#getPropertySource(java.lang.Object)
-	 */
 	public IPropertySource getPropertySource(Object object) {
 		Element model = null;
 		IPropertySource source = null;
@@ -42,7 +41,7 @@
 			}
 		}
 		if (source != null) {
-			return new AttributePropertySource(model, source);
+			return new AttributePropertySource( model, source);
 		}
 		return source;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/BaseCustomSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/BaseCustomSection.java
index d77d4ed..db8742d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/BaseCustomSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/BaseCustomSection.java
@@ -24,8 +24,8 @@
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.AbstractPropertySection;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
 import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
@@ -36,15 +36,24 @@
  */
 public abstract class BaseCustomSection extends AbstractPropertySection {
 
-	public static final Status OKSTATUS = new Status(IStatus.OK, PDPlugin
-			.getPluginId(), 0, "", null);
+	/**
+	 * Status that all is OK
+	 */
+	protected static final Status OKSTATUS = new Status(IStatus.OK, PDPlugin
+			.getPluginId(), 0, "", null); //$NON-NLS-1$
 
-	private DesignerTabbedPropertySheetPage _propertySheetPage;
+	private WPETabbedPropertySheetPage _propertySheetPage;
 
 	private boolean _visible = false;
 
+	/**
+	 * the tag IDOMElement
+	 */
 	protected IDOMElement _element;
 
+	/**
+	 * the INodeAdapter used to receive notifications of model updates
+	 */
 	protected INodeAdapter _adapter = new INodeAdapter() {
 		public boolean isAdapterForType(Object type) {
 			return false;
@@ -72,6 +81,16 @@
 		}
 	}
 
+	/**
+	 * Method adapter will call when element has changed
+	 * 
+	 * @param notifier
+	 * @param eventType
+	 * @param changedFeature
+	 * @param oldValue
+	 * @param newValue
+	 * @param pos
+	 */
 	protected abstract void notifyChanged(INodeNotifier notifier,
 			int eventType, Object changedFeature, Object oldValue,
 			Object newValue, int pos);
@@ -79,7 +98,7 @@
 	public void createControls(Composite parent,
 			TabbedPropertySheetPage aTabbedPropertySheetPage) {
 		super.createControls(parent, aTabbedPropertySheetPage);
-		_propertySheetPage = (DesignerTabbedPropertySheetPage) aTabbedPropertySheetPage;
+		_propertySheetPage = (WPETabbedPropertySheetPage) aTabbedPropertySheetPage;
 	}
 
 	/**
@@ -88,7 +107,7 @@
 	 * case, we need do a total refresh.
 	 * 
 	 */
-	public void refreshPropertySheetPage() {
+	protected void refreshPropertySheetPage() {
 		if (_propertySheetPage != null) {
 			IWorkbenchPart part = getPart();
 			if (part != null) {
@@ -97,16 +116,23 @@
 				_propertySheetPage.selectionChanged(part, sel);
 			} else {
 				// XXX: will else happen?
-				System.out.println("AbstractCustomSection --> What to do?");
+				System.out.println("AbstractCustomSection --> What to do?"); //$NON-NLS-1$
 			}
 		}
 	}
 
-	public void gotoNode(Node node) {
+	/**
+	 * Change selection
+	 * @param node
+	 */
+	protected void gotoNode(Node node) {
 		_propertySheetPage.internalChangeSelection(node, node);
 	}
 
-	public IStatusLineManager getStatusLineManager() {
+	/**
+	 * @return IStatusLineManager to use for the property sheet page
+	 */
+	protected IStatusLineManager getStatusLineManager() {
 		if (_propertySheetPage != null) {
 			IActionBars bar = _propertySheetPage.getSite().getActionBars();
 			if (bar != null) {
@@ -116,7 +142,10 @@
 		return null;
 	}
 
-	public void applyStatus(IStatus[] status) {
+	/**
+	 * @param status to display on status line
+	 */
+	protected void applyStatus(IStatus[] status) {
 		if (!_visible) {
 			return;
 		}
@@ -140,14 +169,21 @@
 		}
 	}
 
-	public void setErrorMessage(String message) {
+	/**
+	 * @param message
+	 */
+	protected void setErrorMessage(String message) {
 		IStatusLineManager s = getStatusLineManager();
 		if (s != null) {
 			s.setErrorMessage(message);
 		}
 	}
 
-	public Status createErrorStatus(String message) {
+	/**
+	 * @param message
+	 * @return Status
+	 */
+	protected Status createErrorStatus(String message) {
 		return new Status(IStatus.ERROR, PDPlugin.getPluginId(), 0, message,
 				null);
 	}
@@ -155,15 +191,40 @@
 	public void aboutToBeHidden() {
 		applyStatus(null);
 		_visible = false;
+//		IDOMElement newEle = (IDOMElement) DesignerPropertyTool.getElement(
+//				part, selection);
+//		if (_element != newEle) {
+			if (_element != null) {
+				_element.removeAdapter(_adapter);
+			}
+//			_element = newEle;
+//			if (_element != null) {
+//				_element.addAdapter(_adapter);
+//			}
+//		}
 		super.aboutToBeHidden();
 	}
 
 	public void aboutToBeShown() {
 		super.aboutToBeShown();
+//		IDOMElement newEle = (IDOMElement) DesignerPropertyTool.getElement(
+//				part, selection);
+//		if (_element != newEle) {
+//			if (_element != null) {
+//				_element.removeAdapter(_adapter);
+//			}
+//			_element = newEle;
+			if (_element != null) {
+				_element.addAdapter(_adapter);
+			}
+//		}
 		_visible = true;
 	}
 
-	public IProject getProject() {
+	/**
+	 * @return IProject for the WPE editing instance
+	 */
+	protected IProject getProject() {
 		if (_propertySheetPage != null) {
 			IEditorInput input = _propertySheetPage.getEditor()
 					.getEditorInput();
@@ -181,7 +242,10 @@
 		}
 	}
 
-	public IFile getFile() {
+	/**
+	 * @return IFile for WPE editing instance
+	 */
+	protected IFile getFile() {
 		if (_propertySheetPage != null) {
 			IEditorInput input = _propertySheetPage.getEditor()
 					.getEditorInput();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/DesignerPropertyTool.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/DesignerPropertyTool.java
index 3a209fb..d32d534 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/DesignerPropertyTool.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/DesignerPropertyTool.java
@@ -40,7 +40,6 @@
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap;
 import org.eclipse.wst.xml.core.internal.contentmodel.CMNode;
 import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery;
-import org.eclipse.wst.xml.core.internal.document.ElementImpl;
 import org.eclipse.wst.xml.core.internal.modelquery.ModelQueryUtil;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
 import org.w3c.dom.Attr;
@@ -56,6 +55,12 @@
  * @author mengbo
  */
 public class DesignerPropertyTool {
+	
+	/**
+	 * @param fNode
+	 * @param attributeDesc
+	 * @return attribute value
+	 */
 	public static String getAttributeValue(Element fNode, CMNode attributeDesc) {
 		if (attributeDesc == null) {
 			return ""; //$NON-NLS-1$
@@ -75,19 +80,29 @@
 		return returnedValue;
 	}
 
-	public static Object[] getElementReferedAttributes(Element fNode,
-			String[] filter) {
-		List result = new ArrayList();
-		CMNamedNodeMap cmnnm = getElementDeclaredAttributes(fNode);
-		for (int i = 0, n = cmnnm.getLength(); i < n; i++) {
-			String name = cmnnm.item(i).getNodeName();
-			if (Arrays.asList(filter).contains(name)) {
-				result.add(cmnnm.item(i));
-			}
-		}
-		return result.toArray(new CMNode[result.size()]);
-	}
+//	/**
+//	 * @param fNode
+//	 * @param filter
+//	 * @return array of attributes as objects
+//   * (unused)	
+//	 */
+//	public static Object[] getElementReferedAttributes(Element fNode,
+//			String[] filter) {
+//		List result = new ArrayList();
+//		CMNamedNodeMap cmnnm = getElementDeclaredAttributes(fNode);
+//		for (int i = 0, n = cmnnm.getLength(); i < n; i++) {
+//			String name = cmnnm.item(i).getNodeName();
+//			if (Arrays.asList(filter).contains(name)) {
+//				result.add(cmnnm.item(i));
+//			}
+//		}
+//		return result.toArray(new CMNode[result.size()]);
+//	}
 
+	/**
+	 * @param fNode
+	 * @return CMNamedNodeMap
+	 */
 	public static CMNamedNodeMap getElementDeclaredAttributes(Node fNode) {
 		IStructuredModel structModel = null;
 		if (fNode instanceof IDOMNode) {
@@ -118,13 +133,15 @@
 	 * (EditPart) 4. DesignRange we want to normalize it to only #2. If the node
 	 * is ATTR or TEXT/CDATA_SECTION, will use it's parent node.
 	 * 
-	 * @param part
+	 * @param selectingPart
 	 * @param selection
+	 * @param htmlEditor
 	 * @return null if can't normalize.
 	 */
 	public static Node normalizeSelectionToElement(
 			IWorkbenchPart selectingPart, ISelection selection,
-			HTMLEditor _htmlEditor) {
+			HTMLEditor htmlEditor) {
+		
 		Node node = null;
 		if (selectingPart instanceof HTMLEditor) {
 			IEditorPart part = ((HTMLEditor) selectingPart).getActiveEditor();
@@ -155,7 +172,7 @@
 							.getControl().isFocusControl()) {
 				node = SelectionHelper.toNode((IStructuredSelection) selection);
 				if (node == null) {
-					node = _htmlEditor.getDOMDocument();
+					node = htmlEditor.getDOMDocument();
 				}
 			}
 		}
@@ -163,104 +180,10 @@
 		return node;
 	}
 
-	// /**
-	// * the selection could be different kinds of selection, including:
-	// * 1. ITextSelection
-	// * 2. IStructuredSelection (Node)
-	// * 3. IStructuredSelection (EditPart)
-	// * 4. DesignRange
-	// * we want to normalize it to only #2 and #4.
-	// *
-	// * @param part
-	// * @param selection
-	// * @return null if can't normalize.
-	// */
-	// public static ISelection normalizeSelection(IWorkbenchPart selectingPart,
-	// ISelection selection)
-	// {
-	// // On Attr nodes, select the owner Element. On Text nodes, select the
-	// parent Element.
-	// ISelection preferredSelection = null;
-	// if (selection instanceof ITextSelection)
-	// {
-	// // FIXME: currently always normalize to a single node. should also
-	// consider change into DesignRange
-	// // on text selection, find the appropriate Node
-	// ITextSelection textSel = (ITextSelection) selection;
-	// IStructuredModel model = null;
-	// if (selectingPart instanceof HTMLEditor)
-	// {
-	// model = ((HTMLEditor) selectingPart).getModel();
-	//
-	// Object inode = model.getIndexedRegion(textSel.getOffset());
-	// if (inode instanceof Node)
-	// {
-	// Node node = (Node) inode;
-	// // replace Attribute Node with its owner
-	// if (node.getNodeType() == Node.ATTRIBUTE_NODE)
-	// inode = ((Attr) node).getOwnerElement();
-	// // replace Text Node with its parent
-	// else if ((node.getNodeType() == Node.TEXT_NODE || (node.getNodeType() ==
-	// Node.CDATA_SECTION_NODE)) && node.getParentNode() != null)
-	// {
-	// inode = node.getParentNode();
-	// }
-	// }
-	// if (inode != null)
-	// {
-	// return new StructuredSelection(inode);
-	// }
-	// else
-	// {
-	// return null;
-	// }
-	// }
-	// else
-	// {
-	// return null;
-	// }
-	// }
-	// else if (selection instanceof IStructuredSelection)
-	// {
-	// if (((IStructuredSelection) selection).isEmpty())
-	// {
-	// return null;
-	// }
-	//
-	// IStructuredSelection structuredSel = (IStructuredSelection) selection;
-	// List inputList = new ArrayList(structuredSel.size());
-	// for (Iterator iter = structuredSel.iterator(); iter.hasNext();)
-	// {
-	// Object inode = iter.next();
-	// if (inode instanceof NodeEditPart)
-	// {
-	// inode = ((NodeEditPart) inode).getModel();
-	// }
-	//
-	// if (inode instanceof Node)
-	// {
-	// inputList.add(inode);
-	// }
-	// }
-	// if (inputList.isEmpty())
-	// {
-	// return null;
-	// }
-	// else
-	// {
-	// return new StructuredSelection(inputList);
-	// }
-	// }
-	// else if (selection instanceof DesignRange)
-	// {
-	// return selection;
-	// }
-	// else
-	// {
-	// return null;
-	// }
-	// }
-
+	/**
+	 * @param node as Object
+	 * @return element 
+	 */
 	public static Element getElementNode(Object node) {
 		Object model;
 		Element element = null;
@@ -281,6 +204,11 @@
 		return element;
 	}
 
+	/**
+	 * @param element
+	 * @param filter
+	 * @return list of attribute names
+	 */
 	public static List getNameList(Element element, String[] filter) {
 		List result = new ArrayList();
 		CMNamedNodeMap attributes = getElementDeclaredAttributes(element);
@@ -297,7 +225,7 @@
 	/**
 	 * @param selection
 	 *            should be a normalized selection
-	 * @return
+	 * @return node
 	 */
 	public static Node getCommonParent(ISelection selection) {
 		if (selection instanceof IStructuredSelection) {
@@ -319,7 +247,7 @@
 	 * 
 	 * @param selectingPart
 	 * @param selection
-	 * @return
+	 * @return element
 	 */
 	public static Element getElement(IWorkbenchPart selectingPart,
 			ISelection selection) {
@@ -355,6 +283,11 @@
 	// logger.debug("----------------------------\n"); //$NON-NLS-1$
 	// }
 
+	/**
+	 * @param element
+	 * @return bool
+	 *  (unused)
+	 */
 	public static boolean isMultiSelection(Element element) {
 		if (element.getNodeName().equalsIgnoreCase(IHTMLConstants.TAG_OPTION)) {
 			return element.getAttribute(ICSSPropertyID.ATTR_MULTIPLE) != null;
@@ -362,16 +295,25 @@
 		return false;
 	}
 
-	public static String getElementTextSource(Element element) {
-		if (element == null) {
-			return null;
-		}
-		if (element instanceof ElementImpl) {
-			return ((ElementImpl) element).getSource();
-		}
-		return null;
-	}
+//	/**
+//	 * @param element
+//	 * @return if elementImpl, return source, else null
+//	 * (unused)
+//	 */
+//	public static String getElementTextSource(Element element) {
+//		if (element == null) {
+//			return null;
+//		}
+//		if (element instanceof ElementImpl) {
+//			return ((ElementImpl) element).getSource();
+//		}
+//		return null;
+//	}
 
+	/**
+	 * @param project
+	 * @return IJavaProject
+	 */
 	public static IJavaProject getJavaProject(Object project) {
 		if (project == null) {
 			return null;
@@ -397,14 +339,18 @@
 		}
 		return null;
 	}
-
-	public static IProject getProject(Object project) {
-		if (project instanceof IProject) {
-			return (IProject) project;
-		} else if (project instanceof IJavaProject) {
-			return ((IJavaProject) project).getProject();
-		}
-		return null;
-	}
+//
+//	/**
+//	 * @param project as Object
+//	 * @return IProject or null
+//	 */
+//	public static IProject getProject(Object project) {
+//		if (project instanceof IProject) {
+//			return (IProject) project;
+//		} else if (project instanceof IJavaProject) {
+//			return ((IJavaProject) project).getProject();
+//		}
+//		return null;
+//	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/ISectionFilter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/ISectionFilter.java
index 3294ba4..95591e8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/ISectionFilter.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/ISectionFilter.java
@@ -16,12 +16,13 @@
 /**
  * @author mengbo
  * @version 1.5
+ * @deprecated  unused
  */
 public interface ISectionFilter {
 
 	/**
 	 * @param node
-	 * @return
+	 * @return true if node applies
 	 */
 	boolean appliesTo(Element node);
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/ITabbedPropertiesConstants.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/ITabbedPropertiesConstants.java
index ab11aa2..233923a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/ITabbedPropertiesConstants.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/ITabbedPropertiesConstants.java
@@ -16,112 +16,13 @@
  * @version 1.5
  */
 public interface ITabbedPropertiesConstants {
-	static final String GENERAL_TAB_ID = "org.eclipse.jst.pagedesigner.tabQuickEdit";
 
-	static final String ALL_TAB_ID = "org.eclipse.jst.pagedesigner.tabAttributes";
-
-	static final String DEBUG_TAB_ID = "org.eclipse.jst.pagedesigner.pageDesignerTabDebug";
-
-	public String ACCCESSIBILITY_SECTION_ID = "section.accessibility";
-
-	public String ALL_PROPERTY_SECTION_ID = "section.allproperty";
-
-	/** jsf core tags */
-	public String JSF_CORE_ActionListener = "section.jsf_core_actionListener";
-
-	public String JSF_CORE_Attribute = "section.jsf_core_attribute";
-
-	public String JSF_CORE_ConvertDateTime = "section.jsf_core_convertDateTime";
-
-	public String JSF_CORE_Converter = "section.jsf_core_converter";
-
-	public String JSF_CORE_ConvertNumber = "section.jsf_core_convertNumber";
-
-	public String JSF_CORE_Facet = "section.jsf_core_facet";
-
-	public String JSF_CORE_LoadBundle = "section.jsf_core_loadBundle";
-
-	public String JSF_CORE_Param = "section.jsf_core_param";
-
-	public String JSF_CORE_SelectItem = "section.jsf_core_selectItem";
-
-	public String JSF_CORE_SelectItems = "section.jsf_core_selectItems";
-
-	public String JSF_CORE_Subview = "section.jsf_core_subview";
-
-	public String JSF_CORE_ValidateDoubleRange = "section.jsf_core_validateDoubleRange";
-
-	public String JSF_CORE_ValidateLength = "section.jsf_core_validateLength";
-
-	public String JSF_CORE_ValidateLongRange = "section.jsf_core_validateLongRange";
-
-	public String JSF_CORE_Validator = "section.jsf_core_validator";
-
-	public String JSF_CORE_ValueChangeListener = "section.jsf_core_valueChangeListener";
-
-	public String JSF_CORE_Verbatim = "section.jsf_core_verbatim";
-
-	public String JSF_CORE_View = "section.jsf_core_view";
-
-	/** jsf html tags */
-	public String JSF_HTML_Column = "section.jsf_html_column";
-
-	public String JSF_HTML_CommandButton = "section.jsf_html_commandButton";
-
-	public String JSF_HTML_CommandLink = "section.jsf_html_commandLink";
-
-	public String JSF_HTML_DataTable = "section.jsf_html_dataTable";
-
-	public String JSF_HTML_Form = "section.jsf_html_form";
-
-	public String JSF_HTML_GraphicImage = "section.jsf_html_graphicImage";
-
-	public String JSF_HTML_InputHidden = "section.jsf_html_inputHidden";
-
-	public String JSF_HTML_InputSecret = "section.jsf_html_inputSecret";
-
-	public String JSF_HTML_InputText = "section.jsf_html_inputText";
-
-	public String JSF_HTML_InputTextarea = "section.jsf_html_inputTextarea";
-
-	public String JSF_HTML_Message = "section.jsf_html_message";
-
-	public String JSF_HTML_Messages = "section.jsf_html_messages";
-
-	public String JSF_HTML_OutputFormat = "section.jsf_html_outputFormat";
-
-	public String JSF_HTML_OutputLabel = "section.jsf_html_outputLabel";
-
-	public String JSF_HTML_OutputLink = "section.jsf_html_outputLink";
-
-	public String JSF_HTML_OutputText = "section.jsf_html_outputText";
-
-	public String JSF_HTML_PanelGrid = "section.jsf_html_panelGrid";
-
-	public String JSF_HTML_PanelGroup = "section.jsf_html_panelGroup";
-
-	public String JSF_HTML_SelectBooleanCheckbox = "section.jsf_html_selectBooleanCheckbox";
-
-	public String JSF_HTML_SelectManyCheckbox = "section.jsf_html_selectManyCheckbox";
-
-	public String JSF_HTML_SelectManyListbox = "section.jsf_html_selectManyListbox";
-
-	public String JSF_HTML_SelectManyMenu = "section.jsf_html_selectManyMenu";
-
-	public String JSF_HTML_SelectOneListbox = "section.jsf_html_selectOneListbox";
-
-	public String JSF_HTML_SelectOneMenu = "section.jsf_html_selectOneMenu";
-
-	public String JSF_HTML_SelectOneRadio = "section.jsf_html_selectOneRadio";
-
-	/** sybase datawindow */
-	public String DW_DataWindow = "section.dw_dataWindow";
-
-	public String DW_Objectlink = "section.dw_objectlink";
-
-	// FIXME: when return null, will in fact using "Misc". This may not garantee
+	// FIXME: when return null, will in fact using "Misc". This may not guarantee
 	// it be the
 	// last category, since is sorted by string order.
-	static final String OTHER_CATEGORY = "Other";
+	/**
+	 * the other category
+	 */
+	static final String OTHER_CATEGORY = Messages.ITabbedPropertiesConstants_other_category;
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/Messages.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/Messages.java
new file mode 100644
index 0000000..bdd56f1
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/Messages.java
@@ -0,0 +1,23 @@
+package org.eclipse.jst.pagedesigner.properties;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Externalized Strings
+ *
+ */
+public class Messages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.jst.pagedesigner.properties.messages"; //$NON-NLS-1$
+	/**
+	 * 
+	 */
+	public static String ITabbedPropertiesConstants_other_category;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+
+	private Messages() {
+		//
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/NavigationHiearchyAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/NavigationHiearchyAction.java
index cca5ca5..262b43b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/NavigationHiearchyAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/NavigationHiearchyAction.java
@@ -39,7 +39,7 @@
 
 	private Node _currentNode;
 
-	private DesignerTabbedPropertySheetPage _propertyPage;
+	private WPETabbedPropertySheetPage _propertyPage;
 
 	private class MenuCreator implements IMenuCreator {
 		public void dispose() {
@@ -91,13 +91,20 @@
 		}
 	}
 
-	public NavigationHiearchyAction(DesignerTabbedPropertySheetPage propertyPage) {
-		super("");
+	/**
+	 * @param propertyPage
+	 */
+	public NavigationHiearchyAction(WPETabbedPropertySheetPage propertyPage) {
+		super(""); //$NON-NLS-1$
 		setEnabled(true);
 		setMenuCreator(new MenuCreator());
 		this._propertyPage = propertyPage;
 	}
 
+	/**
+	 * @param selectedNode
+	 * @param startNode
+	 */
 	protected void changeSelection(Node selectedNode, Node startNode) {
 		this._propertyPage.internalChangeSelection(selectedNode, startNode);
 		this._currentNode = selectedNode;
@@ -105,12 +112,16 @@
 		this.setText(this._currentNode.getNodeName());
 	}
 
+	/**
+	 * @param currentNode
+	 * @param startNode
+	 */
 	protected void refresh(Node currentNode, Node startNode) {
 		this._currentNode = currentNode;
 		this._startNode = startNode;
 		if (!(_currentNode instanceof Text)
 				&& !(_currentNode instanceof Element)) {
-			this.setText("---");
+			this.setText("---"); //$NON-NLS-1$
 			this.setEnabled(false);
 		} else {
 			this.setText(_currentNode.getNodeName());
@@ -118,9 +129,7 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc) Method declared on IAction.
-	 */
+	@Override
 	public void run() {
 		this._propertyPage.internalChangeSelection(_currentNode, _startNode);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertyDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/OLDAttributePropertyDescriptor.java
similarity index 90%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertyDescriptor.java
rename to jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/OLDAttributePropertyDescriptor.java
index 8a5f9c2..75f7ec6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/AttributePropertyDescriptor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/OLDAttributePropertyDescriptor.java
@@ -14,8 +14,8 @@
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.TextCellEditor;
-import org.eclipse.jst.pagedesigner.meta.EditorCreator;
 import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
+import org.eclipse.jst.pagedesigner.meta.XXXEditorCreator;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
@@ -26,8 +26,9 @@
  * IAttributeDescriptor and an IPropertyDescriptor.
  * 
  * @author mengbo
+ * @deprecated
  */
-public class AttributePropertyDescriptor implements IPropertyDescriptor {
+public class OLDAttributePropertyDescriptor implements IPropertyDescriptor {
 	private IAttributeDescriptor _attr;
 
 	private IPropertyDescriptor _inner; // this could be null
@@ -42,7 +43,7 @@
 	 * @param desc
 	 *            could be null
 	 */
-	public AttributePropertyDescriptor(Element element,
+	public OLDAttributePropertyDescriptor(Element element,
 			IAttributeDescriptor descriptor, IPropertyDescriptor desc) {
 		_element = element;
 		_attr = descriptor;
@@ -56,13 +57,13 @@
 	 */
 	public CellEditor createPropertyEditor(Composite parent) {
 		CellEditor editor;
-		editor = EditorCreator.getInstance().createCellEditorWithWrapper(
+		editor = XXXEditorCreator.getInstance().createCellEditorWithWrapper(
 				parent, _attr, (IDOMElement) _element, null);
 
 		if (editor != null) {
 			return editor;
 		}
-        EditorCreator.CellEditorHolder holder = new EditorCreator.CellEditorHolder() {
+        XXXEditorCreator.CellEditorHolder holder = new XXXEditorCreator.CellEditorHolder() {
         	/*
         	 * (non-Javadoc)
         	 * 
@@ -75,7 +76,7 @@
                 return new TextCellEditor(parent1);
         	}
         };
-        return EditorCreator.getInstance().createCellEditorWithWrapper(
+        return XXXEditorCreator.getInstance().createCellEditorWithWrapper(
         		parent, _attr, holder, (IDOMElement) _element, null);
 
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/PropertyDescriptorWrapper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/PropertyDescriptorWrapper.java
index 633be51..6503bf1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/PropertyDescriptorWrapper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/PropertyDescriptorWrapper.java
@@ -11,7 +11,9 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.properties;
 
+import org.eclipse.jface.action.IStatusLineManager;
 import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.ICellEditorListener;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.TextCellEditor;
 import org.eclipse.jst.pagedesigner.meta.EditorCreator;
@@ -32,15 +34,32 @@
 
 	private IDOMElement _element;
 
+	private IStatusLineManager _statusLineManager;
+
+//	/**
+//	 * Constructor
+//	 * @param element 
+//	 * @param innerDescriptor 
+//	 * @param statusLineManager 
+//	 * 
+//	 */
+//	public PropertyDescriptorWrapper(IDOMElement element,
+//			IPropertyDescriptor innerDescriptor, IStatusLineManager statusLineManager) {
+//		this._element = element;
+//		this._inner = innerDescriptor;
+//		this._statusLineManager = statusLineManager;
+//	}
+
 	/**
-	 * 
+	 * Constructor
+	 * @param element
+	 * @param innerDescriptor
 	 */
 	public PropertyDescriptorWrapper(IDOMElement element,
 			IPropertyDescriptor innerDescriptor) {
 		this._element = element;
 		this._inner = innerDescriptor;
 	}
-
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -54,10 +73,15 @@
 			 * @see org.eclipse.jst.pagedesigner.meta.EditorCreator.CellEditorHolder#createCellEditor(org.eclipse.swt.widgets.Composite)
 			 */
 			public CellEditor createCellEditor(Composite parent1) {
-				if (_inner != null) {
-					return _inner.createPropertyEditor(parent1);
-				}
-                return new TextCellEditor(parent1);
+				CellEditor ed = null;
+				if (_inner != null) 
+					ed = _inner.createPropertyEditor(parent1);
+				else
+					ed = new TextCellEditor(parent1);
+				
+				if (_statusLineManager != null)
+					ed.addListener(new StatusBarUpdater(ed));
+				return ed;
 			}
 		};
 		return EditorCreator.getInstance().createCellEditorWithWrapper(parent,
@@ -70,7 +94,8 @@
 	 * @see org.eclipse.ui.views.properties.IPropertyDescriptor#getCategory()
 	 */
 	public String getCategory() {
-		return ITabbedPropertiesConstants.OTHER_CATEGORY;
+		String cat = _inner.getCategory();
+		return cat != null ? cat : ITabbedPropertiesConstants.OTHER_CATEGORY;
 	}
 
 	/*
@@ -141,8 +166,32 @@
 		return _inner.isCompatibleWith(anotherProperty);
 	}
 
+	/**
+	 * @return IPropertyDescriptor
+	 */
 	public IPropertyDescriptor getInner() {
 		return _inner;
 	}
 
+	private class StatusBarUpdater implements ICellEditorListener {
+		private CellEditor ed;
+	
+		StatusBarUpdater(CellEditor ed) {
+			this.ed = ed;
+		}
+		public void applyEditorValue() {//
+		}
+		public void cancelEditor() {//
+		}
+
+		public void editorValueChanged(boolean oldValidState,
+				boolean newValidState) {
+			if (!newValidState)
+				_statusLineManager.setErrorMessage(ed.getErrorMessage());				
+			else
+				_statusLineManager.setErrorMessage(null);
+				
+		}
+		
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/DesignerTabbedPropertySheetPage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/WPETabbedPropertySheetPage.java
similarity index 71%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/DesignerTabbedPropertySheetPage.java
rename to jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/WPETabbedPropertySheetPage.java
index 456f731..6883987 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/DesignerTabbedPropertySheetPage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/WPETabbedPropertySheetPage.java
@@ -18,6 +18,7 @@
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.editors.HTMLEditor;
+import org.eclipse.jst.pagedesigner.properties.internal.QuickEditTabManager;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.ISelectionListener;
 import org.eclipse.ui.IWorkbenchPart;
@@ -25,43 +26,38 @@
 import org.eclipse.ui.part.EditorPart;
 import org.eclipse.ui.part.IPageSite;
 import org.eclipse.ui.views.contentoutline.ContentOutline;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ITabbedPropertySheetPageContributor;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
 import org.w3c.dom.Node;
 
 /**
  * @author mengbo
- * @author mengbo
  */
-public class DesignerTabbedPropertySheetPage extends TabbedPropertySheetPage {
+public class WPETabbedPropertySheetPage extends TabbedPropertySheetPage {
+
 	// TODO: when we want to extend this page, HTMLEditor would not be the sole
 	// type of editor part.
 	private HTMLEditor _htmlEditor;
 
 	private NavigationHiearchyAction _hiearchAction = new NavigationHiearchyAction(
 			this);
+	
+	private QuickEditTabManager manager;
+
+	private ISelectionListener _selListener;
 
 	/**
+	 * Constructor
 	 * @param tabbedPropertySheetPageContributor
+	 * @param editor 
 	 */
-	public DesignerTabbedPropertySheetPage(
+	public WPETabbedPropertySheetPage(
 			ITabbedPropertySheetPageContributor tabbedPropertySheetPageContributor,
 			HTMLEditor editor) {
 		super(tabbedPropertySheetPageContributor);
 		_htmlEditor = editor;
 	}
 
-	protected IStructuredModel getModel() {
-		return _htmlEditor.getModel();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart,
-	 *      org.eclipse.jface.viewers.ISelection)
-	 */
 	public void selectionChanged(IWorkbenchPart part, ISelection selection) {
 		if (part == null) {
 			part = _htmlEditor;
@@ -74,6 +70,7 @@
 					_hiearchAction.refresh(node, node);
 					this.getSite().getActionBars().getToolBarManager().update(
 							true);
+					//setInput(part, node);
 					super.selectionChanged(part, new StructuredSelection(node));
 				} catch (Exception e) {
 					// Some synchronization would cause this, it does not damage
@@ -82,14 +79,14 @@
 			}
 		}
 	}
-
+	
 	/**
 	 * This method should be called from internal of the property page. Normally
 	 * means user did some action inside the property sheet to change current
 	 * selection.
 	 * 
 	 * @param selectedNode
-	 * @param node
+	 * @param innerNode
 	 */
 	public void internalChangeSelection(Node selectedNode, Node innerNode) {
 		getEditor().setFocus();
@@ -98,33 +95,39 @@
 		super.selectionChanged(null, new StructuredSelection(selectedNode));
 	}
 
+	/**
+	 * @return EditorPart instance that this property sheet is for.   Will return instance of WPE (htmlEditor)
+	 */
 	public EditorPart getEditor() {
 		return this._htmlEditor;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.part.Page#init(org.eclipse.ui.part.IPageSite)
-	 */
 	public void init(IPageSite pageSite) {
 		super.init(pageSite);
 		setSelectionProvider();
 		setSelectionListener();
 		IToolBarManager toolbar = pageSite.getActionBars().getToolBarManager();
-		toolbar.add(_hiearchAction);
+		toolbar.add(_hiearchAction);		
 		_hiearchAction.refresh(null, null);
 	}
 
 	private void setSelectionListener() {
 		this.getSite().getWorkbenchWindow().getSelectionService()
-				.addPostSelectionListener(new ISelectionListener() {
-					public void selectionChanged(IWorkbenchPart part,
-							ISelection selection) {
-						DesignerTabbedPropertySheetPage.this.selectionChanged(
-								part, selection);
-					}
-				});
+				.addPostSelectionListener(getSelectionListener());
+	}
+
+	private ISelectionListener getSelectionListener() {
+		if (_selListener == null){
+			_selListener = new ISelectionListener() {
+				public void selectionChanged(IWorkbenchPart part,
+						ISelection selection) {
+					if (getEditor() == part)//only fire if the selection applies to this tabbed prop sheet instance
+						WPETabbedPropertySheetPage.this.selectionChanged(
+							part, selection);
+				}
+			};
+		}
+		return _selListener;
 	}
 
 	private void setSelectionProvider() {
@@ -179,6 +182,30 @@
 				.setHelp(
 						getControl(),
 						PDPlugin
-								.getResourceString("DesignerTabbedPropertySheetPage.help.id"));
+								.getResourceString("WPETabbedPropertySheetPage.help.id")); //$NON-NLS-1$
 	}
+
+	/**
+	 * @return acquires an instance of QuickEditTabManager
+	 */
+	public QuickEditTabManager getTabManager() {
+		if (manager == null) {
+			manager = QuickEditTabManager.acquireInstance(this);
+		}
+		return manager;
+	}
+
+	@Override
+	public void dispose() {
+		this.getSite().getWorkbenchWindow().getSelectionService().removePostSelectionListener(getSelectionListener());
+		this.getSite().setSelectionProvider(null);
+		manager.releaseInstance();
+		manager.dispose();
+		manager = null;
+		_selListener = null;
+		_htmlEditor = null;
+		super.dispose();
+	}
+	
+	
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupMessages.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupMessages.java
index 1fa6dc7..2daa303 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupMessages.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupMessages.java
@@ -29,6 +29,10 @@
         // no external instantiation
 	}
 
+	/**
+	 * @param key
+	 * @return the value for key or !!key!! if not found
+	 */
 	public static String getString(String key) {
 		try {
 			return RESOURCE_BUNDLE.getString(key);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/DialogUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/DialogUtil.java
index a4dfb6c..8288c89 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/DialogUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/DialogUtil.java
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.properties.attrgroup;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -22,7 +23,8 @@
 import org.eclipse.jst.jsf.common.ui.internal.dialogs.CommonWizardDialog;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.commands.single.AddSubNodeCommand;
-import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.properties.internal.AttributeGroup;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 
@@ -46,7 +48,14 @@
 	 */
 	public static boolean createSubElement(Shell shell,
 			final IDOMElement parent, final AttributeGroup group) {
-		group.setElementContext(parent, null);
+		group.setElementContext(parent, parent);//2ndParam seems to need to be parent most of the time... don't know why it WAS null... changed 12/19/07
+		
+		if (group.getDialogFields().length == 0){
+			//don't show dialog
+			createSubNode(group, parent, Collections.EMPTY_MAP);
+			return true;
+		}
+		
 		final DialogFieldGroupPage page = new DialogFieldGroupPage("", group); //$NON-NLS-1$
 		page.setTitle(AttributeGroupMessages.getString(
 				"DialogUtil.createTitle", group.getTagName())); //$NON-NLS-1$
@@ -64,8 +73,8 @@
 				DialogField[] fields = group.getDialogFields();
 				Map map = new HashMap();
 				for (int i = 0; i < fields.length; i++) {
-					IAttributeDescriptor desc = group
-							.getAttributeDescriptor(fields[i]);
+					IPropertyPageDescriptor desc = group
+							.getPropertyDescriptor(fields[i]);
 					if (desc != null && fields[i] instanceof ISupportTextValue) {
 						String value = ((ISupportTextValue) fields[i])
 								.getText();
@@ -74,11 +83,7 @@
 						}
 					}
 				}
-				AddSubNodeCommand addSubCommand = new AddSubNodeCommand(
-						AttributeGroupMessages
-								.getString(
-										"DialogUtil.createCommandLabel", group.getTagName()), parent, group.getTagName(), group.getURI(), map); //$NON-NLS-1$
-				addSubCommand.execute();
+				createSubNode(group, parent, map);
 				return true;
 			}
 		};
@@ -91,6 +96,15 @@
 		return dialog.open() == Window.OK;
 	}
 
+	private static void createSubNode(final AttributeGroup group, final IDOMElement parent, final Map mapOfAttributeValues) {
+		AddSubNodeCommand addSubCommand = new AddSubNodeCommand(
+				AttributeGroupMessages
+						.getString(
+								"DialogUtil.createCommandLabel", group.getTagName()), parent, group.getTagName(), group.getURI(), mapOfAttributeValues); //$NON-NLS-1$
+		addSubCommand.execute();
+		
+	}
+
 	/**
 	 * Utility method, this method will popup a dialog for user to input
 	 * attributes for initialize a sub element. In this method will create a
@@ -114,8 +128,10 @@
 	public static boolean createSubElement(Shell shell,
 			final IDOMElement parent, final String uri, final String tagName,
 			final String[] attributes) {
-		final AttributeGroup group = new AttributeGroup(uri, tagName,
+		
+		final 	AttributeGroup group = new AttributeGroup(uri, tagName,
 				attributes);
+
 		return createSubElement(shell, parent, group);
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroup.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/OLDAttributeGroup.java
similarity index 92%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroup.java
rename to jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/OLDAttributeGroup.java
index abfe285..8322e1f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroup.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/OLDAttributeGroup.java
@@ -21,12 +21,11 @@
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldChangeListener;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue;
 import org.eclipse.jst.pagedesigner.meta.AttributeDescriptor;
-import org.eclipse.jst.pagedesigner.meta.EditorCreator;
 import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
 import org.eclipse.jst.pagedesigner.meta.IElementDescriptor;
+import org.eclipse.jst.pagedesigner.meta.XXXEditorCreator;
 import org.eclipse.jst.pagedesigner.meta.internal.CMRegistry;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.PlatformUI;
@@ -37,8 +36,12 @@
 /**
  * @author mengbo
  * @version 1.5
+ * 
+ * TODO:   no longer used????
+ * @deprecated
+ * 
  */
-public class AttributeGroup extends DialogFieldGroup {
+public class OLDAttributeGroup extends DialogFieldGroup {
 	private static final Object KEY_ATTR = "KEY_ATTR"; //$NON-NLS-1$
 
 	private String _uri;
@@ -54,22 +57,25 @@
 	private IDOMElement _ownerElement;
 
 	/**
-	 * @param pageName
-	 * @param title
-	 * @param titleImage
+	 * @param uri 
+	 * @param tagName 
+	 * @param attrNames 
 	 */
-	public AttributeGroup(String uri, String tagName, String[] attrNames) {
+	public OLDAttributeGroup(String uri, String tagName, String[] attrNames) {
 		this._uri = uri;
 		this._tagName = tagName;
 		this._attrs = prepareAttributeDescriptors(uri, tagName, attrNames);
 	}
 
+	/**
+	 * @return the tag name
+	 */
 	public String getTagName() {
 		return this._tagName;
 	}
 
 	/**
-	 * @return
+	 * @return the uri
 	 */
 	public String getURI() {
 		return this._uri;
@@ -111,6 +117,10 @@
 		return attrs;
 	}
 
+	/**
+	 * @param field
+	 * @return the descriptor
+	 */
 	public IAttributeDescriptor getAttributeDescriptor(DialogField field) {
 		Object obj = field.getAttachedData(KEY_ATTR);
 		if (obj instanceof IAttributeDescriptor) {
@@ -149,7 +159,7 @@
 				field = createDialogField(this._uri, this._tagName,
 						descriptors[i]);
 				if (field == null) {
-					EditorCreator creator = EditorCreator.getInstance();
+					XXXEditorCreator creator = XXXEditorCreator.getInstance();
 					field = creator.createDialogFieldWithWrapper(this._uri,
 							this._tagName, descriptors[i], null);
 				}
@@ -180,7 +190,7 @@
 	 * @param uri
 	 * @param tag
 	 * @param attr
-	 * @return
+	 * @return the listener
 	 */
 	public IDialogFieldApplyListener getDialogFieldApplyListener(String uri,
 			String tag, IAttributeDescriptor attr) {
@@ -193,7 +203,7 @@
 	 * @param uri
 	 * @param tag
 	 * @param attr
-	 * @return
+	 * @return the listener
 	 */
 	public IDialogFieldChangeListener getDialogFieldChangeListener(String uri,
 			String tag, IAttributeDescriptor attr) {
@@ -222,10 +232,17 @@
 		}
 	}
 
+	/**
+	 * @return the element
+	 */
 	public IDOMElement getElement() {
 		return _ownerElement;
 	}
 
+	/**
+	 * @param context
+	 * @param owner
+	 */
 	public void setElementContext(IDOMNode context, IDOMElement owner) {
 		initialize();
 		this._ownerElement = owner;
@@ -254,8 +271,8 @@
 		} else {
 			top = toolkit.createComposite(parent);
 		}
-		FillLayout fillLayout = new FillLayout(SWT.VERTICAL);
-		parent.setLayout(fillLayout);
+//		FillLayout fillLayout = new FillLayout(SWT.VERTICAL);
+//		parent.setLayout(fillLayout);
 
 		if (this._helpContextId != null && this._helpContextId.length() > 0) {
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(top,
@@ -289,8 +306,8 @@
 	}
 
 	/**
-	 * @return
-	 */
+	 * @return the number of columns
+	 */ 
 	public int getNumColumns() {
 		int columns = 1;
 		initialize();
@@ -311,7 +328,7 @@
 	}
 
 	/**
-	 * @return
+	 * @return the dialog fields
 	 */
 	public DialogField[] getDialogFields() {
 		initialize();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/OLDAttributeGroupSection.java
similarity index 84%
rename from jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupSection.java
rename to jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/OLDAttributeGroupSection.java
index 8ec170f..b41a1ed 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/OLDAttributeGroupSection.java
@@ -20,8 +20,8 @@
 import org.eclipse.jst.pagedesigner.properties.BaseCustomSection;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 
 /**
@@ -29,8 +29,10 @@
  * 
  * @author mengbo
  * @version 1.5
+ * @deprecated
+ * 
  */
-public class AttributeGroupSection extends BaseCustomSection {
+public class OLDAttributeGroupSection extends BaseCustomSection {
 	private static final Object KEY_ATTR = "KEY_ATTR"; //$NON-NLS-1$
 
 	private IDialogFieldApplyListener _fieldApplyListener = new IDialogFieldApplyListener() {
@@ -45,13 +47,16 @@
 				ISupportTextValue textValue = (ISupportTextValue) field;
 				ChangeAttributeCommand c = new ChangeAttributeCommand(
 						AttributeGroupMessages
-								.getString("AttributeGroupSection.changeAttribute"), _element, ((IAttributeDescriptor) attr).getAttributeName(), textValue.getText()); //$NON-NLS-1$
+								.getString("OLDAttributeGroupSection.changeAttribute"), _element, ((IAttributeDescriptor) attr).getAttributeName(), textValue.getText()); //$NON-NLS-1$
 				c.execute();
 			}
 		}
 	};
 
-	protected AttributeGroup _group;
+	/**
+	 * the attribute group
+	 */
+	protected OLDAttributeGroup _group;
 
 	/**
 	 * create the section with a default AttributeGroup. In default
@@ -61,8 +66,8 @@
 	 * @param tagName
 	 * @param attrNames
 	 */
-	public AttributeGroupSection(String uri, String tagName, String[] attrNames) {
-		this(new AttributeGroup(uri, tagName, attrNames));
+	public OLDAttributeGroupSection(String uri, String tagName, String[] attrNames) {
+		this(new OLDAttributeGroup(uri, tagName, attrNames));
 	}
 
 	/**
@@ -71,7 +76,7 @@
 	 * 
 	 * @param group
 	 */
-	public AttributeGroupSection(AttributeGroup group) {
+	public OLDAttributeGroupSection(OLDAttributeGroup group) {
 		_group = group;
 		_group.setDefaultApplyListener(_fieldApplyListener);
 		_group.initialize();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CSSDialogCellEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CSSDialogCellEditor.java
index f0c361e..c129b38 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CSSDialogCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CSSDialogCellEditor.java
@@ -24,11 +24,16 @@
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
 import org.w3c.dom.css.ElementCSSInlineStyle;
 
+/**
+ * A css dialog cell editor
+ *
+ */
 public class CSSDialogCellEditor extends EditableDialogCellEditor {
 	private IDOMElement _element;
 
 	/**
 	 * @param parent
+	 * @param element 
 	 */
 	public CSSDialogCellEditor(Composite parent, IDOMElement element) {
 		super(parent);
@@ -58,6 +63,6 @@
 
 		String style = (_element == null ? null : _element
 				.getAttribute(IJSFConstants.ATTR_STYLE));
-		return style == null ? "" : style;
+		return style == null ? "" : style; //$NON-NLS-1$
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CellEditorFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CellEditorFactory.java
index f5f9dad..a9d2509 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CellEditorFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CellEditorFactory.java
@@ -1,34 +1,34 @@
 /*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. and others.
- *
+ * Copyright (c) 2007 Oracle Corporation.
  * 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
+ *    Oracle - initial API and implementation
+ *    
+ ********************************************************************************/
 package org.eclipse.jst.pagedesigner.properties.celleditors;
 
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.TimeZone;
-import java.util.TreeMap;
+import java.util.List;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ComboDialogField;
+import org.eclipse.jface.viewers.TextCellEditor;
+import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.jst.jsf.common.metadata.internal.TraitValueHelper;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
-import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StyleComboDialogField;
-import org.eclipse.jst.pagedesigner.css2.CSSUtil;
+import org.eclipse.jst.jsf.metadataprocessors.features.IDefaultValue;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
 import org.eclipse.jst.pagedesigner.jsp.core.IJSPCoreConstants;
-import org.eclipse.jst.pagedesigner.meta.IAttributeCellEditorFactory;
-import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
-import org.eclipse.jst.pagedesigner.meta.IValueType;
-import org.eclipse.jst.pagedesigner.ui.dialogfields.ContextableClasspathResourceButtonDialogField;
+import org.eclipse.jst.pagedesigner.meta.ITagAttributeCellEditorFactory;
+import org.eclipse.jst.pagedesigner.meta.IAttributeRuntimeValueType;
+import org.eclipse.jst.pagedesigner.properties.dialogfields.MDEnabledComboDialogField;
+import org.eclipse.jst.pagedesigner.ui.dialogfields.ClasspathResourceButtonDialogField;
 import org.eclipse.jst.pagedesigner.ui.dialogfields.ContextableResourceButtonDialogField;
 import org.eclipse.jst.pagedesigner.ui.dialogfields.StyleButtonDialogField;
 import org.eclipse.jst.pagedesigner.utils.StructuredModelUtil;
@@ -42,235 +42,43 @@
  * 
  * @author mengbo
  */
-public class CellEditorFactory implements IAttributeCellEditorFactory {
-	private static String[] CURRENCYCODES = { "AED", // United Arab Emirates,
-			// Dirhams //$NON-NLS-1$
-			"AFA", // Afghanistan, Afghanis //$NON-NLS-1$
-			"ALL", // Albania, Leke //$NON-NLS-1$
-			"AMD", // Armenia, Drams //$NON-NLS-1$
-			"ANG", // Netherlands Antilles, Guilders (also called Florins)
-			// //$NON-NLS-1$
-			"AOA", // Angola, Kwanza //$NON-NLS-1$
-			"ARS", // Argentina, Pesos //$NON-NLS-1$
-			"AUD", // Australia, Dollars //$NON-NLS-1$
-			"AWG", // Aruba, Guilders (also called Florins) //$NON-NLS-1$
-			"AZM", // Azerbaijan, Manats //$NON-NLS-1$
-			"BAM", // Bosnia and Herzegovina, Convertible Marka //$NON-NLS-1$
-			"BBD", // Barbados, Dollars //$NON-NLS-1$
-			"BDT", // Bangladesh, Taka //$NON-NLS-1$
-			"BGN", // Bulgaria, Leva //$NON-NLS-1$
-			"BHD", // Bahrain, Dinars //$NON-NLS-1$
-			"BIF", // Burundi, Francs //$NON-NLS-1$
-			"BMD", // Bermuda, Dollars //$NON-NLS-1$
-			"BND", // Brunei Darussalam, Dollars //$NON-NLS-1$
-			"BOB", // Bolivia, Bolivianos //$NON-NLS-1$
-			"BRL", // Brazil, Brazil Real //$NON-NLS-1$
-			"BSD", // Bahamas, Dollars //$NON-NLS-1$
-			"BTN", // Bhutan, Ngultrum //$NON-NLS-1$
-			"BWP", // Botswana, Pulas //$NON-NLS-1$
-			"BYR", // Belarus, Rubles //$NON-NLS-1$
-			"BZD", // Belize, Dollars //$NON-NLS-1$
-			"CAD", // Canada, Dollars //$NON-NLS-1$
-			"CDF", // Congo/Kinshasa, Congolese Francs //$NON-NLS-1$
-			"CHF", // Switzerland, Francs //$NON-NLS-1$
-			"CLP", // Chile, Pesos //$NON-NLS-1$
-			"CNY", // China, Yuan Renminbi //$NON-NLS-1$
-			"COP", // Colombia, Pesos //$NON-NLS-1$
-			"CRC", // Costa Rica, Colones //$NON-NLS-1$
-			"CSD", // Serbia, Dinars //$NON-NLS-1$
-			"CUP", // Cuba, Pesos //$NON-NLS-1$
-			"CVE", // Cape Verde, Escudos //$NON-NLS-1$
-			"CYP", // Cyprus, Pounds //$NON-NLS-1$
-			"CZK", // Czech Republic, Koruny //$NON-NLS-1$
-			"DJF", // Djibouti, Francs //$NON-NLS-1$
-			"DKK", // Denmark, Kroner //$NON-NLS-1$
-			"DOP", // Dominican Republic, Pesos //$NON-NLS-1$
-			"DZD", // Algeria, Algeria Dinars //$NON-NLS-1$
-			"EEK", // Estonia, Krooni //$NON-NLS-1$
-			"EGP", // Egypt, Pounds //$NON-NLS-1$
-			"ERN", // Eritrea, Nakfa //$NON-NLS-1$
-			"ETB", // Ethiopia, Birr //$NON-NLS-1$
-			"EUR", // Euro Member Countries, Euro //$NON-NLS-1$
-			"FJD", // Fiji, Dollars //$NON-NLS-1$
-			"FKP", // Falkland Islands (Malvinas), Pounds //$NON-NLS-1$
-			"GBP", // United Kingdom, Pounds //$NON-NLS-1$
-			"GEL", // Georgia, Lari //$NON-NLS-1$
-			"GGP", // Guernsey, Pounds //$NON-NLS-1$
-			"GHC", // Ghana, Cedis //$NON-NLS-1$
-			"GIP", // Gibraltar, Pounds //$NON-NLS-1$
-			"GMD", // Gambia, Dalasi //$NON-NLS-1$
-			"GNF", // Guinea, Francs //$NON-NLS-1$
-			"GTQ", // Guatemala, Quetzales //$NON-NLS-1$
-			"GYD", // Guyana, Dollars //$NON-NLS-1$
-			"HKD", // Hong Kong, Dollars //$NON-NLS-1$
-			"HNL", // Honduras, Lempiras //$NON-NLS-1$
-			"HRK", // Croatia, Kuna //$NON-NLS-1$
-			"HTG", // Haiti, Gourdes //$NON-NLS-1$
-			"HUF", // Hungary, Forint //$NON-NLS-1$
-			"IDR", // Indonesia, Rupiahs //$NON-NLS-1$
-			"ILS", // Israel, New Shekels //$NON-NLS-1$
-			"IMP", // Isle of Man, Pounds //$NON-NLS-1$
-			"INR", // India, Rupees //$NON-NLS-1$
-			"IQD", // Iraq, Dinars //$NON-NLS-1$
-			"IRR", // Iran, Rials //$NON-NLS-1$
-			"ISK", // Iceland, Kronur //$NON-NLS-1$
-			"JEP", // Jersey, Pounds //$NON-NLS-1$
-			"JMD", // Jamaica, Dollars //$NON-NLS-1$
-			"JOD", // Jordan, Dinars //$NON-NLS-1$
-			"JPY", // Japan, Yen //$NON-NLS-1$
-			"KES", // Kenya, Shillings //$NON-NLS-1$
-			"KGS", // Kyrgyzstan, Soms //$NON-NLS-1$
-			"KHR", // Cambodia, Riels //$NON-NLS-1$
-			"KMF", // Comoros, Francs //$NON-NLS-1$
-			"KPW", // Korea (North), Won //$NON-NLS-1$
-			"KRW", // Korea (South), Won //$NON-NLS-1$
-			"KWD", // Kuwait, Dinars //$NON-NLS-1$
-			"KYD", // Cayman Islands, Dollars //$NON-NLS-1$
-			"KZT", // Kazakhstan, Tenge //$NON-NLS-1$
-			"LAK", // Laos, Kips //$NON-NLS-1$
-			"LBP", // Lebanon, Pounds //$NON-NLS-1$
-			"LKR", // Sri Lanka, Rupees //$NON-NLS-1$
-			"LRD", // Liberia, Dollars //$NON-NLS-1$
-			"LSL", // Lesotho, Maloti //$NON-NLS-1$
-			"LTL", // Lithuania, Litai //$NON-NLS-1$
-			"LVL", // Latvia, Lati //$NON-NLS-1$
-			"LYD", // Libya, Dinars //$NON-NLS-1$
-			"MAD", // Morocco, Dirhams //$NON-NLS-1$
-			"MDL", // Moldova, Lei //$NON-NLS-1$
-			"MGA", // Madagascar, Ariary //$NON-NLS-1$
-			"MKD", // Macedonia, Denars //$NON-NLS-1$
-			"MMK", // Myanmar (Burma), Kyats //$NON-NLS-1$
-			"MNT", // Mongolia, Tugriks //$NON-NLS-1$
-			"MOP", // Macau, Patacas //$NON-NLS-1$
-			"MRO", // Mauritania, Ouguiyas //$NON-NLS-1$
-			"MTL", // Malta, Liri //$NON-NLS-1$
-			"MUR", // Mauritius, Rupees //$NON-NLS-1$
-			"MVR", // Maldives (Maldive Islands), Rufiyaa //$NON-NLS-1$
-			"MWK", // Malawi, Kwachas //$NON-NLS-1$
-			"MXN", // Mexico, Pesos //$NON-NLS-1$
-			"MYR", // Malaysia, Ringgits //$NON-NLS-1$
-			"MZM", // Mozambique, Meticais //$NON-NLS-1$
-			"NAD", // Namibia, Dollars //$NON-NLS-1$
-			"NGN", // Nigeria, Nairas //$NON-NLS-1$
-			"NIO", // Nicaragua, Cordobas //$NON-NLS-1$
-			"NOK", // Norway, Krone //$NON-NLS-1$
-			"NPR", // Nepal, Nepal Rupees //$NON-NLS-1$
-			"NZD", // New Zealand, Dollars //$NON-NLS-1$
-			"OMR", // Oman, Rials //$NON-NLS-1$
-			"PAB", // Panama, Balboa //$NON-NLS-1$
-			"PEN", // Peru, Nuevos Soles //$NON-NLS-1$
-			"PGK", // Papua New Guinea, Kina //$NON-NLS-1$
-			"PHP", // Philippines, Pesos //$NON-NLS-1$
-			"PKR", // Pakistan, Rupees //$NON-NLS-1$
-			"PLN", // Poland, Zlotych //$NON-NLS-1$
-			"PYG", // Paraguay, Guarani //$NON-NLS-1$
-			"QAR", // Qatar, Rials //$NON-NLS-1$
-			"ROL", // Romania, Lei //$NON-NLS-1$
-			"RUB", // Russia, Rubles //$NON-NLS-1$
-			"RWF", // Rwanda, Rwanda Francs //$NON-NLS-1$
-			"SAR", // Saudi Arabia, Riyals //$NON-NLS-1$
-			"SBD", // Solomon Islands, Dollars //$NON-NLS-1$
-			"SCR", // Seychelles, Rupees //$NON-NLS-1$
-			"SDD", // Sudan, Dinars //$NON-NLS-1$
-			"SEK", // Sweden, Kronor //$NON-NLS-1$
-			"SGD", // Singapore, Dollars //$NON-NLS-1$
-			"SHP", // Saint Helena, Pounds //$NON-NLS-1$
-			"SIT", // Slovenia, Tolars //$NON-NLS-1$
-			"SKK", // Slovakia, Koruny //$NON-NLS-1$
-			"SLL", // Sierra Leone, Leones //$NON-NLS-1$
-			"SOS", // Somalia, Shillings //$NON-NLS-1$
-			"SPL", // Seborga, Luigini //$NON-NLS-1$
-			"SRD", // Suriname, Dollars //$NON-NLS-1$
-			"STD", // S?o Tome and Principe, Dobras //$NON-NLS-1$
-			"SVC", // El Salvador, Colones //$NON-NLS-1$
-			"SYP", // Syria, Pounds //$NON-NLS-1$
-			"SZL", // Swaziland, Emalangeni //$NON-NLS-1$
-			"THB", // Thailand, Baht //$NON-NLS-1$
-			"TJS", // Tajikistan, Somoni //$NON-NLS-1$
-			"TMM", // Turkmenistan, Manats //$NON-NLS-1$
-			"TND", // Tunisia, Dinars //$NON-NLS-1$
-			"TOP", // Tonga, Pa'anga //$NON-NLS-1$
-			"TRL", // Turkey, Liras [being phased out] //$NON-NLS-1$
-			"TRY", // Turkey, New Lira //$NON-NLS-1$
-			"TTD", // Trinidad and Tobago, Dollars //$NON-NLS-1$
-			"TVD", // Tuvalu, Tuvalu Dollars //$NON-NLS-1$
-			"TWD", // Taiwan, New Dollars //$NON-NLS-1$
-			"TZS", // Tanzania, Shillings //$NON-NLS-1$
-			"UAH", // Ukraine, Hryvnia //$NON-NLS-1$
-			"UGX", // Uganda, Shillings //$NON-NLS-1$
-			"USD", // United States of America, Dollars //$NON-NLS-1$
-			"UYU", // Uruguay, Pesos //$NON-NLS-1$
-			"UZS", // Uzbekistan, Sums //$NON-NLS-1$
-			"VEB", // Venezuela, Bolivares //$NON-NLS-1$
-			"VND", // Viet Nam, Dong //$NON-NLS-1$
-			"VUV", // Vanuatu, Vatu //$NON-NLS-1$
-			"WST", // Samoa, Tala //$NON-NLS-1$
-			"XAF", // Communaut�� Financi��re Africaine BEAC, Francs
-			// //$NON-NLS-1$
-			"XAG", // Silver, Ounces //$NON-NLS-1$
-			"XAU", // Gold, Ounces //$NON-NLS-1$
-			"XCD", // East Caribbean Dollars //$NON-NLS-1$
-			"XDR", // International Monetary Fund (IMF) Special Drawing Rights
-			// //$NON-NLS-1$
-			"XOF", // Communaut�� Financi��re Africaine BCEAO, Francs
-			// //$NON-NLS-1$
-			"XPD", // Palladium Ounces //$NON-NLS-1$
-			"XPF", // Comptoirs Fran?ais du Pacifique Francs //$NON-NLS-1$
-			"XPT", // Platinum, Ounces //$NON-NLS-1$
-			"YER", // Yemen, Rials //$NON-NLS-1$
-			"ZAR", // South Africa, Rand //$NON-NLS-1$
-			"ZMK", // Zambia, Kwacha //$NON-NLS-1$
-			"ZWD" // Zimbabwe, Zimbabwe Dollars //$NON-NLS-1$
-	};
-
+public class CellEditorFactory implements ITagAttributeCellEditorFactory {
 	public CellEditor createCellEditor(Composite parent,
-			IAttributeDescriptor attr, Element element) {
+			IPropertyPageDescriptor attr, Element element) {
+		
 		String type = attr.getValueType();
-
-		if (IValueType.ENUMERATED.equalsIgnoreCase(type)) {
-			Map map = new HashMap(attr.getOptions());
-			String defaultValue = attr.getDefaultValue();
-			if (defaultValue == null) {
-				return LabeledComboBoxCellEditor.newInstance(parent, map,
-						SWT.NONE);
-			}
-            return LabeledStyleComboCellEditor.newInstance(parent, map,
-            		defaultValue, SWT.NONE);
-		} else if (IValueType.LOCALE.equalsIgnoreCase(type)) {
-			Map map = new HashMap();
-			Locale[] locales = Locale.getAvailableLocales();
-			for (int i = 0, size = locales.length; i < size; i++) {
-				map.put(locales[i].toString(), locales[i].toString());
-			}
-			return LabeledComboBoxCellEditor.newInstance(parent, map, SWT.NONE);
-		} else if (IValueType.TIMEZONE.equalsIgnoreCase(type)) {
-			Map map = new HashMap();
-			String[] ids = TimeZone.getAvailableIDs();
-			for (int i = 0, size = ids.length; i < size; i++) {
-				map.put(ids[i], ids[i]);
-			}
-			return LabeledComboBoxCellEditor.newInstance(parent, map, SWT.NONE);
-		} else if (IValueType.RELATIVEPATH.equalsIgnoreCase(type)
-				|| IValueType.WEBPATH.equalsIgnoreCase(type)) {
+		
+		IPossibleValues pvs = (IPossibleValues)attr.getAdapter(IPossibleValues.class);
+		IDefaultValue defaultValue = (IDefaultValue)attr.getAdapter(IDefaultValue.class);
+//		ICellEditorValidator validator = (ICellEditorValidator)attr.getAdapter(ICellEditorValidator.class);
+		CellEditor ed = null;
+		if (IAttributeRuntimeValueType.RELATIVEPATH.equalsIgnoreCase(type)|| IAttributeRuntimeValueType.WEBPATH.equalsIgnoreCase(type)) {
 			IProject project = getProject(element);
 			if (project != null) {
+//				String typeParam = TraitValueHelper.getValueAsString(TaglibDomainMetaDataQueryHelper.getTrait(attr.getMetaDataContext().getEntity(),"type-param"));
 				ResourceDialogCellEditor cellEditor = new ResourceDialogCellEditor(
 						parent);
-				cellEditor.setSuffixs(attr.getParameterByName(
-						IAttributeDescriptor.PARAMETER_SUFFIX).split(";"));
-				cellEditor
-						.setSeparator(attr
-								.getParameterByName(IAttributeDescriptor.PARAMETER_SEPARATOR));
+				Trait fileExt = TaglibDomainMetaDataQueryHelper.getTrait(attr.getMetaDataContext().getEntity(), "file-extensions"); //$NON-NLS-1$
+				Trait separator = TaglibDomainMetaDataQueryHelper.getTrait(attr.getMetaDataContext().getEntity(), "separator"); //$NON-NLS-1$
+				String[] fileExts = null;
+				if (fileExt != null){
+					List exts = TraitValueHelper.getValueAsListOfStrings(fileExt);
+					fileExts = (String[])exts.toArray(new String[exts.size()]);
+				} 
+				
+				String sep = null;
+				if (separator != null)
+					sep = TraitValueHelper.getValueAsString(separator);
+				
+				if (fileExts != null)
+					cellEditor.setSuffixs(fileExts);
+				if (sep != null)
+					cellEditor.setSeparator(sep);
+
 				cellEditor.setProject(project);
 				cellEditor.setReferredFile(getFile(element));
-				if ("".equalsIgnoreCase(cellEditor.getSeparator())) {
-					cellEditor.setResourceDescription(ResourceBoundle
-							.getString("FileCellEditor.Msg"));
-				} else {
-					cellEditor.setResourceDescription(ResourceBoundle
-							.getString("FileCellEditor.Msg1"));
-				}
-				if (IValueType.WEBPATH.equalsIgnoreCase(type)) {
+
+				if (IAttributeRuntimeValueType.WEBPATH.equalsIgnoreCase(type)) {
 					cellEditor.setWebPath(true);
 				}
 
@@ -280,180 +88,137 @@
 								.getLocalName())) {
 					cellEditor.setTransformJSPURL(false);
 				}
-				return cellEditor;
+				ed = cellEditor;
 			}
-		} else if (IValueType.CLASSPATH_RESOURCE.equalsIgnoreCase(type)) {
-			return new LoadbundleSelectionCellEditor(parent,
+		} 
+		else if (IAttributeRuntimeValueType.RESOURCEBUNDLE.equals(type)) {
+			ed = new LoadbundleSelectionCellEditor(parent,
 					getProject(element));
-		} else if (IValueType.CSSID.equalsIgnoreCase(type)) {
-		    // TODO: missing case?
-		} else if (IValueType.CSSCLASS.equalsIgnoreCase(type)) {
-			String cssclasses[] = CSSUtil.getCSSClasses(element
-					.getOwnerDocument());
-			Map map = new HashMap();
-			if (cssclasses != null) {
-				for (int i = 0; i < cssclasses.length; i++) {
-					map.put(cssclasses[i], cssclasses[i]);
-				}
-			}
-			return LabeledComboBoxCellEditor.newInstance(parent, map, SWT.NONE);
-		} else if (IValueType.BOOLEAN.equalsIgnoreCase(type)) {
-			String defaultValue = attr
-					.getParameterByName(IAttributeDescriptor.PARAMETER_DEFAULT);
-			Map booleanMap = new HashMap();
-			booleanMap.put(Boolean.TRUE.toString(), Boolean.TRUE.toString());
-			booleanMap.put(Boolean.FALSE.toString(), Boolean.FALSE.toString());
-			if (defaultValue == null) {
-				return LabeledComboBoxCellEditor.newInstance(parent,
-						booleanMap, SWT.NONE);
-			}
-            return LabeledStyleComboCellEditor.newInstance(parent,
-            		booleanMap, defaultValue, SWT.NONE);
-		} else if (IValueType.CSSSTYLE.equalsIgnoreCase(type)) {
-			String param = attr
-					.getParameterByName(IAttributeDescriptor.PARAMETER_STYLE);
-			if (!param.equalsIgnoreCase("STYLE")) {
-				return null;
-			}
-			CSSDialogCellEditor cellEditor = new CSSDialogCellEditor(parent,
-					(IDOMElement) element);
-			return cellEditor;
-		} else if (IValueType.NAMED_BOOLEAN.equalsIgnoreCase(type)) {
-			return NamedBooleanCellEditor.newInstance(parent, SWT.NONE,
-					(IDOMElement) element, attr);
-		} else if (IValueType.CURRENCYCODE.equalsIgnoreCase(type)) {
-			Map map = new HashMap();
-			for (int i = 0, n = CURRENCYCODES.length; i < n; i++) {
-				map.put(CURRENCYCODES[i], CURRENCYCODES[i]);
-			}
-
-			return LabeledComboBoxCellEditor.newInstance(parent, map, SWT.NONE);
 		}
+		else if (IAttributeRuntimeValueType.CSSSTYLE.equalsIgnoreCase(type)) {
+//				String param = getParamterValue(attr, "style");
+////							.getParameterByName(IAttributeDescriptor.PARAMETER_STYLE);
+//				if (!param.equalsIgnoreCase("STYLE")) {
+//					return null;
+//				}
+				CSSDialogCellEditor cellEditor = new CSSDialogCellEditor(parent,
+						(IDOMElement) element);
+				ed = cellEditor;
+		}
+		else if (pvs != null && pvs.getPossibleValues().size() > 0) {
+//			if (validator != null) 
+//				ed = LabeledStyleComboCellEditor.newInstance(parent, pvs,
+//	            		defaultValue, SWT.DROP_DOWN | SWT.READ_ONLY);
+//			else 
+				ed = LabeledStyleComboCellEditor.newInstance(parent, pvs,
+            		defaultValue, SWT.NONE);
+	
+		}
+		
+//		} else if (IAttributeRuntimeValueType.CSSID.equalsIgnoreCase(type)) {
+//		    // TODO: missing case?
 
-		// if there is no type or type unknonw, then we just return null. and
-		// system will
-		// create default (text cell editor).
-		return null;
+		else {
+			ed = new TextCellEditor(parent);
+		}
+//		if (validator != null){
+//			ed.setValidator(validator);
+//		}
+		
+		return ed;
 	}
 
+
+//	private String getParamterValue(IPropertyPageDescriptor attr, String traitKey) {
+//		Trait trait = TaglibDomainMetaDataQueryHelper.getTrait(attr.getMetaDataContext().getEntity(), traitKey);
+//		if (trait != null){
+//			return TraitValueHelper.getValueAsString(trait);
+//		}
+//		return null;
+//	}
+
+
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.jst.pagedesigner.meta.IAttributeCellEditorFactory#createDialogField(org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor,
+	 * @see org.eclipse.jst.pagedesigner.meta.NEWMDIAttributeCellEditorFactory#createDialogField(org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor,
 	 *      org.w3c.dom.Element, org.w3c.dom.Element)
 	 */
-	public DialogField createDialogField(IAttributeDescriptor attr) {
-		String type = attr.getValueType();
+	public DialogField createDialogField(IPropertyPageDescriptor attr) {
 
-		if (IValueType.ENUMERATED.equalsIgnoreCase(type)
-				|| IValueType.LOCALE.equalsIgnoreCase(type)
-				|| IValueType.TIMEZONE.equalsIgnoreCase(type)) {
-			Map map = new HashMap();
-			if (IValueType.ENUMERATED.equalsIgnoreCase(type)) {
-				map = attr.getOptions();
-			} else if (IValueType.LOCALE.equalsIgnoreCase(type)) {
-				Locale[] locales = Locale.getAvailableLocales();
-				for (int i = 0, size = locales.length; i < size; i++) {
-					map.put(locales[i].toString(), locales[i].toString());
-				}
-			} else {
-				String[] ids = TimeZone.getAvailableIDs();
-				for (int i = 0, size = ids.length; i < size; i++) {
-					map.put(ids[i], ids[i]);
-				}
-			}
-			if (map != null && !map.isEmpty()) {
-				String defaultValue = attr.getDefaultValue();
-				if (defaultValue == null || "".equals(defaultValue)) {
-					attr
-							.getParameterByName(IAttributeDescriptor.PARAMETER_DEFAULT);
-				}
-				StyleComboDialogField field = new StyleComboDialogField(
-						SWT.NONE);
-				field.setDefaultValue(defaultValue);
-				field.setLabelText(attr.getLabelString());
-				field.setEntryMap(new TreeMap(map));
-				field.setRequired(attr.isRequired());
-				field.setToolTip(attr.getDescription());
-				return field;
-			}
-			// eles the config is incorrect. fall through, will return null.
-		} else if (IValueType.RELATIVEPATH.equalsIgnoreCase(type)) {
-			String param = attr.getTypeParameter();
+		String type = attr.getValueType();
+		
+		IPossibleValues pvs = (IPossibleValues)attr.getAdapter(IPossibleValues.class);
+//		IDefaultValue defaultValue = (IDefaultValue)attr.getAdapter(IDefaultValue.class);
+//		ICellEditorValidator validator = (ICellEditorValidator)attr.getAdapter(ICellEditorValidator.class);
+		
+		
+
+		if (IAttributeRuntimeValueType.RELATIVEPATH.equals(type) ||
+				IAttributeRuntimeValueType.WEBPATH.equals(type)) {
+			Trait fileExt = TaglibDomainMetaDataQueryHelper.getTrait(attr.getMetaDataContext().getEntity(), "file-extensions"); //$NON-NLS-1$
+			Trait seperator = TaglibDomainMetaDataQueryHelper.getTrait(attr.getMetaDataContext().getEntity(), "separator"); //$NON-NLS-1$
+			
+			String[] fileExts = null;
+			if (fileExt != null){
+				List exts = TraitValueHelper.getValueAsListOfStrings(fileExt);
+				fileExts = (String[])exts.toArray(new String[exts.size()]);
+			} 
+			
+			String sep = null;
+			if (seperator != null)
+				sep = TraitValueHelper.getValueAsString(seperator);
+		
 			ContextableResourceButtonDialogField field = new ContextableResourceButtonDialogField();
-			field.setLabelText(attr.getLabelString());
-			if (param != null) {
-				field.setSuffixs(attr.getParameterByName(
-						IAttributeDescriptor.PARAMETER_SUFFIX).split(";"));
+			field.setLabelText(attr.getLabel());
+			if (fileExts != null) {
+				field.setSuffixs(fileExts);
 			}
-			field.setResourceDescription(ResourceBoundle
-					.getString("FileCellEditor.Msg"));
-			field.setRequired(attr.isRequired());
-			field.setToolTip(attr.getDescription());
-			return field;
-		} else if (IValueType.WEBPATH.equalsIgnoreCase(type)) {
-			String param = attr.getTypeParameter();
-			ContextableResourceButtonDialogField field = new ContextableResourceButtonDialogField();
-			field.setLabelText(attr.getLabelString());
-			if (param != null) {
-				field.setSuffixs(attr.getParameterByName(
-						IAttributeDescriptor.PARAMETER_SUFFIX).split(";"));
-				field
-						.setSeparator(attr
-								.getParameterByName(IAttributeDescriptor.PARAMETER_SEPARATOR));
+			
+			if (sep != null) {
+				field.setSeparator(sep);
 			}
-			if ("".equalsIgnoreCase(field.getSeparator())) {
+			
+			if ("".equalsIgnoreCase(field.getSeparator())) { //$NON-NLS-1$
 				field.setResourceDescription(ResourceBoundle
-						.getString("FileCellEditor.Msg"));
+						.getString("FileCellEditor.Msg")); //$NON-NLS-1$
 			} else {
 				field.setResourceDescription(ResourceBoundle
-						.getString("FileCellEditor.Msg1"));
+						.getString("FileCellEditor.Msg1")); //$NON-NLS-1$
 			}
-			field.setWebPath(true);
+			field.setWebPath(IAttributeRuntimeValueType.WEBPATH.equals(type));
 			field.setRequired(attr.isRequired());
 			field.setToolTip(attr.getDescription());
 			return field;
-		} else if (IValueType.CLASSPATH_RESOURCE.equals(type)) {
-			ContextableClasspathResourceButtonDialogField field = new ContextableClasspathResourceButtonDialogField();
+
+		} else if (IAttributeRuntimeValueType.CLASSPATH_RESOURCE.equals(type) ||
+				IAttributeRuntimeValueType.RESOURCEBUNDLE.equals(type)) {
+			ClasspathResourceButtonDialogField field = new ClasspathResourceButtonDialogField();
 			field.setRequired(attr.isRequired());
 			field.setToolTip(attr.getDescription());
+			field.setLabelText(attr.getLabel());
 			return field;
-		} else if (IValueType.BOOLEAN.equalsIgnoreCase(type)) {
-			String defaultValue = attr
-					.getParameterByName(IAttributeDescriptor.PARAMETER_DEFAULT);
-			StyleComboDialogField field = new StyleComboDialogField(SWT.NONE);
-			TreeMap map = new TreeMap();
-			map.put("", "");
-			map.put(Boolean.FALSE.toString(), Boolean.FALSE.toString());
-			map.put(Boolean.TRUE.toString(), Boolean.TRUE.toString());
-			field.setEntryMap(map);
-			field.setDefaultValue(defaultValue);
-			field.setLabelText(attr.getLabelString());
-			field.setRequired(attr.isRequired());
-			field.setToolTip(attr.getDescription());
-			return field;
-		} else if (IValueType.CSSSTYLE.equalsIgnoreCase(type)) {
-			String param = attr
-					.getParameterByName(IAttributeDescriptor.PARAMETER_STYLE);
-			if (!"STYLE".equalsIgnoreCase(param)) {
-				return null;
-			}
+		} else if (IAttributeRuntimeValueType.CSSSTYLE.equalsIgnoreCase(type)) {
+//			String param = getParamterValue(attr, "style");
+//			if (!"STYLE".equalsIgnoreCase(param)) {
+//				return null;
+//			}
 			StyleButtonDialogField field = new StyleButtonDialogField();
 			field.setRequired(attr.isRequired());
 			field.setToolTip(attr.getDescription());
+			field.setLabelText(attr.getLabel());
 			return field;
-		} else if (IValueType.CURRENCYCODE.equalsIgnoreCase(type)) {
-			ComboDialogField field = new ComboDialogField(SWT.NONE);
-			field.setLabelText(attr.getLabelString());
-			field.setItems(CURRENCYCODES);
-			field.setRequired(attr.isRequired());
+		
+//		// if there is no type or type unknown, then we just return null. and
+//		// system will
+//		// create default (text cell editor).
+		} else if (pvs != null) {
+			MDEnabledComboDialogField field = new MDEnabledComboDialogField(SWT.None);
+			field.setLabelText(attr.getLabel());
 			field.setToolTip(attr.getDescription());
+			field.setRequired(attr.isRequired());
 			return field;
 		}
-
-		// if there is no type or type unknonw, then we just return null. and
-		// system will
-		// create default (text cell editor).
 		return null;
 	}
 
@@ -469,7 +234,7 @@
 	}
 
 	public String[] getSupportedValueTypes() {
-		return null;
+		return null;//default - all!
 	}
 
 	private IFile getFile(Element element) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CellEditorWrapper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CellEditorWrapper.java
index 65ba998..011ff99 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CellEditorWrapper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/CellEditorWrapper.java
@@ -157,7 +157,7 @@
 	 * class override this method to provide image. Rather than setting as
 	 * property.
 	 * 
-	 * @return
+	 * @return image
 	 */
 	protected abstract Image getBindingImage();
 
@@ -168,12 +168,13 @@
 	 * widget, using the same font and background color as the parent control.
 	 * </p>
 	 * <p>
-	 * Subclasses may reimplement. If you reimplement this method, you should
-	 * also reimplement <code>updateContents</code>.
+	 * Subclasses may re-implement. If you re-implement this method, you should
+	 * also re-implement <code>updateContents</code>.
 	 * </p>
 	 * 
 	 * @param cell
 	 *            the control for this cell editor
+	 * @return control
 	 */
 	protected Control createContents(Composite cell) {
 		_wrapped = createWrappedCellEditor(cell);
@@ -221,7 +222,7 @@
 
 	/**
 	 * @param cell
-	 * @return
+	 * @return CellEditor
 	 */
 	protected abstract CellEditor createWrappedCellEditor(Composite cell);
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LabeledComboBoxCellEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LabeledComboBoxCellEditor.java
index 1bbaa02..efd1df0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LabeledComboBoxCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LabeledComboBoxCellEditor.java
@@ -35,6 +35,13 @@
 
 	private Object[] _values;
 
+	/**
+	 * Create LabeledComboBoxCellEditor
+	 * @param parent
+	 * @param valueLabelMap
+	 * @param style
+	 * @return LabeledComboBoxCellEditor
+	 */
 	public static LabeledComboBoxCellEditor newInstance(Composite parent,
 			Map valueLabelMap, int style) {
 		// we'll sort according to label. since that is what being show to user.
@@ -62,8 +69,11 @@
 	}
 
 	/**
+	 * Constructor
+	 * 
 	 * @param parent
-	 * @param items
+	 * @param values
+	 * @param labels
 	 */
 	public LabeledComboBoxCellEditor(Composite parent, Object[] values,
 			String[] labels) {
@@ -71,8 +81,11 @@
 	}
 
 	/**
+	 * Constructor
+	 * 
 	 * @param parent
-	 * @param items
+	 * @param values
+	 * @param labels
 	 * @param style
 	 */
 	public LabeledComboBoxCellEditor(Composite parent, Object[] values,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LabeledStyleComboCellEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LabeledStyleComboCellEditor.java
index a6fbb10..e8a47d5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LabeledStyleComboCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LabeledStyleComboCellEditor.java
@@ -14,19 +14,35 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jst.jsf.common.ui.internal.utils.StyleCombo;
+import org.eclipse.jst.jsf.metadataprocessors.features.IDefaultValue;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValue;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.wst.sse.ui.internal.Logger;
 
+/**
+ * A combo cell editor
+ *
+ */
 public class LabeledStyleComboCellEditor extends StyleComboCellEditor {
 	private boolean _fSettingValue = false;
 
 	private Object[] _values;
 
+	/**
+	 * @param parent
+	 * @param valueLabelMap
+	 * @param defaultValue
+	 * @param style
+	 * @return the new instance
+	 */
 	public static LabeledStyleComboCellEditor newInstance(Composite parent,
 			Map valueLabelMap, String defaultValue, int style) {
 		// we'll sort according to label. since that is what being show to user.
@@ -55,15 +71,20 @@
 	}
 
 	/**
+	 * Constructor
+	 * 
 	 * @param parent
-	 * @param items
+	 * @param values
+	 * @param labels
+	 * @param defaultValue 
 	 * @param style
 	 */
 	public LabeledStyleComboCellEditor(Composite parent, Object[] values,
 			String[] labels, String defaultValue, int style) {
 		super(parent, labels, style);
 		StyleCombo combo = (StyleCombo) getControl();
-		combo.setDefaultValue(defaultValue);
+		if (defaultValue != null)
+			combo.setDefaultValue(defaultValue);
 		_values = values;
 	}
 
@@ -132,4 +153,33 @@
 			}
 		}
 	}
+
+	/**
+	 * Create CellEditor
+	 * @param parent
+	 * @param pvs
+	 * @param defaultValue
+	 * @param style
+	 * @return CellEditor
+	 */
+	public static CellEditor newInstance(Composite parent, IPossibleValues pvs,
+			IDefaultValue defaultValue, int style) {
+	
+		CellEditor ed = null;
+		if (pvs != null) {
+			Map map = getPossibleValueMap(pvs);
+			ed = newInstance(parent, map, defaultValue != null ? defaultValue.getDefaultValue() : null, style);
+		}
+		
+		return ed;
+	}
+
+	private static Map getPossibleValueMap(IPossibleValues pvs) {
+		Map<String, String> map = new HashMap<String, String>(pvs.getPossibleValues().size());
+		for (Iterator it = pvs.getPossibleValues().iterator();it.hasNext();){
+			IPossibleValue pv = (IPossibleValue)it.next();
+			map.put(pv.getValue(), pv.getDisplayValue());
+		}
+		return map;
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LoadbundleSelectionCellEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LoadbundleSelectionCellEditor.java
index a8659c3..1465478 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LoadbundleSelectionCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/LoadbundleSelectionCellEditor.java
@@ -30,6 +30,7 @@
 
 	/**
 	 * @param parent
+	 * @param project 
 	 */
 	public LoadbundleSelectionCellEditor(Composite parent, IProject project) {
 		super(parent);
@@ -45,7 +46,7 @@
 		ResourceOnClasspathDialog dialog = new ResourceOnClasspathDialog(
 				cellEditorWindow.getShell(), DesignerPropertyTool
 						.getJavaProject(_project));
-		dialog.setTitle(ResourceBoundle.getString("FileCellEditor.Title"));
+		dialog.setTitle(ResourceBoundle.getString("FileCellEditor.Title")); //$NON-NLS-1$
 		dialog.setSuffixs(PROPERTIES_FILES_SUFFIXS);
 		dialog.open();
 		if (dialog.getResult() != null) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/NamedBooleanCellEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/NamedBooleanCellEditor.java
index 159e3ec..929fe36 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/NamedBooleanCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/NamedBooleanCellEditor.java
@@ -18,6 +18,7 @@
 /**
  * @author mengbo
  * @version 1.5
+ * Unused???
  */
 public class NamedBooleanCellEditor extends LabeledComboBoxCellEditor {
 	/**
@@ -30,9 +31,16 @@
 		super(parent, values, labels, style);
 	}
 
+	/**
+	 * @param parent
+	 * @param style
+	 * @param element
+	 * @param attribute
+	 * @return the new instance
+	 */
 	public static NamedBooleanCellEditor newInstance(Composite parent,
 			int style, IDOMElement element, IAttributeDescriptor attribute) {
-		String[] values = new String[] { "", attribute.getAttributeName() };
+		String[] values = new String[] { "", attribute.getAttributeName() }; //$NON-NLS-1$
 		return new NamedBooleanCellEditor(parent, values, values, style);
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/OLDCellEditorFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/OLDCellEditorFactory.java
new file mode 100644
index 0000000..bc74e9c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/OLDCellEditorFactory.java
@@ -0,0 +1,483 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. 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:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.celleditors;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TimeZone;
+import java.util.TreeMap;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ComboDialogField;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StyleComboDialogField;
+import org.eclipse.jst.pagedesigner.css2.CSSUtil;
+import org.eclipse.jst.pagedesigner.jsp.core.IJSPCoreConstants;
+import org.eclipse.jst.pagedesigner.meta.IAttributeCellEditorFactory;
+import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
+import org.eclipse.jst.pagedesigner.meta.OLDIValueType;
+import org.eclipse.jst.pagedesigner.ui.dialogfields.ClasspathResourceButtonDialogField;
+import org.eclipse.jst.pagedesigner.ui.dialogfields.ContextableResourceButtonDialogField;
+import org.eclipse.jst.pagedesigner.ui.dialogfields.StyleButtonDialogField;
+import org.eclipse.jst.pagedesigner.utils.StructuredModelUtil;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
+import org.w3c.dom.Element;
+
+/**
+ * 
+ * @author mengbo
+ * @deprecated
+ */
+public class OLDCellEditorFactory implements IAttributeCellEditorFactory {
+	private static String[] CURRENCYCODES = { "AED", // United Arab Emirates, //$NON-NLS-1$
+			// Dirhams //$NON-NLS-1$
+			"AFA", // Afghanistan, Afghanis //$NON-NLS-1$
+			"ALL", // Albania, Leke //$NON-NLS-1$
+			"AMD", // Armenia, Drams //$NON-NLS-1$
+			"ANG", // Netherlands Antilles, Guilders (also called Florins)//$NON-NLS-1$
+			"AOA", // Angola, Kwanza //$NON-NLS-1$
+			"ARS", // Argentina, Pesos //$NON-NLS-1$
+			"AUD", // Australia, Dollars //$NON-NLS-1$
+			"AWG", // Aruba, Guilders (also called Florins) //$NON-NLS-1$
+			"AZM", // Azerbaijan, Manats //$NON-NLS-1$
+			"BAM", // Bosnia and Herzegovina, Convertible Marka //$NON-NLS-1$
+			"BBD", // Barbados, Dollars //$NON-NLS-1$
+			"BDT", // Bangladesh, Taka //$NON-NLS-1$
+			"BGN", // Bulgaria, Leva //$NON-NLS-1$
+			"BHD", // Bahrain, Dinars //$NON-NLS-1$
+			"BIF", // Burundi, Francs //$NON-NLS-1$
+			"BMD", // Bermuda, Dollars //$NON-NLS-1$
+			"BND", // Brunei Darussalam, Dollars //$NON-NLS-1$
+			"BOB", // Bolivia, Bolivianos //$NON-NLS-1$
+			"BRL", // Brazil, Brazil Real //$NON-NLS-1$
+			"BSD", // Bahamas, Dollars //$NON-NLS-1$
+			"BTN", // Bhutan, Ngultrum //$NON-NLS-1$
+			"BWP", // Botswana, Pulas //$NON-NLS-1$
+			"BYR", // Belarus, Rubles //$NON-NLS-1$
+			"BZD", // Belize, Dollars //$NON-NLS-1$
+			"CAD", // Canada, Dollars //$NON-NLS-1$
+			"CDF", // Congo/Kinshasa, Congolese Francs //$NON-NLS-1$
+			"CHF", // Switzerland, Francs //$NON-NLS-1$
+			"CLP", // Chile, Pesos //$NON-NLS-1$
+			"CNY", // China, Yuan Renminbi //$NON-NLS-1$
+			"COP", // Colombia, Pesos //$NON-NLS-1$
+			"CRC", // Costa Rica, Colones //$NON-NLS-1$
+			"CSD", // Serbia, Dinars //$NON-NLS-1$
+			"CUP", // Cuba, Pesos //$NON-NLS-1$
+			"CVE", // Cape Verde, Escudos //$NON-NLS-1$
+			"CYP", // Cyprus, Pounds //$NON-NLS-1$
+			"CZK", // Czech Republic, Koruny //$NON-NLS-1$
+			"DJF", // Djibouti, Francs //$NON-NLS-1$
+			"DKK", // Denmark, Kroner //$NON-NLS-1$
+			"DOP", // Dominican Republic, Pesos //$NON-NLS-1$
+			"DZD", // Algeria, Algeria Dinars //$NON-NLS-1$
+			"EEK", // Estonia, Krooni //$NON-NLS-1$
+			"EGP", // Egypt, Pounds //$NON-NLS-1$
+			"ERN", // Eritrea, Nakfa //$NON-NLS-1$
+			"ETB", // Ethiopia, Birr //$NON-NLS-1$
+			"EUR", // Euro Member Countries, Euro //$NON-NLS-1$
+			"FJD", // Fiji, Dollars //$NON-NLS-1$
+			"FKP", // Falkland Islands (Malvinas), Pounds //$NON-NLS-1$
+			"GBP", // United Kingdom, Pounds //$NON-NLS-1$
+			"GEL", // Georgia, Lari //$NON-NLS-1$
+			"GGP", // Guernsey, Pounds //$NON-NLS-1$
+			"GHC", // Ghana, Cedis //$NON-NLS-1$
+			"GIP", // Gibraltar, Pounds //$NON-NLS-1$
+			"GMD", // Gambia, Dalasi //$NON-NLS-1$
+			"GNF", // Guinea, Francs //$NON-NLS-1$
+			"GTQ", // Guatemala, Quetzales //$NON-NLS-1$
+			"GYD", // Guyana, Dollars //$NON-NLS-1$
+			"HKD", // Hong Kong, Dollars //$NON-NLS-1$
+			"HNL", // Honduras, Lempiras //$NON-NLS-1$
+			"HRK", // Croatia, Kuna //$NON-NLS-1$
+			"HTG", // Haiti, Gourdes //$NON-NLS-1$
+			"HUF", // Hungary, Forint //$NON-NLS-1$
+			"IDR", // Indonesia, Rupiahs //$NON-NLS-1$
+			"ILS", // Israel, New Shekels //$NON-NLS-1$
+			"IMP", // Isle of Man, Pounds //$NON-NLS-1$
+			"INR", // India, Rupees //$NON-NLS-1$
+			"IQD", // Iraq, Dinars //$NON-NLS-1$
+			"IRR", // Iran, Rials //$NON-NLS-1$
+			"ISK", // Iceland, Kronur //$NON-NLS-1$
+			"JEP", // Jersey, Pounds //$NON-NLS-1$
+			"JMD", // Jamaica, Dollars //$NON-NLS-1$
+			"JOD", // Jordan, Dinars //$NON-NLS-1$
+			"JPY", // Japan, Yen //$NON-NLS-1$
+			"KES", // Kenya, Shillings //$NON-NLS-1$
+			"KGS", // Kyrgyzstan, Soms //$NON-NLS-1$
+			"KHR", // Cambodia, Riels //$NON-NLS-1$
+			"KMF", // Comoros, Francs //$NON-NLS-1$
+			"KPW", // Korea (North), Won //$NON-NLS-1$
+			"KRW", // Korea (South), Won //$NON-NLS-1$
+			"KWD", // Kuwait, Dinars //$NON-NLS-1$
+			"KYD", // Cayman Islands, Dollars //$NON-NLS-1$
+			"KZT", // Kazakhstan, Tenge //$NON-NLS-1$
+			"LAK", // Laos, Kips //$NON-NLS-1$
+			"LBP", // Lebanon, Pounds //$NON-NLS-1$
+			"LKR", // Sri Lanka, Rupees //$NON-NLS-1$
+			"LRD", // Liberia, Dollars //$NON-NLS-1$
+			"LSL", // Lesotho, Maloti //$NON-NLS-1$
+			"LTL", // Lithuania, Litai //$NON-NLS-1$
+			"LVL", // Latvia, Lati //$NON-NLS-1$
+			"LYD", // Libya, Dinars //$NON-NLS-1$
+			"MAD", // Morocco, Dirhams //$NON-NLS-1$
+			"MDL", // Moldova, Lei //$NON-NLS-1$
+			"MGA", // Madagascar, Ariary //$NON-NLS-1$
+			"MKD", // Macedonia, Denars //$NON-NLS-1$
+			"MMK", // Myanmar (Burma), Kyats //$NON-NLS-1$
+			"MNT", // Mongolia, Tugriks //$NON-NLS-1$
+			"MOP", // Macau, Patacas //$NON-NLS-1$
+			"MRO", // Mauritania, Ouguiyas //$NON-NLS-1$
+			"MTL", // Malta, Liri //$NON-NLS-1$
+			"MUR", // Mauritius, Rupees //$NON-NLS-1$
+			"MVR", // Maldives (Maldive Islands), Rufiyaa //$NON-NLS-1$
+			"MWK", // Malawi, Kwachas //$NON-NLS-1$
+			"MXN", // Mexico, Pesos //$NON-NLS-1$
+			"MYR", // Malaysia, Ringgits //$NON-NLS-1$
+			"MZM", // Mozambique, Meticais //$NON-NLS-1$
+			"NAD", // Namibia, Dollars //$NON-NLS-1$
+			"NGN", // Nigeria, Nairas //$NON-NLS-1$
+			"NIO", // Nicaragua, Cordobas //$NON-NLS-1$
+			"NOK", // Norway, Krone //$NON-NLS-1$
+			"NPR", // Nepal, Nepal Rupees //$NON-NLS-1$
+			"NZD", // New Zealand, Dollars //$NON-NLS-1$
+			"OMR", // Oman, Rials //$NON-NLS-1$
+			"PAB", // Panama, Balboa //$NON-NLS-1$
+			"PEN", // Peru, Nuevos Soles //$NON-NLS-1$
+			"PGK", // Papua New Guinea, Kina //$NON-NLS-1$
+			"PHP", // Philippines, Pesos //$NON-NLS-1$
+			"PKR", // Pakistan, Rupees //$NON-NLS-1$
+			"PLN", // Poland, Zlotych //$NON-NLS-1$
+			"PYG", // Paraguay, Guarani //$NON-NLS-1$
+			"QAR", // Qatar, Rials //$NON-NLS-1$
+			"ROL", // Romania, Lei //$NON-NLS-1$
+			"RUB", // Russia, Rubles //$NON-NLS-1$
+			"RWF", // Rwanda, Rwanda Francs //$NON-NLS-1$
+			"SAR", // Saudi Arabia, Riyals //$NON-NLS-1$
+			"SBD", // Solomon Islands, Dollars //$NON-NLS-1$
+			"SCR", // Seychelles, Rupees //$NON-NLS-1$
+			"SDD", // Sudan, Dinars //$NON-NLS-1$
+			"SEK", // Sweden, Kronor //$NON-NLS-1$
+			"SGD", // Singapore, Dollars //$NON-NLS-1$
+			"SHP", // Saint Helena, Pounds //$NON-NLS-1$
+			"SIT", // Slovenia, Tolars //$NON-NLS-1$
+			"SKK", // Slovakia, Koruny //$NON-NLS-1$
+			"SLL", // Sierra Leone, Leones //$NON-NLS-1$
+			"SOS", // Somalia, Shillings //$NON-NLS-1$
+			"SPL", // Seborga, Luigini //$NON-NLS-1$
+			"SRD", // Suriname, Dollars //$NON-NLS-1$
+			"STD", // S?o Tome and Principe, Dobras //$NON-NLS-1$
+			"SVC", // El Salvador, Colones //$NON-NLS-1$
+			"SYP", // Syria, Pounds //$NON-NLS-1$
+			"SZL", // Swaziland, Emalangeni //$NON-NLS-1$
+			"THB", // Thailand, Baht //$NON-NLS-1$
+			"TJS", // Tajikistan, Somoni //$NON-NLS-1$
+			"TMM", // Turkmenistan, Manats //$NON-NLS-1$
+			"TND", // Tunisia, Dinars //$NON-NLS-1$
+			"TOP", // Tonga, Pa'anga //$NON-NLS-1$
+			"TRL", // Turkey, Liras [being phased out] //$NON-NLS-1$
+			"TRY", // Turkey, New Lira //$NON-NLS-1$
+			"TTD", // Trinidad and Tobago, Dollars //$NON-NLS-1$
+			"TVD", // Tuvalu, Tuvalu Dollars //$NON-NLS-1$
+			"TWD", // Taiwan, New Dollars //$NON-NLS-1$
+			"TZS", // Tanzania, Shillings //$NON-NLS-1$
+			"UAH", // Ukraine, Hryvnia //$NON-NLS-1$
+			"UGX", // Uganda, Shillings //$NON-NLS-1$
+			"USD", // United States of America, Dollars //$NON-NLS-1$
+			"UYU", // Uruguay, Pesos //$NON-NLS-1$
+			"UZS", // Uzbekistan, Sums //$NON-NLS-1$
+			"VEB", // Venezuela, Bolivares //$NON-NLS-1$
+			"VND", // Viet Nam, Dong //$NON-NLS-1$
+			"VUV", // Vanuatu, Vatu //$NON-NLS-1$
+			"WST", // Samoa, Tala //$NON-NLS-1$
+			"XAF", // Communaut�� Financi��re Africaine BEAC, Francs //$NON-NLS-1$
+			// //$NON-NLS-1$
+			"XAG", // Silver, Ounces //$NON-NLS-1$
+			"XAU", // Gold, Ounces //$NON-NLS-1$
+			"XCD", // East Caribbean Dollars //$NON-NLS-1$
+			"XDR", // International Monetary Fund (IMF) Special Drawing Rights //$NON-NLS-1$
+			// //$NON-NLS-1$
+			"XOF", // Communaut�� Financi��re Africaine BCEAO, Francs //$NON-NLS-1$
+			// //$NON-NLS-1$
+			"XPD", // Palladium Ounces //$NON-NLS-1$
+			"XPF", // Comptoirs Fran?ais du Pacifique Francs //$NON-NLS-1$
+			"XPT", // Platinum, Ounces //$NON-NLS-1$
+			"YER", // Yemen, Rials //$NON-NLS-1$
+			"ZAR", // South Africa, Rand //$NON-NLS-1$
+			"ZMK", // Zambia, Kwacha //$NON-NLS-1$
+			"ZWD" // Zimbabwe, Zimbabwe Dollars //$NON-NLS-1$
+	};
+
+	public CellEditor createCellEditor(Composite parent,
+			IAttributeDescriptor attr, Element element) {
+		String type = attr.getValueType();
+
+		if (OLDIValueType.ENUMERATED.equalsIgnoreCase(type)) {
+			Map map = new HashMap(attr.getOptions());
+			String defaultValue = attr.getDefaultValue();
+			if (defaultValue == null) {
+				return LabeledComboBoxCellEditor.newInstance(parent, map,
+						SWT.NONE);
+			}
+            return LabeledStyleComboCellEditor.newInstance(parent, map,
+            		defaultValue, SWT.NONE);
+		} else if (OLDIValueType.LOCALE.equalsIgnoreCase(type)) {
+			Map map = new HashMap();
+			Locale[] locales = Locale.getAvailableLocales();
+			for (int i = 0, size = locales.length; i < size; i++) {
+				map.put(locales[i].toString(), locales[i].toString());
+			}
+			return LabeledComboBoxCellEditor.newInstance(parent, map, SWT.NONE);
+		} else if (OLDIValueType.TIMEZONE.equalsIgnoreCase(type)) {
+			Map map = new HashMap();
+			String[] ids = TimeZone.getAvailableIDs();
+			for (int i = 0, size = ids.length; i < size; i++) {
+				map.put(ids[i], ids[i]);
+			}
+			return LabeledComboBoxCellEditor.newInstance(parent, map, SWT.NONE);
+		} else if (OLDIValueType.RELATIVEPATH.equalsIgnoreCase(type)
+				|| OLDIValueType.WEBPATH.equalsIgnoreCase(type)) {
+			IProject project = getProject(element);
+			if (project != null) {
+				ResourceDialogCellEditor cellEditor = new ResourceDialogCellEditor(
+						parent);
+				cellEditor.setSuffixs(attr.getParameterByName(
+						IAttributeDescriptor.PARAMETER_SUFFIX).split(";")); //$NON-NLS-1$
+				cellEditor
+						.setSeparator(attr
+								.getParameterByName(IAttributeDescriptor.PARAMETER_SEPARATOR));
+				cellEditor.setProject(project);
+				cellEditor.setReferredFile(getFile(element));
+				if ("".equalsIgnoreCase(cellEditor.getSeparator())) { //$NON-NLS-1$
+					cellEditor.setResourceDescription(ResourceBoundle
+							.getString("FileCellEditor.Msg")); //$NON-NLS-1$
+				} else {
+					cellEditor.setResourceDescription(ResourceBoundle
+							.getString("FileCellEditor.Msg1")); //$NON-NLS-1$
+				}
+				if (OLDIValueType.WEBPATH.equalsIgnoreCase(type)) {
+					cellEditor.setWebPath(true);
+				}
+
+				if (IJSPCoreConstants.TAG_DIRECTIVE_INCLUDE.equals(element
+						.getLocalName())
+						|| IJSPCoreConstants.TAG_INCLUDE.equals(element
+								.getLocalName())) {
+					cellEditor.setTransformJSPURL(false);
+				}
+				return cellEditor;
+			}
+		} else if (OLDIValueType.CLASSPATH_RESOURCE.equalsIgnoreCase(type)) {
+			return new LoadbundleSelectionCellEditor(parent,
+					getProject(element));
+		} else if (OLDIValueType.CSSID.equalsIgnoreCase(type)) {
+		    // TODO: missing case?
+		} else if (OLDIValueType.CSSCLASS.equalsIgnoreCase(type)) {
+			String cssclasses[] = CSSUtil.getCSSClasses(element
+					.getOwnerDocument());
+			Map map = new HashMap();
+			if (cssclasses != null) {
+				for (int i = 0; i < cssclasses.length; i++) {
+					map.put(cssclasses[i], cssclasses[i]);
+				}
+			}
+			return LabeledComboBoxCellEditor.newInstance(parent, map, SWT.NONE);
+		} else if (OLDIValueType.BOOLEAN.equalsIgnoreCase(type)) {
+			String defaultValue = attr
+					.getParameterByName(IAttributeDescriptor.PARAMETER_DEFAULT);
+			Map booleanMap = new HashMap();
+			booleanMap.put(Boolean.TRUE.toString(), Boolean.TRUE.toString());
+			booleanMap.put(Boolean.FALSE.toString(), Boolean.FALSE.toString());
+			if (defaultValue == null) {
+				return LabeledComboBoxCellEditor.newInstance(parent,
+						booleanMap, SWT.NONE);
+			}
+            return LabeledStyleComboCellEditor.newInstance(parent,
+            		booleanMap, defaultValue, SWT.NONE);
+		} else if (OLDIValueType.CSSSTYLE.equalsIgnoreCase(type)) {
+			String param = attr
+					.getParameterByName(IAttributeDescriptor.PARAMETER_STYLE);
+			if (!param.equalsIgnoreCase("STYLE")) { //$NON-NLS-1$
+				return null;
+			}
+			CSSDialogCellEditor cellEditor = new CSSDialogCellEditor(parent,
+					(IDOMElement) element);
+			return cellEditor;
+		} else if (OLDIValueType.NAMED_BOOLEAN.equalsIgnoreCase(type)) {
+			return NamedBooleanCellEditor.newInstance(parent, SWT.NONE,
+					(IDOMElement) element, attr);
+		} else if (OLDIValueType.CURRENCYCODE.equalsIgnoreCase(type)) {
+			Map map = new HashMap();
+			for (int i = 0, n = CURRENCYCODES.length; i < n; i++) {
+				map.put(CURRENCYCODES[i], CURRENCYCODES[i]);
+			}
+
+			return LabeledComboBoxCellEditor.newInstance(parent, map, SWT.NONE);
+		}
+
+		// if there is no type or type unknonw, then we just return null. and
+		// system will
+		// create default (text cell editor).
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jst.pagedesigner.meta.IAttributeCellEditorFactory#createDialogField(org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor,
+	 *      org.w3c.dom.Element, org.w3c.dom.Element)
+	 */
+	public DialogField createDialogField(IAttributeDescriptor attr) {
+		String type = attr.getValueType();
+
+		if (OLDIValueType.ENUMERATED.equalsIgnoreCase(type)
+				|| OLDIValueType.LOCALE.equalsIgnoreCase(type)
+				|| OLDIValueType.TIMEZONE.equalsIgnoreCase(type)) {
+			Map map = new HashMap();
+			if (OLDIValueType.ENUMERATED.equalsIgnoreCase(type)) {
+				map = attr.getOptions();
+			} else if (OLDIValueType.LOCALE.equalsIgnoreCase(type)) {
+				Locale[] locales = Locale.getAvailableLocales();
+				for (int i = 0, size = locales.length; i < size; i++) {
+					map.put(locales[i].toString(), locales[i].toString());
+				}
+			} else {
+				String[] ids = TimeZone.getAvailableIDs();
+				for (int i = 0, size = ids.length; i < size; i++) {
+					map.put(ids[i], ids[i]);
+				}
+			}
+			if (map != null && !map.isEmpty()) {
+				String defaultValue = attr.getDefaultValue();
+				if (defaultValue == null || "".equals(defaultValue)) { //$NON-NLS-1$
+					attr
+							.getParameterByName(IAttributeDescriptor.PARAMETER_DEFAULT);
+				}
+				StyleComboDialogField field = new StyleComboDialogField(
+						SWT.NONE);
+				field.setDefaultValue(defaultValue);
+				field.setLabelText(attr.getLabelString());
+				field.setEntryMap(new TreeMap(map));
+				field.setRequired(attr.isRequired());
+				field.setToolTip(attr.getDescription());
+				return field;
+			}
+			// eles the config is incorrect. fall through, will return null.
+		} else if (OLDIValueType.RELATIVEPATH.equalsIgnoreCase(type)) {
+			String param = attr.getTypeParameter();
+			ContextableResourceButtonDialogField field = new ContextableResourceButtonDialogField();
+			field.setLabelText(attr.getLabelString());
+			if (param != null) {
+				field.setSuffixs(attr.getParameterByName(
+						IAttributeDescriptor.PARAMETER_SUFFIX).split(";")); //$NON-NLS-1$
+			}
+			field.setResourceDescription(ResourceBoundle
+					.getString("FileCellEditor.Msg")); //$NON-NLS-1$
+			field.setRequired(attr.isRequired());
+			field.setToolTip(attr.getDescription());
+			return field;
+		} else if (OLDIValueType.WEBPATH.equalsIgnoreCase(type)) {
+			String param = attr.getTypeParameter();
+			ContextableResourceButtonDialogField field = new ContextableResourceButtonDialogField();
+			field.setLabelText(attr.getLabelString());
+			if (param != null) {
+				field.setSuffixs(attr.getParameterByName(
+						IAttributeDescriptor.PARAMETER_SUFFIX).split(";")); //$NON-NLS-1$
+				field
+						.setSeparator(attr
+								.getParameterByName(IAttributeDescriptor.PARAMETER_SEPARATOR));
+			}
+			if ("".equalsIgnoreCase(field.getSeparator())) { //$NON-NLS-1$
+				field.setResourceDescription(ResourceBoundle
+						.getString("FileCellEditor.Msg")); //$NON-NLS-1$
+			} else {
+				field.setResourceDescription(ResourceBoundle
+						.getString("FileCellEditor.Msg1")); //$NON-NLS-1$
+			}
+			field.setWebPath(true);
+			field.setRequired(attr.isRequired());
+			field.setToolTip(attr.getDescription());
+			return field;
+		} else if (OLDIValueType.CLASSPATH_RESOURCE.equals(type)) {
+			ClasspathResourceButtonDialogField field = new ClasspathResourceButtonDialogField();
+			field.setRequired(attr.isRequired());
+			field.setToolTip(attr.getDescription());
+			return field;
+		} else if (OLDIValueType.BOOLEAN.equalsIgnoreCase(type)) {
+			String defaultValue = attr
+					.getParameterByName(IAttributeDescriptor.PARAMETER_DEFAULT);
+			StyleComboDialogField field = new StyleComboDialogField(SWT.NONE);
+			TreeMap map = new TreeMap();
+			map.put("", ""); //$NON-NLS-1$ //$NON-NLS-2$
+			map.put(Boolean.FALSE.toString(), Boolean.FALSE.toString());
+			map.put(Boolean.TRUE.toString(), Boolean.TRUE.toString());
+			field.setEntryMap(map);
+			field.setDefaultValue(defaultValue);
+			field.setLabelText(attr.getLabelString());
+			field.setRequired(attr.isRequired());
+			field.setToolTip(attr.getDescription());
+			return field;
+		} else if (OLDIValueType.CSSSTYLE.equalsIgnoreCase(type)) {
+			String param = attr
+					.getParameterByName(IAttributeDescriptor.PARAMETER_STYLE);
+			if (!"STYLE".equalsIgnoreCase(param)) { //$NON-NLS-1$
+				return null;
+			}
+			StyleButtonDialogField field = new StyleButtonDialogField();
+			field.setRequired(attr.isRequired());
+			field.setToolTip(attr.getDescription());
+			return field;
+		} else if (OLDIValueType.CURRENCYCODE.equalsIgnoreCase(type)) {
+			ComboDialogField field = new ComboDialogField(SWT.NONE);
+			field.setLabelText(attr.getLabelString());
+			field.setItems(CURRENCYCODES);
+			field.setRequired(attr.isRequired());
+			field.setToolTip(attr.getDescription());
+			return field;
+		}
+
+		// if there is no type or type unknonw, then we just return null. and
+		// system will
+		// create default (text cell editor).
+		return null;
+	}
+
+	private IProject getProject(Element element) {
+		if (element instanceof IDOMElement) {
+			IDOMModel model = ((IDOMElement) element).getModel();
+			IFile file = StructuredModelUtil.getFileFor(model);
+			if (file != null) {
+				return file.getProject();
+			}
+		}
+		return null;
+	}
+
+	public String[] getSupportedValueTypes() {
+		return null;
+	}
+
+	private IFile getFile(Element element) {
+		if (element instanceof IDOMElement) {
+			IDOMModel model = ((IDOMElement) element).getModel();
+			IFile file = StructuredModelUtil.getFileFor(model);
+			return file;
+		}
+		return null;
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/ResourceBoundle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/ResourceBoundle.java
index 7f00ed6..b3eeac5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/ResourceBoundle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/ResourceBoundle.java
@@ -28,6 +28,10 @@
         // no external instantiation
 	}
 
+	/**
+	 * @param key
+	 * @return the value for the key or !!key!!
+	 */
 	public static String getString(String key) {
 		try {
 			return RESOURCE_BUNDLE.getString(key);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/ResourceDialogCellEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/ResourceDialogCellEditor.java
index 894ebd3..0eced33 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/ResourceDialogCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/ResourceDialogCellEditor.java
@@ -40,47 +40,40 @@
 
 	private boolean _needTransformJSPURL = true;
 
-	private String _separator = "";
+	private String _separator = ""; //$NON-NLS-1$
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor()
+
+	/**
+	 * Constructor
 	 */
 	public ResourceDialogCellEditor() {
 		super();
 	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor(Composite parent)
+	
+	/**
+	 * Constructor
+	 * @param parent 
 	 */
 	public ResourceDialogCellEditor(Composite parent) {
 		super(parent);
 	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see DialogCellEditor#DialogCellEditor(Composite parent, int style)
+	
+	/**
+	 * Constructor
+	 * @param parent 
+	 * @param style 
 	 */
 	public ResourceDialogCellEditor(Composite parent, int style) {
 		super(parent, style);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.viewers.DialogCellEditor#openDialogBox(org.eclipse.swt.widgets.Control)
-	 */
 	protected Object openDialogBox(Control cellEditorWindow) {
 		Shell shell = cellEditorWindow.getShell();
-		int style = "".equals(_separator) ? SWT.NONE : SWT.MULTI | SWT.H_SCROLL
+		int style = "".equals(_separator) ? SWT.NONE : SWT.MULTI | SWT.H_SCROLL //$NON-NLS-1$
 				| SWT.V_SCROLL;
 		CommonResourceDialog dialog = new CommonResourceDialog(shell, _project,
 				style);
-		dialog.setTitle(ResourceBoundle.getString("FileCellEditor.Title"));
+		dialog.setTitle(ResourceBoundle.getString("FileCellEditor.Title")); //$NON-NLS-1$
 		dialog.setSuffixs(_suffixs);
 		dialog.setResourceDescription(_resourceDescription);
 		if (dialog.open() == Window.OK) {
@@ -153,6 +146,15 @@
 	 * @return Returns the resourceDescription.
 	 */
 	public String getResourceDescription() {
+		if (_resourceDescription == null) {
+			if ("".equalsIgnoreCase(getSeparator())) { //$NON-NLS-1$
+				_resourceDescription = ResourceBoundle
+						.getString("FileCellEditor.Msg"); //$NON-NLS-1$
+			} else {
+				_resourceDescription = ResourceBoundle
+						.getString("FileCellEditor.Msg1"); //$NON-NLS-1$
+			}			
+		}
 		return _resourceDescription;
 	}
 
@@ -165,7 +167,7 @@
 	}
 
 	/**
-	 * @return Returns the suffixs.
+	 * @return Returns the suffixes.
 	 */
 	public String[] getSuffixs() {
 		return _suffixs;
@@ -173,7 +175,7 @@
 
 	/**
 	 * @param suffixs
-	 *            The suffixs to set.
+	 *            The suffixes to set.
 	 */
 	public void setSuffixs(String[] suffixs) {
 		this._suffixs = suffixs;
@@ -188,14 +190,23 @@
 		this._isWebPath = isWebPath;
 	}
 
+	/**
+	 * @param needTransform
+	 */
 	public void setTransformJSPURL(boolean needTransform) {
 		this._needTransformJSPURL = needTransform;
 	}
 
+	/**
+	 * @return separator to use for between values
+	 */
 	public String getSeparator() {
 		return _separator;
 	}
 
+	/**
+	 * @param separator to use for between values
+	 */
 	public void setSeparator(String separator) {
 		this._separator = separator;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/StyleComboCellEditor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/StyleComboCellEditor.java
index 037f5cb..dba336d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/StyleComboCellEditor.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/celleditors/StyleComboCellEditor.java
@@ -29,6 +29,10 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 
+/**
+ * Combo cell editor
+ *
+ */
 public class StyleComboCellEditor extends CellEditor {
 	/**
 	 * The list of items to present in the combo box.
@@ -50,14 +54,26 @@
 	 */
 	private static final int defaultStyle = SWT.NONE;
 
+	/**
+	 * Default constructor
+	 */
 	public StyleComboCellEditor() {
 		setStyle(defaultStyle);
 	}
 
+	/**
+	 * @param parent
+	 * @param items
+	 */
 	public StyleComboCellEditor(Composite parent, String[] items) {
 		this(parent, items, defaultStyle);
 	}
 
+	/**
+	 * @param parent
+	 * @param items
+	 * @param style
+	 */
 	public StyleComboCellEditor(Composite parent, String[] items, int style) {
 		super(parent, style);
 		setItems(items);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/dialogfields/MDEnabledComboDialogField.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/dialogfields/MDEnabledComboDialogField.java
new file mode 100644
index 0000000..e63245f
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/dialogfields/MDEnabledComboDialogField.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Oracle - initial API and implementation
+ *
+ ********************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.dialogfields;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StyleComboDialogField;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.metadataprocessors.features.IDefaultValue;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValue;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.properties.attrgroup.IElementContextable;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+
+/**
+ * This combo dialog field defers loading the combos until the element context has been set
+ *
+ */
+public class MDEnabledComboDialogField extends StyleComboDialogField implements IElementContextable {
+
+	/**
+	 * Constructor
+	 * @param flags
+	 */
+	public MDEnabledComboDialogField(int flags) {
+		super(flags);
+	}
+
+	public void setElementContext(IDOMNode ancester, IDOMElement element) {
+		IStructuredDocumentContext sdContext =IStructuredDocumentContextFactory.INSTANCE.getContext(element.getStructuredDocument(), element);
+		IPropertyPageDescriptor ppd = (IPropertyPageDescriptor)getAttachedData("KEY_ATTR");//FIXME use constant //$NON-NLS-1$
+		ppd.setStructuredDocumentContext(sdContext);
+		IPossibleValues pvs = (IPossibleValues)ppd.getAdapter(IPossibleValues.class);
+		IDefaultValue def = (IDefaultValue)ppd.getAdapter(IDefaultValue.class);
+		if (def != null)
+			setDefaultValue(def.getDefaultValue());
+		if (pvs.getPossibleValues() != null)
+			setEntryMap(getMapOfPossibleValues(pvs));
+	}
+
+	private Map getMapOfPossibleValues(IPossibleValues pvs) {
+		Map map = new TreeMap<String, String>();
+		for (Iterator<IPossibleValue> it=pvs.getPossibleValues().iterator();it.hasNext();){
+			IPossibleValue pv = it.next();
+			map.put(pv.getValue(), pv.getDisplayValue());
+		}
+		return map;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AllPropertySectionDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AllPropertySectionDescriptor.java
new file mode 100644
index 0000000..8c5de9b
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AllPropertySectionDescriptor.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import org.eclipse.jst.pagedesigner.properties.AllPropertySection;
+import org.eclipse.ui.views.properties.tabbed.AbstractSectionDescriptor;
+import org.eclipse.ui.views.properties.tabbed.ISection;
+
+/**
+ * SectionDescriptor for the WPE Attributes tab
+ */
+public class AllPropertySectionDescriptor extends AbstractSectionDescriptor {
+	/**
+	 * Id for the WPE AllPropertySectionDescriptor
+	 */
+	public static final String ID = "AllPropertySectionDescriptor"; //$NON-NLS-1$
+
+	private ISection section;
+
+	public String getId() {
+		return ID;
+	}
+
+	public ISection getSectionClass() {
+		if (section == null){
+			section = new AllPropertySection();
+		}
+		return section;
+	}
+
+	public String getTargetTab() {
+		return AttributesTabDescriptor.TAB_ID;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AttributeGroup.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AttributeGroup.java
new file mode 100644
index 0000000..deb9225
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AttributeGroup.java
@@ -0,0 +1,423 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. 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:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogFieldGroup;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldApplyListener;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldChangeListener;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.jsf.metadataprocessors.MetaDataEnabledProcessingFactory;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.properties.attrgroup.IElementContextable;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+
+/**
+ * @author mengbo
+ * @version 1.5
+ * 
+ * TODO: cleanup up constructors
+ */
+public class AttributeGroup extends DialogFieldGroup {
+	private static final Object KEY_ATTR = "KEY_ATTR"; //$NON-NLS-1$
+
+//	private String _helpContextId;
+
+	private List<DialogField> _dialogFields = null;  //consider using Map
+	private IDOMElement _ownerElement;
+	private Entity _tagEntity;
+	private List<String> _attrNames;
+	private List<IPropertyPageDescriptor> _attrPDs;
+
+	private String _uri;
+	private String _tagName;
+	
+	/**
+	 * Constructor
+	 * @param tagEntity - may not be null
+	 * @param attrNames - may not be null.  Attribute names must be valid for the tag, and have attribute-value-runtime-type trait info
+	 */
+	public AttributeGroup(Entity tagEntity, List<String> attrNames) {
+		_tagEntity = tagEntity;
+		_attrNames = attrNames;		
+	}
+	
+	/**
+	 * Constructor where tagEntity is determined later or set later
+	 * @param uri - may be null
+	 * @param tagName - may be null
+	 * @param attributeNames - may not be null.  Attribute names must be valid for the tag, and have attribute-value-runtime-type trait info
+	 */
+	public AttributeGroup(String uri,
+			String tagName, String[] attributeNames) {
+		_uri = uri;
+		_tagName = tagName;
+		if (attributeNames != null)
+			_attrNames = Arrays.asList(attributeNames);
+		else 
+			_attrNames = new ArrayList();
+	}
+	
+	private List<IPropertyPageDescriptor> prepareDescriptors(Entity tagEntity,
+			List<String> names) {
+		
+		List pds = new ArrayList();
+		for (String attrName : names) {
+			IPropertyPageDescriptor pd = getPD(tagEntity, attrName);
+			if (pd != null)
+				pds.add(pd);
+		}
+		return pds;
+	}
+
+	private IPropertyPageDescriptor getPD(Entity tagEntity, String attrName) {		
+		IPropertyPageDescriptor pd = null;
+		Entity attrEntity = TaglibDomainMetaDataQueryHelper.getEntity(tagEntity, attrName);
+		if (attrEntity != null){
+			List pds = MetaDataEnabledProcessingFactory.getInstance().getAttributeValueRuntimeTypeFeatureProcessors(
+							IPropertyPageDescriptor.class, null/* can we get this null info?   do we need/want it? */, attrEntity);					
+			if (pds != null && !pds.isEmpty())
+				pd = (IPropertyPageDescriptor)pds.get(0);
+			else 
+				pd = new DefaultPropertyPageDescriptor(tagEntity, attrEntity);
+		}
+		return pd;
+	}
+
+//	/**
+//	 * Constructor
+//	 */
+//	public AttributeGroup() {
+//		//
+//	}
+
+
+	/**
+	 * @return tag entity for this attribute group
+	 */
+	protected Entity getTagEntity() {
+		if (_tagEntity == null) {
+			if (_ownerElement != null){
+				IStructuredDocumentContext context = IStructuredDocumentContextFactory.INSTANCE.getContext(_ownerElement.getStructuredDocument(), 0);
+				if (context != null){
+					String uri = _uri != null ? _uri : IStructuredDocumentContextResolverFactory.INSTANCE.getDOMContextResolver(context).getNode().getBaseURI();
+					String tagName = _tagName != null ? _tagName :  IStructuredDocumentContextResolverFactory.INSTANCE.getDOMContextResolver(context).getNode().getNodeName();
+					if (uri != null){
+						IProject project = IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(context).getProject();
+						_tagEntity = TaglibDomainMetaDataQueryHelper.getEntity(TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(project, uri), tagName);
+					}
+				}
+			}
+		}
+		return _tagEntity;
+	}
+	/**
+	 * @return tag name
+	 */
+	public String getTagName() {
+		if (getTagEntity() == null)
+			return _tagName;
+		return getTagEntity().getId();
+	}
+
+	/**
+	 * @return tag URI
+	 */
+	public String getURI() {
+		if (getTagEntity() == null)
+			return _uri;
+		return getTagEntity().getModel().getCurrentModelContext().getUri();
+	}
+
+
+	/**
+	 * Empty implementation. Subclasses should override to override default dialogField creation
+	 * @param ppd
+	 * @return DialogField
+	 */
+	protected DialogField createDialogField(IPropertyPageDescriptor ppd) {
+		return null;
+	}
+	
+//	protected DialogField createDialogField(String uri, String tag,
+//			String attr) {
+//		
+//		return null;
+//	}
+	
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogFieldGroup#initialize()
+	 */
+	public void initialize() {
+		if (_dialogFields == null) {
+			_dialogFields = new ArrayList();
+
+			for (IPropertyPageDescriptor pd : getAttributePDs()) {
+				DialogField field;			
+				field = createDialogField(pd);
+				
+				if (field == null) {
+					field = pd.getDialogFieldEditor();
+				}
+
+				field.putAttachedData(KEY_ATTR, pd);//descriptors[i]);
+
+				IDialogFieldApplyListener applyListener = getDialogFieldApplyListener(pd);
+//						getURI(), getTagName(), pd.getAttributeName());//descriptors[i]);
+				if (applyListener == null) {
+					applyListener = getDefaultApplyListener();
+				}
+				field.setDialogFieldApplyListener(applyListener);
+
+				IDialogFieldChangeListener changeListener = getDialogFieldChangeListener(pd);
+//						getURI(), getTagName(), pd.getAttributeName());//descriptors[i]);
+				if (changeListener == null) {
+					changeListener = getDefaultChangeListener();
+				}
+				field.setDialogFieldChangeListener(changeListener);
+				_dialogFields.add(field);
+			}
+		}
+	}
+
+	private List<IPropertyPageDescriptor> getAttributePDs() {
+		if (_attrPDs == null){
+			_attrPDs = prepareDescriptors(getTagEntity(), _attrNames);
+		}
+		return _attrPDs;
+	}
+
+	/**
+	 * Child class can override the method to provide listener implementation
+	 * 
+	 * @param ppd
+	 * @return IDialogFieldApplyListener
+	 */
+	protected IDialogFieldApplyListener getDialogFieldApplyListener(IPropertyPageDescriptor ppd) {
+		return null;
+	}
+
+	/**
+	 * Child class can override the method to provide listener implementation
+	 * 
+	 * @param ppd
+	 * @return IDialogFieldChangeListener
+	 */
+	protected IDialogFieldChangeListener getDialogFieldChangeListener(IPropertyPageDescriptor ppd){
+			return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogFieldGroup#refreshData()
+	 */
+	public void refreshData() {
+		if (_ownerElement == null) {
+			return;
+		}
+		initialize();
+		for (int i = 0, size = _dialogFields.size(); i < size; i++) {
+			DialogField field = _dialogFields.get(i);
+
+			ISupportTextValue textValue = (ISupportTextValue) field;
+			IPropertyPageDescriptor attr = (IPropertyPageDescriptor) field
+					.getAttachedData(KEY_ATTR);
+			String attrName = attr.getAttributeName();
+			String attrValue = _ownerElement.getAttribute(attrName);
+			textValue.setTextWithoutUpdate(attrValue);
+		}
+	}
+
+	/**
+	 * @return IDOMElement
+	 */
+	public IDOMElement getElement() {
+		return _ownerElement;
+	}
+
+	/**
+	 * Sets the context in each of the dialogFields in the Group
+	 * @param context
+	 * @param owner
+	 */
+	public void setElementContext(IDOMNode context, IDOMElement owner) {
+		this._ownerElement = owner;
+		initialize();
+		if (context != null) {
+			for (int i = 0, size = _dialogFields.size(); i < size; i++) {
+				DialogField field = _dialogFields.get(i);
+				if (field instanceof IElementContextable) {
+					((IElementContextable) field).setElementContext(context,
+							owner);
+				}
+			}
+		}
+		refreshData();
+	}
+
+	public void layoutDialogFields(FormToolkit toolkit, Composite parent) {
+		Composite top;
+		if (toolkit == null) {//when being displayed by DialogFieldGroupPage  (wizard)
+			top = new Composite(parent, SWT.NONE);
+			FillLayout fillLayout = new FillLayout(SWT.VERTICAL);
+			parent.setLayout(fillLayout);
+		} else {
+			top = toolkit.createComposite(parent, SWT.NONE);
+		}
+//		FillLayout fillLayout = new FillLayout(SWT.VERTICAL);
+//		parent.setLayout(fillLayout);
+
+//		if (this._helpContextId != null && this._helpContextId.length() > 0) {
+//			PlatformUI.getWorkbench().getHelpSystem().setHelp(top,
+//					_helpContextId);
+//		}
+
+		GridLayout layout = new GridLayout();
+		int numColumns = getNumColumns();
+		layout.numColumns = numColumns;
+		top.setLayout(layout);
+//		top.setLayoutData(new RowData());
+		
+		initialize();
+		for (int i = 0, size = _dialogFields.size(); i < size; i++) {
+			DialogField field = _dialogFields.get(i);
+			field.doFillIntoGrid(toolkit, top, numColumns);
+		}
+
+		DialogField maxColumnField = null;
+		int maxColumn = 0;
+		for (int i = 0, size = _dialogFields.size(); i < size; i++) {
+			DialogField field = _dialogFields.get(i);
+			int c = field.getNumberOfControls();
+			if (c > maxColumn) {
+				maxColumn = c;
+				maxColumnField = field;
+			}
+		}
+		if (maxColumnField != null) {
+			maxColumnField.handleGrabHorizontal();
+		}
+	}
+
+	/**
+	 * @return number of columns in for composite grid layout
+	 */
+	public int getNumColumns() {
+		int columns = 1;
+		initialize();
+		for (int i = 0, size = _dialogFields.size(); i < size; i++) {
+			DialogField field = _dialogFields.get(i);
+			columns = Math.max(columns, field.getNumberOfControls());
+		}
+		return columns;
+	}
+	
+	@Override
+	public IStatus[] validateDialogFields() {
+		return null;
+	}
+
+	/**
+	 * @return DialogField[]
+	 */
+	public DialogField[] getDialogFields() {
+		initialize();
+		DialogField[] ret = new DialogField[_dialogFields.size()];
+		_dialogFields.toArray(ret);
+		return ret;
+	}
+
+	/**
+	 * get the dialogfield for the corresponding attribute.
+	 * 
+	 * @param attrName
+	 *            case sensitive attribute name.
+	 * @return null if fail to find.
+	 */
+	public DialogField getDialogField(String attrName) {
+		initialize();
+		for (int i = 0, size = _dialogFields.size(); i < size; i++) {
+			DialogField field = _dialogFields.get(i);
+			IPropertyPageDescriptor attr = this.getPropertyDescriptor(field);
+			if (attr != null && attr.getAttributeName().equals(attrName)) {
+				return field;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * @param field
+	 * @return IPropertyPageDescriptor
+	 */
+	public IPropertyPageDescriptor getPropertyDescriptor(DialogField field) {
+		Object obj = field.getAttachedData(KEY_ATTR);
+		if (obj instanceof IPropertyPageDescriptor) {
+			return (IPropertyPageDescriptor) obj;
+		}
+	    return null;
+	}
+	
+	@Override
+	public void reset(){
+		if (_dialogFields != null){
+			for (DialogField field : _dialogFields){
+				field.setDialogFieldApplyListener(null);
+				field.setDialogFieldChangeListener(null);
+			}
+			_dialogFields = null;
+		}
+	}
+
+	/**
+	 * Set the tag entity
+	 * @param tagEntity
+	 */
+	/*package*/ void setTagEntity(Entity tagEntity) {
+		_tagEntity = tagEntity;		
+	}
+
+	public String toString(){
+		StringBuffer buf = new StringBuffer("AttributeGroup: uri="); //$NON-NLS-1$
+		buf.append("\r\r").append(getURI()).append("\r\rtag=").append(getTagName()); //$NON-NLS-1$ //$NON-NLS-2$
+		buf.append("\r\rAttrs: "); //$NON-NLS-1$
+		for (int i=0;i<_attrNames.size();i++) {
+			String attr = _attrNames.get(i);
+			buf.append(attr);
+			if (i<_attrNames.size())
+				buf.append(", "); //$NON-NLS-1$
+		}
+		return buf.toString();
+	}
+	
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AttributeGroupSection.java
similarity index 69%
copy from jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupSection.java
copy to jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AttributeGroupSection.java
index 8ec170f..49a49e4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupSection.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AttributeGroupSection.java
@@ -9,19 +9,23 @@
  * Contributors:
  *     Sybase, Inc. - initial API and implementation
  *******************************************************************************/
-package org.eclipse.jst.pagedesigner.properties.attrgroup;
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import java.util.List;
 
 import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jst.jsf.common.metadata.Entity;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldApplyListener;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue;
 import org.eclipse.jst.pagedesigner.commands.single.ChangeAttributeCommand;
-import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
 import org.eclipse.jst.pagedesigner.properties.BaseCustomSection;
+import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupMessages;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage;
-import org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetWidgetFactory;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
 import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
 
 /**
@@ -32,7 +36,6 @@
  */
 public class AttributeGroupSection extends BaseCustomSection {
 	private static final Object KEY_ATTR = "KEY_ATTR"; //$NON-NLS-1$
-
 	private IDialogFieldApplyListener _fieldApplyListener = new IDialogFieldApplyListener() {
 		/*
 		 * (non-Javadoc)
@@ -41,32 +44,31 @@
 		 */
 		public void dialogFieldApplied(DialogField field) {
 			Object attr = field.getAttachedData(KEY_ATTR);
-			if (attr instanceof IAttributeDescriptor && _element != null) {
+			if (attr instanceof IPropertyPageDescriptor && _element != null) {
 				ISupportTextValue textValue = (ISupportTextValue) field;
 				ChangeAttributeCommand c = new ChangeAttributeCommand(
 						AttributeGroupMessages
-								.getString("AttributeGroupSection.changeAttribute"), _element, ((IAttributeDescriptor) attr).getAttributeName(), textValue.getText()); //$NON-NLS-1$
+								.getString("AttributeGroupSection.changeAttribute"), _element, ((IPropertyPageDescriptor) attr).getAttributeName(), textValue.getText()); //$NON-NLS-1$
 				c.execute();
 			}
 		}
 	};
 
-	protected AttributeGroup _group;
+	private AttributeGroup _group;
 
 	/**
-	 * create the section with a default AttributeGroup. In default
+	 * Constructor.  Create the section with a default AttributeGroup. In default
 	 * AttributeGroup, there is no relationship between fields.
 	 * 
-	 * @param uri
-	 * @param tagName
+	 * @param tagEntity
 	 * @param attrNames
 	 */
-	public AttributeGroupSection(String uri, String tagName, String[] attrNames) {
-		this(new AttributeGroup(uri, tagName, attrNames));
+	public AttributeGroupSection(Entity tagEntity, List<String> attrNames) {
+		this(new AttributeGroup(tagEntity, attrNames));
 	}
 
 	/**
-	 * In case the group is not a default group (e.g. you may add some
+	 * Constructor.  In case the group is not a default group (e.g. you may add some
 	 * customized relationship between the fields).
 	 * 
 	 * @param group
@@ -74,26 +76,14 @@
 	public AttributeGroupSection(AttributeGroup group) {
 		_group = group;
 		_group.setDefaultApplyListener(_fieldApplyListener);
-		_group.initialize();
+//		_group.initialize();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.AbstractPropertySection#setInput(org.eclipse.ui.IWorkbenchPart,
-	 *      org.eclipse.jface.viewers.ISelection)
-	 */
 	public void setInput(IWorkbenchPart part, ISelection selection) {
 		super.setInput(part, selection);
 		_group.setElementContext(_element, _element);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.pagedesigner.integration.properties.section.AbstractCustomSection#createControls(org.eclipse.swt.widgets.Composite,
-	 *      org.eclipse.wst.common.ui.properties.internal.provisional.TabbedPropertySheetPage)
-	 */
 	public void createControls(Composite parent,
 			TabbedPropertySheetPage aTabbedPropertySheetPage) {
 		super.createControls(parent, aTabbedPropertySheetPage);
@@ -108,4 +98,18 @@
 			_group.refreshData();
 		}
 	}
+
+	@Override
+	public void dispose() {
+		super.dispose();
+		_group.reset();
+	}
+	
+	/**
+	 * NOT API - for JUnit testing only
+	 * @return @link{AttributeGroup}
+	 */
+	public AttributeGroup getAttributeGroup() {		
+		return _group;
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AttributesTabDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AttributesTabDescriptor.java
new file mode 100644
index 0000000..4c00440
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/AttributesTabDescriptor.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.ui.views.properties.tabbed.AbstractTabDescriptor;
+import org.eclipse.ui.views.properties.tabbed.ISectionDescriptor;
+
+/**
+ * Attributes tab descriptor
+ *
+ */
+public class AttributesTabDescriptor extends AbstractTabDescriptor {
+	
+	/**
+	 * Attributes tab id 
+	 */
+	public static final String TAB_ID = "jst.pagedesigner.tabbed.properties.attributes"; //$NON-NLS-1$
+
+	private Vector<ISectionDescriptor> descriptors;
+	
+	/**
+	 * Constructor
+	 */
+	public AttributesTabDescriptor(){
+		super();
+		descriptors = new Vector<ISectionDescriptor>(1);
+		descriptors.add(new AllPropertySectionDescriptor());
+	}
+	
+	@Override
+	public List getSectionDescriptors() {		
+		return descriptors;
+	}
+
+	public String getCategory() {
+		return "attributes"; //$NON-NLS-1$
+	}
+
+	public String getId() {
+		return TAB_ID;
+	}
+
+	public String getLabel() {
+		return Messages.AttributesTabDescriptor_label;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/DefaultPropertyPageDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/DefaultPropertyPageDescriptor.java
new file mode 100644
index 0000000..2d85115
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/DefaultPropertyPageDescriptor.java
@@ -0,0 +1,140 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.metadataprocessors.MetaDataContext;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
+import org.eclipse.jst.pagedesigner.meta.EditorCreator;
+import org.eclipse.jst.pagedesigner.meta.IAttributeRuntimeValueType;
+import org.eclipse.jst.pagedesigner.meta.internal.CellEditorFactoryRegistry;
+import org.eclipse.jst.pagedesigner.properties.ITabbedPropertiesConstants;
+import org.eclipse.swt.widgets.Composite;
+import org.w3c.dom.Element;
+
+/**
+ * Property descriptor implementation for when meta data is available, but the
+ * meta data type is not adaptable to a {@link IPropertyPageDescriptor}.
+ * 
+ * It is assumed that the value type is
+ * {@link org.eclipse.jst.jsf.taglibprocessing.attributevalues.StringType}.
+ */
+public class DefaultPropertyPageDescriptor implements IPropertyPageDescriptor
+{
+    private Entity _tagEntity;
+    private Entity _attrEntity;
+
+    private IStructuredDocumentContext _sdContext;
+    private MetaDataContext _mdContext;
+
+    /**
+     * Constructor
+     * 
+     * @param tagEntity
+     * @param attrEntity
+     */
+    public DefaultPropertyPageDescriptor(Entity tagEntity, Entity attrEntity)
+    {
+        _tagEntity = tagEntity;
+        _attrEntity = attrEntity;
+    }
+
+    public String getAttributeName()
+    {
+        return _attrEntity.getId();
+    }
+
+    public String getCategory()
+    {
+        return ITabbedPropertiesConstants.OTHER_CATEGORY;
+    }
+
+    public CellEditor getCellEditor(Composite parent)
+    {
+        Element element = (Element) IStructuredDocumentContextResolverFactory.INSTANCE
+                .getDOMContextResolver(getStructuredDocumentContext())
+                .getNode();
+        return CellEditorFactoryRegistry.getInstance().createCellEditor(parent,
+                this, element);
+    }
+
+    public String getDescription()
+    {
+        return null;
+    }
+
+    public DialogField getDialogFieldEditor()
+    {
+        EditorCreator creator = EditorCreator.getInstance();
+        return creator.createDialogFieldWithWrapper(getUri(), getTagName(),
+                this, null);
+    }
+
+    public String getLabel()
+    {
+        return getAttributeName() + ":";
+    }
+
+    public String getTagName()
+    {
+        return _tagEntity.getId();
+    }
+
+    public String getUri()
+    {
+        return _tagEntity.getModel().getCurrentModelContext().getUri();
+    }
+
+    public String getValueType()
+    {
+        return IAttributeRuntimeValueType.STRING;
+    }
+
+    public boolean isRequired()
+    {
+        return false;
+    }
+
+    public MetaDataContext getMetaDataContext()
+    {
+        return _mdContext;
+    }
+
+    public IStructuredDocumentContext getStructuredDocumentContext()
+    {
+        return _sdContext;
+    }
+
+    public void setMetaDataContext(MetaDataContext context)
+    {
+        _mdContext = context;
+    }
+
+    public void setStructuredDocumentContext(IStructuredDocumentContext context)
+    {
+        _sdContext = context;
+    }
+
+    public Object getAdapter(Class adapter)
+    {
+        return null;
+    }
+
+    public String toString()
+    {
+        return getUri()
+                + "/" + getTagName() + "/" + getAttributeName() + " (Default Descriptor)"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+    }
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/DesignerSectionDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/DesignerSectionDescriptor.java
deleted file mode 100644
index f95a3fb..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/DesignerSectionDescriptor.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.properties.internal;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jst.jsf.common.ui.internal.utils.StringUtil;
-import org.eclipse.jst.jsf.core.internal.tld.CMUtil;
-import org.eclipse.jst.pagedesigner.PDPlugin;
-import org.eclipse.jst.pagedesigner.properties.DesignerPropertyTool;
-import org.eclipse.jst.pagedesigner.properties.ISectionFilter;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroup;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.AttributeGroupSection;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISection;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ITypeMapper;
-import org.w3c.dom.Element;
-
-/**
- * @author mengbo
- * @version 1.5
- */
-public class DesignerSectionDescriptor implements ISectionDescriptor {
-	private static final String ATT_ID = "id"; //$NON-NLS-1$
-
-	private static final String ATT_TARGET_TAB = "tab"; //$NON-NLS-1$
-
-	private static final String ATT_AFTER_SECTION = "afterSection"; //$NON-NLS-1$  
-
-	private static final String ATT_CLASS = "class"; //$NON-NLS-1$ 
-
-	private static final String ATT_FILTER = "filter"; //$NON-NLS-1$
-
-	private static final String TOP = "top"; //$NON-NLS-1$
-
-	private static final String TAGFILTER = "tagFilter";
-
-	private static final String CASESENSITIVE = "caseSensitive";
-
-	private static final String TAGNAME = "tagName";
-
-	private static final String URI = "uri";
-
-	private String _id;
-
-	private String _targetTab;
-
-	private String _afterSection;
-
-	private ISectionFilter _sectionFilter;
-
-	private IConfigurationElement _configurationElement;
-
-	private TagFilter[] _tagFilters;
-
-	private static class TagFilter {
-		public String uri;
-
-		public String tag;
-
-		public boolean caseSensitive = false;
-	}
-
-	/**
-	 * Constructor for the section descriptor.
-	 * 
-	 * @param configurationElement
-	 *            the configuration element for the section descriptor.
-	 */
-	public DesignerSectionDescriptor(IConfigurationElement configurationElement) {
-		_configurationElement = configurationElement;
-
-		_id = getConfigurationElement().getAttribute(ATT_ID);
-		_targetTab = getConfigurationElement().getAttribute(ATT_TARGET_TAB);
-		_afterSection = getConfigurationElement().getAttribute(
-				ATT_AFTER_SECTION);
-
-		if (_id == null || _targetTab == null) {
-			// the section id and tab are mandatory - log error
-			handleSectionError(null);
-		}
-		if (getAfterSection() == null) {
-			_afterSection = TOP;
-		}
-
-		String filterClass = getConfigurationElement().getAttribute(ATT_FILTER);
-		if (filterClass != null) {
-			try {
-				Object obj = getConfigurationElement()
-						.createExecutableExtension(ATT_FILTER);
-				if (obj instanceof ISectionFilter) {
-					_sectionFilter = (ISectionFilter) obj;
-				}
-			} catch (CoreException ex) {
-				handleSectionError(ex);
-			}
-		}
-
-		IConfigurationElement[] elements = getConfigurationElement()
-				.getChildren(TAGFILTER);
-		if (elements != null && elements.length > 0) {
-			_tagFilters = new TagFilter[elements.length];
-			for (int i = 0; i < _tagFilters.length; i++) {
-				_tagFilters[i] = new TagFilter();
-				_tagFilters[i].uri = elements[i].getAttribute(URI);
-				_tagFilters[i].tag = elements[i].getAttribute(TAGNAME);
-				_tagFilters[i].caseSensitive = Boolean.TRUE.toString()
-						.equalsIgnoreCase(
-								elements[i].getAttribute(CASESENSITIVE));
-			}
-		}
-	}
-
-	/**
-	 * Handle the section error when an issue is found loading from the
-	 * configuration element.
-	 * 
-	 * @param _configurationElement
-	 *            the configuration element
-	 * @param exception
-	 *            an optional CoreException
-	 */
-	private void handleSectionError(CoreException exception) {
-		PDPlugin.getLogger(DesignerSectionDescriptor.class).error("error",
-				exception);
-		exception.printStackTrace();
-		// String pluginId = PDPlugin.getPluginId();
-		// String message = MessageFormat.format(SECTION_ERROR, new Object[] {
-		// pluginId});
-		// IStatus status = new Status(IStatus.ERROR, pluginId,
-		// CommonUIPropertiesStatusCodes.GENERAL_UI_FAILURE, message,
-		// exception);
-		// CommonUIPropertiesPlugin.getPlugin().getLog().log(status);
-	}
-
-	/**
-	 * @see org.eclipse.wst.common.ui.properties.ITabbedPropertySectionDescriptor#getId()
-	 */
-	public String getId() {
-		return _id;
-	}
-
-	/**
-	 * @see org.eclipse.wst.common.ui.properties.ITabbedPropertySectionDescriptor#getTargetTab()
-	 */
-	public String getTargetTab() {
-		return _targetTab;
-	}
-
-	/**
-	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor#appliesTo(org.eclipse.ui.IWorkbenchPart,
-	 *      org.eclipse.jface.viewers.ISelection)
-	 */
-	public boolean appliesTo(IWorkbenchPart part, ISelection selection) {
-		Element node = DesignerPropertyTool.getElement(part, selection);
-		if (node == null) {
-			return false;
-		}
-		if (_tagFilters != null) {
-			String uri = CMUtil.getElementNamespaceURI(node);
-			String tag = node.getLocalName();
-			for (int i = 0; i < _tagFilters.length; i++) {
-				if (!match(uri, tag, _tagFilters[i])) {
-					return false;
-				}
-			}
-		}
-		if (_sectionFilter != null) {
-			if (!_sectionFilter.appliesTo(node)) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	/**
-	 * @param uri2
-	 * @param tag
-	 * @param filter
-	 * @return
-	 */
-	private boolean match(String uri, String tag, TagFilter filter) {
-		if (!StringUtil.isSameString(uri, filter.uri)) {
-			return false;
-		}
-		if (uri != null && filter.uri != null && !uri.equals(filter.uri)) {
-			return false;
-		}
-		if (filter.caseSensitive) {
-			return tag.equals(filter.tag);
-		}
-        return tag.equalsIgnoreCase(filter.tag);
-	}
-
-	/**
-	 * @see org.eclipse.wst.common.ui.properties.ITabbedPropertySectionDescriptor#getAfterSection()
-	 */
-	public String getAfterSection() {
-		return _afterSection;
-	}
-
-	/**
-	 * Creates an instance of a section described by this descriptor
-	 * 
-	 * @see org.eclipse.wst.common.ui.properties.ITabbedPropertySectionDescriptor#getSectionClass()
-	 */
-	public ISection getSectionClass() {
-		ISection section = null;
-		try {
-			Object secOrGroup = getConfigurationElement()
-					.createExecutableExtension(ATT_CLASS);
-			if (secOrGroup instanceof ISection) {
-				section = (ISection) secOrGroup;
-			} else if (secOrGroup instanceof AttributeGroup) {
-				section = new AttributeGroupSection((AttributeGroup) secOrGroup);
-			}
-		} catch (CoreException exception) {
-			handleSectionError(exception);
-		}
-
-		return section;
-	}
-
-	/**
-	 * Gets the input types that are valid for this section.
-	 * 
-	 * @see org.eclipse.wst.common.ui.properties.ITabbedPropertySectionDescriptor#getInputTypes()
-	 */
-	public List getInputTypes() {
-		return Collections.EMPTY_LIST;
-	}
-
-	/**
-	 * @see java.lang.Object#toString()
-	 */
-	public String toString() {
-		return getId();
-	}
-
-	/**
-	 * @return Returns the configurationElement.
-	 */
-	private IConfigurationElement getConfigurationElement() {
-		return _configurationElement;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor#getFilter()
-	 */
-	public ITypeMapper getFilter() {
-		return null;
-	}
-
-	public int getEnablesFor() {
-		return 1;
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/DesignerTabPropertySectionDescriptorProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/DesignerTabPropertySectionDescriptorProvider.java
deleted file mode 100644
index 81276e8..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/DesignerTabPropertySectionDescriptorProvider.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.properties.internal;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jst.pagedesigner.PDPlugin;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptor;
-import org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptorProvider;
-
-/**
- * The DesignerTagPropertySectionDescriptorProvider will provide the section
- * descriptiors. Now section descriptor come from two sources.
- * 
- * One is reading from the "org.eclipse.jst.pagedesigner.propertyContributor"
- * extension point. This extension point will contribute additional section
- * providers, which provides a set of sections.
- * 
- * One is reading from the "org.eclipse.jst.pagedesigner.propertySections"
- * extension point. This extension provide a single section.
- * 
- * @author mengbo
- * @version 1.5
- */
-public class DesignerTabPropertySectionDescriptorProvider implements
-		ISectionDescriptorProvider {
-	private static final String EXTPT_SECTIONS = "propertySections"; //$NON-NLS-1$
-
-	private static final String ELEMENT_SECTION = "propertySection"; //$NON-NLS-1$
-
-	private static final String EXTPT_SECTIONDESCRIPTORPROVIDER = "propertyContributor";
-
-	private static final String ELEMENT_PROPERTYCONTRIBUTOR = "propertyContributor";
-
-	private static final String ATTR_SECTIONDESCRIPTORPROVIDER = "sectionDescriptorProvider";
-
-	ISectionDescriptor[] _descriptors = null;
-
-	/**
-	 * 
-	 */
-	public DesignerTabPropertySectionDescriptorProvider() {
-		super();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.common.ui.properties.internal.provisional.ISectionDescriptorProvider#getSectionDescriptors()
-	 */
-	public ISectionDescriptor[] getSectionDescriptors() {
-		if (_descriptors == null) {
-			List result = new ArrayList();
-			List contributedSections = readSectionDescriptors();
-			result.addAll(contributedSections);
-
-			List providers = readAdditionalSectionDescriptorProviders();
-			for (int i = 0, size = providers.size(); i < size; i++) {
-				try {
-					ISectionDescriptorProvider provider = (ISectionDescriptorProvider) providers
-							.get(i);
-					ISectionDescriptor[] sections = provider
-							.getSectionDescriptors();
-					if (sections != null) {
-						result.addAll(Arrays.asList(sections));
-					}
-				} catch (Exception ex) {
-					// ignore
-					ex.printStackTrace();
-				}
-			}
-			_descriptors = new ISectionDescriptor[result.size()];
-			result.toArray(_descriptors);
-		}
-		return _descriptors;
-	}
-
-	protected List readAdditionalSectionDescriptorProviders() {
-		List result = new ArrayList();
-		IConfigurationElement[] extensions = getConfigurationElements(EXTPT_SECTIONDESCRIPTORPROVIDER);
-		for (int i = 0; i < extensions.length; i++) {
-			IConfigurationElement extension = extensions[i];
-			if (ELEMENT_PROPERTYCONTRIBUTOR.equals(extension.getName())) {
-				IConfigurationElement contributor = extension;
-				try {
-					Object obj = contributor
-							.createExecutableExtension(ATTR_SECTIONDESCRIPTORPROVIDER);
-					if (obj instanceof ISectionDescriptorProvider) {
-						result.add(obj);
-					}
-				} catch (CoreException ex) {
-					ex.printStackTrace();
-				}
-			}
-		}
-		return result;
-	}
-
-	protected List readSectionDescriptors() {
-		List result = new ArrayList();
-		IConfigurationElement[] extensions = getConfigurationElements(EXTPT_SECTIONS);
-		for (int i = 0; i < extensions.length; i++) {
-			IConfigurationElement extension = extensions[i];
-			IConfigurationElement[] sections = extension
-					.getChildren(ELEMENT_SECTION);
-			for (int j = 0; j < sections.length; j++) {
-				IConfigurationElement section = sections[j];
-				ISectionDescriptor descriptor = new DesignerSectionDescriptor(
-						section);
-				result.add(descriptor);
-			}
-		}
-		return result;
-	}
-
-	public static IConfigurationElement[] getConfigurationElements(
-			String extensionPointId) {
-		IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
-				.getExtensionPoint(PDPlugin.getPluginId(), extensionPointId);
-
-		if (extensionPoint == null) {
-			return null;
-		}
-		return extensionPoint.getConfigurationElements();
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/MDQuickEditTabSectionDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/MDQuickEditTabSectionDescriptor.java
new file mode 100644
index 0000000..e1628d4
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/MDQuickEditTabSectionDescriptor.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.views.properties.tabbed.AbstractSectionDescriptor;
+import org.eclipse.ui.views.properties.tabbed.ISection;
+
+/**
+ * Quick Edit section descriptor that uses the quickEditSection trait meta data for the tag entity of the selection
+ * to determine the sections to display
+ *
+ */
+public class MDQuickEditTabSectionDescriptor extends AbstractSectionDescriptor {
+	
+	/**
+	 * Default constructor
+	 */
+	public MDQuickEditTabSectionDescriptor() {
+		super();
+	}
+	
+	@Override
+	public boolean appliesTo(IWorkbenchPart part, ISelection selection) {
+		return true;// we will always display tab, but will show text that no quick edit properties are available when they aren't
+	}
+	
+	public ISection getSectionClass() {
+		return new  QuickEditTabSection();
+	}
+
+	public String getTargetTab() {
+		return QuickEditTabDescriptor.TAB_ID;
+	}
+
+	public String getId() {
+		return "mdQuickEditTabSections"; //$NON-NLS-1$
+	}
+	
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/Messages.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/Messages.java
new file mode 100644
index 0000000..275a500
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/Messages.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * Externalized strings
+ *
+ */
+public class Messages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.jst.pagedesigner.properties.internal.messages"; //$NON-NLS-1$
+	/**
+	 * 
+	 */
+	public static String AttributesTabDescriptor_label;
+	/**
+	 * 
+	 */
+	public static String QuickEditTabDescriptor_label;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+
+	private Messages() {
+		//
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/NullQuickEditTabGroupDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/NullQuickEditTabGroupDescriptor.java
new file mode 100644
index 0000000..893b6ab
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/NullQuickEditTabGroupDescriptor.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.ui.views.properties.tabbed.ISection;
+
+/**
+ * QuickEdit Tab section when quick edit section info is not available.
+ * 
+ * Ideally we should not be displaying the tab in the absence of MD, but due to current 
+ * issues with the tabbed-properties framework, it is easier to simply display a "null"
+ * section. 
+ *
+ */
+public class NullQuickEditTabGroupDescriptor extends
+		QuickEditTabSectionsDescriptor {
+
+	private List<ISection> nullQuickEditSection;
+	
+	/**
+	 * Constructor
+	 */
+	public NullQuickEditTabGroupDescriptor() {
+		super();
+	}
+
+	@Override
+	public List<ISection> getSections() {
+		return nullQuickEditSection;
+	}
+	
+	@Override
+	public void calculateSections() {
+		nullQuickEditSection = new ArrayList<ISection>(1);
+		nullQuickEditSection.add(new NullQuickEditTabSection());
+	}
+	
+	
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/NullQuickEditTabSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/NullQuickEditTabSection.java
new file mode 100644
index 0000000..11712bf
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/NullQuickEditTabSection.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import org.eclipse.jst.pagedesigner.PDPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
+
+/**
+ * Section that displays text that no quick edit properties are available for the input
+ */
+public class NullQuickEditTabSection extends AbstractPropertySection {
+
+	@Override
+	public void createControls(Composite parent,
+			TabbedPropertySheetPage tabbedPropertySheetPage) {
+		super.createControls(parent, tabbedPropertySheetPage);
+		TabbedPropertySheetWidgetFactory factory = tabbedPropertySheetPage.getWidgetFactory();
+		
+		Composite cont = factory.createComposite(parent, SWT.NO_FOCUS);
+		GridLayout layout = new GridLayout(1, false);
+		cont.setLayout(layout);
+
+		CLabel lbl = 
+			factory.createCLabel(cont, PDPlugin.getResourceString("QuickEditTab.no_quick_edit_md"));//$NON-NLS-1$
+		lbl.setLayoutData(new GridData());		
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabDescriptor.java
new file mode 100644
index 0000000..5917065
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabDescriptor.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import org.eclipse.ui.views.properties.tabbed.AbstractTabDescriptor;
+
+/**
+ * Quick Edit Tab Descriptor
+ */
+public class QuickEditTabDescriptor extends AbstractTabDescriptor {
+
+	/**
+	 * Quick Edit tab id
+	 */
+	public static final String TAB_ID = "jst.pagedesigner.tabbed.properties.quickedit"; //$NON-NLS-1$
+	
+	/**
+	 * Constructor
+	 */
+	public QuickEditTabDescriptor(){
+		super();
+		getSectionDescriptors().add(new MDQuickEditTabSectionDescriptor());
+	}
+	
+	public String getCategory() {
+		return "quickedit"; //$NON-NLS-1$
+	}
+
+	public String getId() {
+		return TAB_ID;
+	}
+
+	public String getLabel() {
+		return Messages.QuickEditTabDescriptor_label;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabManager.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabManager.java
new file mode 100644
index 0000000..f14058a
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabManager.java
@@ -0,0 +1,215 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import javax.xml.namespace.QName;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.jsf.common.metadata.Trait;
+import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.ITaglibContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
+import org.eclipse.jst.pagedesigner.editors.HTMLEditor;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections;
+import org.eclipse.jst.pagedesigner.properties.DesignerPropertyTool;
+import org.eclipse.jst.pagedesigner.properties.WPETabbedPropertySheetPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.FileEditorInput;
+import org.w3c.dom.Element;
+
+/**
+ * One-to-one with {@link WPETabbedPropertySheetPage} that manages the current sections for the current selection.
+ * <p>
+ * The QuickEditTabManager has a shared instance of a {@link QuickEditTabSectionsManager} for the project.
+ * <p>
+ * When a WPETabbedPropertySheetPage is created, it must acquire a QuickEditTabManager using the static acquireInstance method,
+ * and then release the instance when it is disposed.  This ensures that the QuickEditTabSectionsManager shared instance (per project) is released appropriately.
+ * <p>
+ * selectionChanged method must be called prior to calling createControls on the sections for this tab group call.
+ */
+public class QuickEditTabManager {
+	private QuickEditTabSectionsManager _groupsManager;
+	private QuickEditTabSections _quickEditTabSections;
+	private Entity _tagEntity;
+	private QName _lastTagID;
+	private QuickEditTabSectionsDescriptor _lastQuickEditTabGroup;
+	private QuickEditTabSectionsDescriptor _nullQuickEditTabGroup;
+	private Element _lastElement;
+	
+	private QuickEditTabSectionsManager getRegistry() {
+		return _groupsManager;
+	}
+
+	/**
+	 * Must only be called once per tabbed property sheet as ref count is kept.  
+	 * Callers must call releaseInstance when the page is disposed
+	 * @param page 
+	 * @return instance for this property sheet
+	 */
+	public static synchronized QuickEditTabManager acquireInstance(WPETabbedPropertySheetPage page) {
+		IProject project = getProject(page);	
+		QuickEditTabManager instance = new QuickEditTabManager();
+		instance._groupsManager = QuickEditTabSectionsManager.acquireInstance(project);
+		return instance;		
+	}
+
+	/**
+	 * Releases this instance, but does not dispose.  Ensures that the {@link QuickEditTabSectionsManager} is released.
+	 */
+	public synchronized void releaseInstance() {
+		this._groupsManager.releaseInstance();			
+	}
+	
+	/**
+	 * Private constructor
+	 */
+	private QuickEditTabManager(){
+		//
+	}
+	
+	private static IProject getProject(WPETabbedPropertySheetPage page) {
+		IProject proj = null;
+		IDocument doc = ((HTMLEditor)page.getEditor()).getDocument();
+		IStructuredDocumentContext context = IStructuredDocumentContextFactory.INSTANCE.getContext(doc, 0);
+		if (context != null){
+			proj = IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(context).getProject();
+		}
+		return proj;
+		 
+	}
+	/**
+	 * Must be called so that the sections for the input can be calculated. 
+	 * 
+	 * @param part
+	 * @param selection
+	 * @return true if current selection is different than during the last call
+	 */
+	public boolean selectionChanged(IWorkbenchPart part, ISelection selection) {
+		boolean hasChanged = false;
+		QuickEditTabSections qets = getQuickTabSectionsMetaData(part, selection); 
+		if (qets == null) {//use null quick edit tab			
+			hasChanged = (_quickEditTabSections != null);
+			_quickEditTabSections = qets;
+			_lastQuickEditTabGroup = getNullQuickEditTab();
+			_lastTagID = null;
+		}
+		else {
+			QName tagId = getTagId();
+			if (_lastTagID == null || !_lastTagID.equals(tagId)){
+				_quickEditTabSections = qets;
+				QuickEditTabSectionsDescriptor group = getRegistry().getQuickEditTabSectionsFor(tagId);
+				if (group == null){
+					group = createQuickEditTabGroup(tagId, _quickEditTabSections);
+					if (group != null){					
+						group.calculateSections();
+						getRegistry().addQuickEditTabGroupDescriptor(group);
+					}
+				}
+				_lastQuickEditTabGroup = group;
+				_lastTagID = tagId;
+			}
+		} 
+
+		return hasChanged;
+	}
+	
+	/**
+	 * @return current QuickEditTabSectionsDescriptor
+	 */
+	public QuickEditTabSectionsDescriptor getCurrentTabGroupDescriptor() {
+		return _lastQuickEditTabGroup;
+	}
+	
+	private QuickEditTabSections getQuickTabSectionsMetaData(IWorkbenchPart part,
+			ISelection selection) {
+
+		Element node = DesignerPropertyTool.getElement(part, selection);
+		if (node == null) {
+			return null;
+		}
+		if (_lastElement != node){
+			_lastElement = node;
+			_quickEditTabSections = null;
+			_tagEntity = getTagEntity(part, selection, node);
+			if (_tagEntity != null) {
+				Trait pds = TaglibDomainMetaDataQueryHelper.getTrait(_tagEntity, QuickEditTabSections.TRAIT_ID);
+				if (pds != null){
+					_quickEditTabSections = (QuickEditTabSections)pds.getValue();
+				}		
+			}			
+		}
+		return _quickEditTabSections;
+	}
+
+	private QuickEditTabSectionsDescriptor createQuickEditTabGroup(QName tagId,
+			QuickEditTabSections tabSections) {
+		return new QuickEditTabSectionsDescriptor(_tagEntity, tagId, tabSections);
+	}
+
+	private QName getTagId() {
+		return TaglibDomainMetaDataQueryHelper.getQNameForTagEntity(_tagEntity);
+	}
+
+	/**
+	 * Dispose
+	 */
+	public void dispose() {		
+		_lastQuickEditTabGroup= null;
+		_lastElement = null;
+		_lastTagID = null;		
+		_nullQuickEditTabGroup = null;
+		_quickEditTabSections = null;
+		_groupsManager = null;
+	}
+	
+	private Entity getTagEntity(IWorkbenchPart part, ISelection selection, Element node){
+		HTMLEditor ed = null;
+		if (part instanceof HTMLEditor)
+			ed = (HTMLEditor)part;
+		if (ed == null)
+			return null;
+		
+		FileEditorInput input = (FileEditorInput)ed.getEditorInput();
+		IStructuredDocumentContext context = IStructuredDocumentContextFactory.INSTANCE.getContext(ed.getDocument(), node);
+		if (context != null){
+			ITaglibContextResolver resolver = IStructuredDocumentContextResolverFactory.INSTANCE.getTaglibContextResolver(context);
+			if (resolver != null){
+				ITaglibDomainMetaDataModelContext mdContext = TaglibDomainMetaDataQueryHelper.createMetaDataModelContext(input.getFile().getProject(),resolver.getTagURIForNodeName(node));
+				return TaglibDomainMetaDataQueryHelper.getEntity(mdContext, node.getLocalName());
+			}
+		}
+		return null;		
+	}
+	
+	private QuickEditTabSectionsDescriptor getNullQuickEditTab() {
+		if (_nullQuickEditTabGroup == null) {
+			_nullQuickEditTabGroup = new NullQuickEditTabGroupDescriptor();
+			_nullQuickEditTabGroup.calculateSections();
+		}
+		return _nullQuickEditTabGroup;
+	}
+
+	/**
+	 * NOT API - for JUnit testing only
+	 * @return {@link QuickEditTabSectionsManager} 
+	 */	
+	public QuickEditTabSectionsManager getQuickEditTabSectionsManager() {
+		return _groupsManager;
+	}
+
+	
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSection.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSection.java
new file mode 100644
index 0000000..172626c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSection.java
@@ -0,0 +1,209 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jst.pagedesigner.properties.WPETabbedPropertySheetPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Layout;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
+import org.eclipse.ui.views.properties.tabbed.ISection;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+
+/**
+ * Using the tag entity's QuickEditTabSections meta-data, this section reacts to changes in selection,
+ * and will dynamically create a QuickEditTabGroup.   The QuickEditTabGroup is cached and reused.
+ * <br><br>
+ * This section delegates construction to the sections discovered thru meta data.   
+ * Because this section is not disposed of until the tab is disposed, this section will enforce the expected section lifecycle
+ * on the sections loaded from meta data.   This occurs during setInput.  But will pass on all section lifecycle events as 
+ * this section receives them.
+ * <br><br>
+ * The lifecycle that this section enforces on it's child sections in the setInput call on this section are (in order):
+ * 	<li>createControls
+ * 	<li>setInput
+ *  <li>aboutToBeShown
+ *  <li>refresh
+ *  
+ * When tab section lifecycle events occur to this section, they are passed on to all child sections also. 
+ * 	
+ */
+public class QuickEditTabSection extends AbstractPropertySection {
+	
+	private QuickEditTabManager manager;
+	private Composite _composite;
+	private Composite _qeGroupComposite;
+	private WPETabbedPropertySheetPage _tabbedPropertySheetPage;
+
+	private QuickEditTabManager getTabManager() {
+		if (manager == null) {
+			manager = _tabbedPropertySheetPage.getTabManager();
+		}
+		return manager;
+	}
+
+	@Override
+	public void createControls(Composite parent,
+			TabbedPropertySheetPage tabbedPropertySheetPage) {
+		super.createControls(parent, tabbedPropertySheetPage);
+		_composite = parent;
+		_tabbedPropertySheetPage = (WPETabbedPropertySheetPage)tabbedPropertySheetPage;
+	}
+
+	@Override
+	public void setInput(IWorkbenchPart part, ISelection selection) {
+		super.setInput(part, selection);
+		if (getTabManager() != null){
+			aboutToBeHidden();
+			createOrResetQuickEditGroupComposite();//disposes of old and recreates new topComp
+			getTabManager().selectionChanged(part, selection);
+			for (ISection section : getSections()){
+				section.createControls(_qeGroupComposite, _tabbedPropertySheetPage);
+				section.setInput(part, selection);
+			}
+			_composite.getParent().layout(true, true);
+			
+			aboutToBeShown();
+			refresh();
+		}			
+	}
+
+	@Override
+	public void aboutToBeHidden() {
+		super.aboutToBeHidden();
+		for (ISection section : getSections()){
+			section.aboutToBeHidden();
+		}
+	}
+
+	@Override
+	public void aboutToBeShown() {
+		super.aboutToBeShown();
+		for (ISection section : getSections()){
+			section.aboutToBeShown();
+		}
+	}
+	
+	@Override
+	public void refresh() {
+		super.refresh();
+		for (ISection section : getSections()){
+			section.refresh();
+		}
+	}
+
+	private void createOrResetQuickEditGroupComposite() {
+		if (_qeGroupComposite != null && !_qeGroupComposite.isDisposed()){
+			//dispose of current sections
+			disposeCurrentQuickEditTabSections();
+			_qeGroupComposite.dispose();
+		}			
+		
+		_qeGroupComposite = _tabbedPropertySheetPage.getWidgetFactory().createComposite(_composite, SWT.NO_FOCUS);
+		QuickEditTabLayout layout = new QuickEditTabLayout();
+		_qeGroupComposite.setLayout(layout);
+		
+	}
+
+	private void disposeCurrentQuickEditTabSections() {		
+		for (ISection section : getSections()){
+			section.dispose();
+		}
+	}
+
+	private List<ISection> getSections(){
+		if (getTabManager().getCurrentTabGroupDescriptor() != null)
+			return getTabManager().getCurrentTabGroupDescriptor().getSections();
+		
+		return Collections.EMPTY_LIST;
+	}
+	
+	public void dispose() {
+		super.dispose();
+		disposeCurrentQuickEditTabSections();
+		manager.dispose();
+		manager = null;
+		_composite = null;
+		_qeGroupComposite = null;
+		_tabbedPropertySheetPage = null;
+	}	
+
+	public boolean shouldUseExtraSpace() {
+		return false;
+	}
+
+	private class QuickEditTabLayout extends Layout {
+
+		// allow for adjustments
+		private static final int MARGIN = 0;
+		private static final int SPACING = 0;
+
+		// cache
+		Point[] sizes;
+		int maxWidth, totalHeight;
+
+		protected Point computeSize(Composite composite, int wHint, int hHint,
+				boolean flushCache) {
+
+			Control children[] = composite.getChildren();
+			if (flushCache || sizes == null || sizes.length != children.length) {
+				initialize(children);
+			}
+
+			int width = wHint, height = hHint;
+			if (wHint == SWT.DEFAULT)
+				width = maxWidth;
+
+			if (hHint == SWT.DEFAULT)
+				height = totalHeight;
+
+			return new Point(width + 2 * MARGIN, height + 2 * MARGIN);
+		}
+
+		protected void layout(Composite composite, boolean flushCache) {
+			Control children[] = composite.getChildren();
+			if (flushCache || sizes == null || sizes.length != children.length) {
+				initialize(children);
+			}
+			Rectangle rect = composite.getClientArea();
+			int x = MARGIN, y = MARGIN;
+			int width = Math.max(rect.width - 2 * MARGIN, maxWidth);
+//			System.out.println("--- Comp id: "+composite.toString()+ "[#Children: "+ composite.getChildren().length +"] -------");
+			for (int i = 0; i < children.length; i++) {
+				int height = sizes[i].y;
+				children[i].setBounds(x, y, width, height);
+				y += height + SPACING;
+//				System.out.println("h="+height+", y="+y);
+			}
+		    composite.setRedraw(true);
+		}
+
+		void initialize(Control children[]) {
+			maxWidth = 0;
+			totalHeight = 0;
+			sizes = new Point[children.length];
+			for (int i = 0; i < children.length; i++) {
+				sizes[i] = children[i].computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
+				maxWidth = Math.max(maxWidth, sizes[i].x);
+				totalHeight += sizes[i].y;
+			}
+			totalHeight += (children.length - 1) * SPACING;
+		}
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSectionDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSectionDescriptor.java
new file mode 100644
index 0000000..18fddd4
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSectionDescriptor.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. 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:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.pagedesigner.PDPlugin;
+import org.eclipse.jst.pagedesigner.properties.DesignerPropertyTool;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.internal.views.properties.tabbed.view.SectionDescriptor;
+import org.eclipse.ui.views.properties.tabbed.ISection;
+import org.eclipse.ui.views.properties.tabbed.ITypeMapper;
+import org.w3c.dom.Element;
+
+/**
+ * A SectionDescriptor from org.eclipse.ui.views.properties.tabbed.propertySections extension-point 
+ * for use by the QuickEdit tab in the Web Page Editor.
+ */
+public class QuickEditTabSectionDescriptor extends SectionDescriptor {
+
+	private static final String ATT_CLASS = "class"; //$NON-NLS-1$ 
+	private IConfigurationElement _configurationElement;
+	private Entity _tagEntity;
+
+	/**
+	 * Constructor for the section descriptor.
+	 * 
+	 * @param configurationElement
+	 *            the configuration element for the section descriptor.
+	 * @param typeMapper 
+	 */
+	public QuickEditTabSectionDescriptor(IConfigurationElement configurationElement, ITypeMapper typeMapper) {
+		super(configurationElement, typeMapper);
+		_configurationElement = configurationElement;
+	}
+
+	@Override
+	public boolean appliesTo(IWorkbenchPart part, ISelection selection) {
+		Element node = DesignerPropertyTool.getElement(part, selection);
+		if (node == null) {
+			return false;
+		}
+		return true;
+	}
+
+	@Override
+	public ISection getSectionClass() {
+		ISection section = null;
+		try {
+			Object secOrGroup = _configurationElement
+					.createExecutableExtension(ATT_CLASS);
+			if (secOrGroup instanceof ISection) {
+				section = (ISection) secOrGroup;
+			} else if (secOrGroup instanceof AttributeGroup) {
+				((AttributeGroup) secOrGroup).setTagEntity(_tagEntity);
+				section = new AttributeGroupSection((AttributeGroup) secOrGroup);		
+			}
+		} catch (CoreException exception) {
+			handleSectionError(exception);
+		}
+		return section;
+	}
+	
+	/**
+	 * Handle the section error when an issue is found loading from the
+	 * configuration element.
+	 * 
+	 * @param _configurationElement
+	 *            the configuration element
+	 * @param exception
+	 *            an optional CoreException
+	 */
+	private void handleSectionError(CoreException exception) {
+		PDPlugin.getLogger(QuickEditTabSectionDescriptor.class).error("error", //$NON-NLS-1$
+				exception);
+		exception.printStackTrace();
+	}
+
+	/**
+	 * @param tagEntity
+	 * @return ISection for the tagEntity
+	 */
+	/*package*/ ISection getSectionClass(Entity tagEntity) {
+		_tagEntity = tagEntity;
+		return getSectionClass();
+	}
+		
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSectionsDescriptor.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSectionsDescriptor.java
new file mode 100644
index 0000000..633ce74
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSectionsDescriptor.java
@@ -0,0 +1,112 @@
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.eclipse.jst.jsf.common.metadata.Entity;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.QuickEditTabSections;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SECTION_TYPE;
+import org.eclipse.jst.pagedesigner.editors.properties.quickedittabsections.SectionInfo;
+import org.eclipse.ui.views.properties.tabbed.ISection;
+
+/**
+ * Represents all of the section classes that make up the Quick Edit tab for a given tag input.   
+ * Uses QuickEditTabSections meta data from tag entity
+ */
+public class QuickEditTabSectionsDescriptor {
+
+	private QuickEditTabSections _sections;
+	private QName _tagId;
+	private List<ISection> _sectionClasses;
+	private Entity _tagEntity;
+	private WPETabPropertySectionDescriptorProvider sectionProvider;
+
+	/**
+	 * Constructor
+	 * @param tagEntity
+	 * @param tagId
+	 * @param sections
+	 */
+	public QuickEditTabSectionsDescriptor (Entity tagEntity, QName tagId, QuickEditTabSections sections) {
+		_tagEntity = tagEntity;
+		_tagId = tagId;
+		_sections = sections;
+	}	
+
+	/*package*/ QuickEditTabSectionsDescriptor () {
+		_tagEntity = null;
+		_tagId = null;
+		_sections = null;
+	}
+	
+	/**
+	 * Determines section classes for the group from the available meta data
+	 */
+	public void calculateSections() {
+		if (_sectionClasses == null || _sectionClasses.isEmpty()) {
+			_sectionClasses = new ArrayList();
+			List<String> attrIds = new ArrayList();
+			for (SectionInfo secInfo : _sections.getSections()) {
+				if (secInfo.getType() == SECTION_TYPE.ATTRIBUTE){
+					//collect attrSecs and process as a group so that layout will be best
+					if (secInfo.getId() != null) 
+						attrIds.add(secInfo.getId());
+				}
+				else if (secInfo.getType() == SECTION_TYPE.SECTION) {
+					//if there are any attribute sections not processed, do that now
+					if (attrIds.size() > 0){
+						createAttributeGroup(attrIds);
+						attrIds = new ArrayList();
+					}
+					createSectionGroup(secInfo);
+				}
+			}
+			if (attrIds.size() > 0){
+				createAttributeGroup(attrIds);
+			}
+		}		
+	}
+
+	private void createSectionGroup(SectionInfo secInfo) {
+		QuickEditTabSectionDescriptor sd = getSectionProvider().getNamedSectionDescriptor(secInfo.getId());
+		if (sd != null) {
+			ISection section = sd.getSectionClass(_tagEntity);
+			if (section != null){
+				_sectionClasses.add(section);
+			}
+		}
+		
+	}
+
+	private void createAttributeGroup(List<String> attrNames) {
+		ISection section = new AttributeGroupSection(_tagEntity, attrNames);
+		if (section != null){		
+			_sectionClasses.add(section);
+		}
+	}
+
+	/**
+	 * @return QName of tag that this tab descriptor is for
+	 */
+	public QName getTagId() {
+		return _tagId;
+	}
+
+	/**
+	 * @return List of current ISection classes set after calculateSections() has been called
+	 */
+	public List<ISection> getSections() {
+		return _sectionClasses;
+	}
+
+	private WPETabPropertySectionDescriptorProvider getSectionProvider() {
+		if (sectionProvider == null){
+			sectionProvider = new WPETabPropertySectionDescriptorProvider();
+		}
+		return sectionProvider;
+	}
+	
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSectionsManager.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSectionsManager.java
new file mode 100644
index 0000000..bf8dfc5
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/QuickEditTabSectionsManager.java
@@ -0,0 +1,116 @@
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.eclipse.core.resources.IProject;
+
+/**
+ * Cache of quickEditTabGroupDescriptors keyed by tagID as QName.  
+ */
+public class QuickEditTabSectionsManager {
+	
+	private static QuickEditTabSectionsManagerMgr _mgrInstance = new QuickEditTabSectionsManagerMgr();
+	private Map<QName, QuickEditTabSectionsDescriptor> map = new HashMap<QName, QuickEditTabSectionsDescriptor>(5);
+	private IProject _project;
+	private int clientCount = 0;
+	
+	/**
+	 * Returns instance of QuickEditTabSectionsManager for the given project.   Caller must release the instance when caller is being disposed.
+	 * @param project
+	 * @return instance of QuickEditTabSectionsManager
+	 */
+	public static synchronized QuickEditTabSectionsManager acquireInstance(IProject project){
+		QuickEditTabSectionsManager instance = _mgrInstance.getSectionsManager(project);
+		instance.clientCount++;
+		return instance;	
+	}
+	
+	/**
+	 * Releases instance of QuickEditTabSectionsManager and removes from the QuickEditSectionGroupsManagerMgr if it is the last reference
+	 */
+	public synchronized void releaseInstance(){
+		int refCount = --clientCount;
+		if (refCount == 0){
+			_mgrInstance.removeSectionsManager(_project);
+		}	
+	}
+
+	/**
+	 * private constructor
+	 */
+	private QuickEditTabSectionsManager(){
+		//
+	}
+	
+	/**
+	 * @return IProject that this section manager applies to
+	 */
+	public IProject getProject(){
+		return _project;
+	}
+	
+	/**
+	 * Get QuickEditTabSectionsDescriptor for passed tag
+	 * 
+	 * @param tagId
+	 * @return QuickEditTabSectionsDescriptor
+	 */
+	public QuickEditTabSectionsDescriptor getQuickEditTabSectionsFor(QName tagId) {
+		return map.get(tagId);
+	}
+
+	/**
+	 * Adds QuickEditTabSectionsDescriptor to managed registry keyed by the tagId
+	 * QName
+	 * 
+	 * @param group
+	 */
+	public void addQuickEditTabGroupDescriptor(QuickEditTabSectionsDescriptor group) {
+		map.put(group.getTagId(), group);
+	}
+
+	/**
+	 * Removes and disposes a cached {@link QuickEditTabSectionsDescriptor}
+	 * 
+	 * @param tagId
+	 */
+	public void removeQuickEditTabGroup(QName tagId) {
+		QuickEditTabSectionsDescriptor grp = map.get(tagId);
+		if (grp != null) {
+			map.remove(tagId);
+		}
+	}
+
+	/**
+	 * Manages the QuickEditTabSectionsManager instances.  Ensures one per project.	 
+	 */
+	private static class QuickEditTabSectionsManagerMgr {		
+		private Map <IProject,QuickEditTabSectionsManager>_map = new HashMap<IProject,QuickEditTabSectionsManager>();
+		/**
+		 * @param project - may be null
+		 * @return QuickEditTabManager for project
+		 */
+		public QuickEditTabSectionsManager getSectionsManager(IProject project){
+			if (_map.containsKey(project))
+				return _map.get(project);
+
+			QuickEditTabSectionsManager instance = new QuickEditTabSectionsManager();
+			instance._project = project;
+			_map.put(project, instance);
+			return instance;
+		}
+		
+		/**
+		 * Removes QuickEditTabManager from mgr for given project
+		 * @param project
+		 */
+		public void removeSectionsManager(IProject project){
+			if (_map.containsKey(project))
+				_map.remove(project);
+		}
+		
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/WPETabDescriptorProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/WPETabDescriptorProvider.java
new file mode 100644
index 0000000..5003d40
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/WPETabDescriptorProvider.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.views.properties.tabbed.ITabDescriptor;
+import org.eclipse.ui.views.properties.tabbed.ITabDescriptorProvider;
+
+/**
+ * Class that provides the default tabs for the Web Page Editor
+ */
+public class WPETabDescriptorProvider implements ITabDescriptorProvider {
+
+	private AttributesTabDescriptor _attributesTabDescriptor;
+	private QuickEditTabDescriptor _quickTabDescriptor;
+
+	/**
+	 * Constructor
+	 */
+	public WPETabDescriptorProvider() {
+		_quickTabDescriptor = new QuickEditTabDescriptor();
+		_attributesTabDescriptor = new AttributesTabDescriptor();
+	}
+	
+	/**
+	 * Provides a QuickTabDescriptor and the AttributesTabDescriptor
+	 */
+	public ITabDescriptor[] getTabDescriptors(IWorkbenchPart part,
+			ISelection selection) {
+
+		return new ITabDescriptor[]{_quickTabDescriptor, 
+									_attributesTabDescriptor};
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/WPETabPropertySectionDescriptorProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/WPETabPropertySectionDescriptorProvider.java
new file mode 100644
index 0000000..4e2530d
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/WPETabPropertySectionDescriptorProvider.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. 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:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.properties.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jst.pagedesigner.editors.HTMLEditor;
+import org.eclipse.ui.views.properties.tabbed.ISectionDescriptor;
+import org.eclipse.ui.views.properties.tabbed.ISectionDescriptorProvider;
+
+/**
+ * Provides sections registered for the Web Page Editor whose contributor ID is,
+ * "org.eclipse.jst.pagedesigner.tabPropertyContributor" using the
+ * org.eclipse.ui.views.properties.tabbed.propertyTabs extension-points.  
+ * 
+ * The sections declared using the org.eclipse.ui.views.properties.tabbed.propertySections extension-point 
+ * for the WPE will only be displayed by the Quick Edit tab is the selected tag has metadata to choose 
+ * the section.  TypeMappers/filters, etc. are ignored by this sectionDescriptorProvider.
+ * 
+ * See jsf_html.xml in the org.eclipse.jst.jsf.standard.tagsupport plugin for examples on how to use.  
+ */
+public class WPETabPropertySectionDescriptorProvider implements
+		ISectionDescriptorProvider {
+	
+	private static final String EXTPT_SECTIONS = "propertySections"; //$NON-NLS-1$
+	private static final String ELEMENT_SECTION = "propertySection"; //$NON-NLS-1$
+	private ISectionDescriptor[] _descriptors = null;
+
+	/**
+	 * Constructor
+	 */
+	public WPETabPropertySectionDescriptorProvider() {
+		super();
+	}
+
+	public ISectionDescriptor[] getSectionDescriptors() {
+		if (_descriptors == null) {
+			List result = new ArrayList();
+			List contributedSections = readSectionDescriptors();
+			result.addAll(contributedSections);
+
+//			if (1 == 0){ //disabled for now... do we want to allow other mechanisms to add sections?
+//				List providers = readAdditionalSectionDescriptorProviders();
+//				for (int i = 0, size = providers.size(); i < size; i++) {
+//					try {
+//						ISectionDescriptorProvider provider = (ISectionDescriptorProvider) providers
+//								.get(i);
+//						ISectionDescriptor[] sections = provider
+//								.getSectionDescriptors();
+//						if (sections != null) {
+//							result.addAll(Arrays.asList(sections));
+//						}
+//					} catch (Exception ex) {
+//						// ignore
+//						ex.printStackTrace();
+//					}
+//				}
+//			}
+			_descriptors = new ISectionDescriptor[result.size()];
+			result.toArray(_descriptors);
+		}
+		return _descriptors;
+	}
+
+	/**
+	 * @return registered section descriptors for the WPE QuickEdit tab
+	 */
+	protected List<QuickEditTabSectionDescriptor> readSectionDescriptors() {
+		List result = new ArrayList();
+			
+		IConfigurationElement[] extensions = getConfigurationElements(EXTPT_SECTIONS);
+		for (int i = 0; i < extensions.length; i++) {
+			IConfigurationElement extension = extensions[i];
+			if (extension.getAttribute("contributorId").equals(HTMLEditor.TABBED_PROPERTIES_CONTRIBUTOR_ID)){ //$NON-NLS-1$
+				IConfigurationElement[] sections = extension
+						.getChildren(ELEMENT_SECTION);
+				for (int j = 0; j < sections.length; j++) {
+					IConfigurationElement section = sections[j];
+					ISectionDescriptor descriptor = new QuickEditTabSectionDescriptor(
+							section, null);//ITypeMapper set to null
+					result.add(descriptor);
+				}
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * @param extensionPointId
+	 * @return IConfigurationElement[] 
+	 */
+	private static IConfigurationElement[] getConfigurationElements(
+			String extensionPointId) {
+		IExtensionPoint extensionPoint = Platform.getExtensionRegistry()
+				.getExtensionPoint("org.eclipse.ui.views.properties.tabbed", extensionPointId); //$NON-NLS-1$
+		if (extensionPoint == null) {
+			return null;
+		}
+		return extensionPoint.getConfigurationElements();
+	}
+	
+	/**
+	 * @param name of section
+	 * @return {@link QuickEditTabSectionDescriptor} or null if not located
+	 */
+	public QuickEditTabSectionDescriptor getNamedSectionDescriptor(String name) {
+		for (int i=0;i<getSectionDescriptors().length;i++){
+			QuickEditTabSectionDescriptor sd = (QuickEditTabSectionDescriptor)getSectionDescriptors()[i];
+			if (name.equals(sd.getId()))
+				return sd;
+		}
+		return null;
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/messages.properties b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/messages.properties
new file mode 100644
index 0000000..5f25ebf
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/internal/messages.properties
@@ -0,0 +1,2 @@
+AttributesTabDescriptor_label=Attributes
+QuickEditTabDescriptor_label=Quick Edit
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/messages.properties b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/messages.properties
new file mode 100644
index 0000000..b3f6bbe
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/messages.properties
@@ -0,0 +1 @@
+ITabbedPropertiesConstants_other_category=Attributes
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/range/RangeUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/range/RangeUtil.java
index 9febaaa..1d85654 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/range/RangeUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/range/RangeUtil.java
@@ -17,15 +17,8 @@
 
 import org.eclipse.gef.EditPart;
 import org.eclipse.jst.pagedesigner.parts.DocumentEditPart;
-import org.eclipse.jst.pagedesigner.parts.TextEditPart;
 import org.eclipse.jst.pagedesigner.viewer.DesignPosition;
 import org.eclipse.jst.pagedesigner.viewer.DesignRange;
-import org.eclipse.jst.pagedesigner.viewer.TextPosition;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMText;
-import org.w3c.dom.DocumentFragment;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.Text;
 
 /**
  * @author mengbo
@@ -38,19 +31,27 @@
 	 *            can't be null
 	 * @param reference
 	 *            can't be null
+	 * @return ??
 	 */
-	public static Node appendAfter(Node child, Node reference) {
-		Node next = reference.getNextSibling();
-		if (next == null)
-        {
-			return reference.getParentNode().appendChild(child);
-        }
-        return reference.getParentNode().insertBefore(child, next);
-	}
+    //TODO: dead
+//	private static Node appendAfter(Node child, Node reference) {
+//		Node next = reference.getNextSibling();
+//		if (next == null)
+//        {
+//			return reference.getParentNode().appendChild(child);
+//        }
+//        return reference.getParentNode().insertBefore(child, next);
+//	}
 
-	public static Node insertBefore(Node child, Node reference) {
-		return reference.getParentNode().insertBefore(child, reference);
-	}
+	/**
+	 * @param child
+	 * @param reference
+	 * @return ??
+	 */
+    // TODO: dead
+//	private static Node insertBefore(Node child, Node reference) {
+//		return reference.getParentNode().insertBefore(child, reference);
+//	}
 
 	/**
 	 * Insert a node into the specified position. The node can be an element or
@@ -59,38 +60,39 @@
 	 * @param node
 	 * @param position
 	 */
-	public static Node insertElement(DesignPosition position, Element node) {
-		EditPart containerEditPart = position.getContainerPart();
-		int offset = position.getOffset();
-
-		if (containerEditPart instanceof TextEditPart) {
-			TextEditPart textPart = (TextEditPart) containerEditPart;
-			String textData = textPart.getTextData();
-			Node textNode = (Node) textPart.getModel();
-			if (offset == 0)
-				return insertBefore(node, textNode);
-			else if (offset == textData.length())
-				return appendAfter(node, textNode);
-			else {
-				// inserting the element in the middle of text.
-				String before = textData.substring(0, offset);
-				String after = textData.substring(offset);
-
-				// XXX: don't know whether setNodeValue() will do all those
-				// escape or not.
-				textNode.setNodeValue(after);
-				Node newnode = insertBefore(node, textNode);
-
-				// XXX: don't know whether createTextNode() will do all those
-				// escape or not
-				Text t = textNode.getOwnerDocument().createTextNode(before);
-
-				insertBefore(t, newnode);
-				return newnode;
-			}
-		}
-        return insertIntoEditPart(containerEditPart, node, offset);
-	}
+	// TODO: dead
+//	private static Node insertElement(DesignPosition position, Element node) {
+//		EditPart containerEditPart = position.getContainerPart();
+//		int offset = position.getOffset();
+//
+//		if (containerEditPart instanceof TextEditPart) {
+//			TextEditPart textPart = (TextEditPart) containerEditPart;
+//			String textData = textPart.getTextData();
+//			Node textNode = (Node) textPart.getModel();
+//			if (offset == 0)
+//				return insertBefore(node, textNode);
+//			else if (offset == textData.length())
+//				return appendAfter(node, textNode);
+//			else {
+//				// inserting the element in the middle of text.
+//				String before = textData.substring(0, offset);
+//				String after = textData.substring(offset);
+//
+//				// XXX: don't know whether setNodeValue() will do all those
+//				// escape or not.
+//				textNode.setNodeValue(after);
+//				Node newnode = insertBefore(node, textNode);
+//
+//				// XXX: don't know whether createTextNode() will do all those
+//				// escape or not
+//				Text t = textNode.getOwnerDocument().createTextNode(before);
+//
+//				insertBefore(t, newnode);
+//				return newnode;
+//			}
+//		}
+//        return insertIntoEditPart(containerEditPart, node, offset);
+//	}
 
 	/**
 	 * @param containerEditPart
@@ -98,49 +100,51 @@
 	 * @param offset
 	 * @return
 	 */
-	private static Node insertIntoEditPart(EditPart containerEditPart,
-			Node node, int offset) {
-		Node parent = (Node) containerEditPart.getModel();
-		List childParts = containerEditPart.getChildren();
-		if (offset >= childParts.size()) {
-			// to the end of parent
-			return parent.appendChild(node);
-		}
-        Node child = (Node) ((EditPart) childParts.get(offset)).getModel();
-        return insertBefore(node, child);
-	}
+	// TODO: dead
+//	private static Node insertIntoEditPart(EditPart containerEditPart,
+//			Node node, int offset) {
+//		Node parent = (Node) containerEditPart.getModel();
+//		List childParts = containerEditPart.getChildren();
+//		if (offset >= childParts.size()) {
+//			// to the end of parent
+//			return parent.appendChild(node);
+//		}
+//        Node child = (Node) ((EditPart) childParts.get(offset)).getModel();
+//        return insertBefore(node, child);
+//	}
 
-	public static TextPosition insertText(DesignPosition position, String data) {
-		// TODO: never read EditPart containerEditPart = position.getContainerPart();
-
-		position = moveIntoText(position);
-		int offset = position.getOffset();
-
-		if (position.getContainerPart() instanceof TextEditPart) {
-			// it is guaranteeed that now the containing edit part is text node.
-			TextEditPart textPart = (TextEditPart) position.getContainerPart();
-			String textData = textPart.getTextData();
-			String before = textData.substring(0, offset);
-			String after = textData.substring(offset);
-			if (data.startsWith(" ") && before.endsWith(" ")) {
-				before = before.substring(0, before.length() - 1) + "&nbsp;";
-			}
-			if (after.startsWith(" ") && data.endsWith(" ")) {
-				data = data.substring(0, data.length() - 1) + (char) 160;
-			}
-			String nextData = before + data + after;
-			IDOMText text = (IDOMText) textPart.getModel();
-			text.setData(nextData);
-			return new TextPosition(text, offset + data.length());
-		}
-        // can't merge into a neighboring text node. So create a text node
-        // of it's own
-        EditPart part = position.getContainerPart();
-        Node parent = (Node) part.getModel();
-        Text text = parent.getOwnerDocument().createTextNode(data);
-        insertIntoEditPart(part, text, offset);
-        return new TextPosition((IDOMText) text, offset);
-	}
+	// TODO: dead
+//	private static TextPosition insertText(DesignPosition position, String data) {
+//		// TODO: never read EditPart containerEditPart = position.getContainerPart();
+//
+//		position = moveIntoText(position);
+//		int offset = position.getOffset();
+//
+//		if (position.getContainerPart() instanceof TextEditPart) {
+//			// it is guaranteeed that now the containing edit part is text node.
+//			TextEditPart textPart = (TextEditPart) position.getContainerPart();
+//			String textData = textPart.getTextData();
+//			String before = textData.substring(0, offset);
+//			String after = textData.substring(offset);
+//			if (data.startsWith(" ") && before.endsWith(" ")) {
+//				before = before.substring(0, before.length() - 1) + "&nbsp;";
+//			}
+//			if (after.startsWith(" ") && data.endsWith(" ")) {
+//				data = data.substring(0, data.length() - 1) + (char) 160;
+//			}
+//			String nextData = before + data + after;
+//			IDOMText text = (IDOMText) textPart.getModel();
+//			text.setData(nextData);
+//			return new TextPosition(text, offset + data.length());
+//		}
+//        // can't merge into a neighboring text node. So create a text node
+//        // of it's own
+//        EditPart part = position.getContainerPart();
+//        Node parent = (Node) part.getModel();
+//        Text text = parent.getOwnerDocument().createTextNode(data);
+//        insertIntoEditPart(part, text, offset);
+//        return new TextPosition((IDOMText) text, offset);
+//	}
 
 	/**
 	 * Try to make the position move into a text node.
@@ -148,27 +152,28 @@
 	 * @param position
 	 * @return
 	 */
-	public static DesignPosition moveIntoText(DesignPosition position) {
-		EditPart container = position.getContainerPart();
-		if (container instanceof TextEditPart)
-			return position;
-		if (position.getOffset() > 0) {
-			EditPart pre = (EditPart) container.getChildren().get(
-					position.getOffset() - 1);
-			if (pre instanceof TextEditPart) {
-				return new DesignPosition(pre, ((TextEditPart) pre)
-						.getTextData().length());
-			}
-		}
-		if (position.getOffset() < container.getChildren().size()) {
-			EditPart next = (EditPart) container.getChildren().get(
-					position.getOffset());
-			if (next instanceof TextEditPart) {
-				return new DesignPosition(next, 0);
-			}
-		}
-		return position;
-	}
+    // TODO: dead
+//	private static DesignPosition moveIntoText(DesignPosition position) {
+//		EditPart container = position.getContainerPart();
+//		if (container instanceof TextEditPart)
+//			return position;
+//		if (position.getOffset() > 0) {
+//			EditPart pre = (EditPart) container.getChildren().get(
+//					position.getOffset() - 1);
+//			if (pre instanceof TextEditPart) {
+//				return new DesignPosition(pre, ((TextEditPart) pre)
+//						.getTextData().length());
+//			}
+//		}
+//		if (position.getOffset() < container.getChildren().size()) {
+//			EditPart next = (EditPart) container.getChildren().get(
+//					position.getOffset());
+//			if (next instanceof TextEditPart) {
+//				return new DesignPosition(next, 0);
+//			}
+//		}
+//		return position;
+//	}
 
 	/**
 	 * try to move the position up to not inside a text. if the position is at 0
@@ -177,32 +182,34 @@
 	 * @param position
 	 * @return
 	 */
-	public static DesignPosition moveOutFromText(DesignPosition position) {
-		EditPart container = position.getContainerPart();
-		if (container instanceof TextEditPart) {
-			int offset = position.getOffset();
-			String text = ((TextEditPart) container).getTextData();
-			if (offset == 0) {
-				return new DesignPosition(container.getParent(), container
-						.getParent().getChildren().indexOf(container));
-			} else if (offset == text.length()) {
-				return new DesignPosition(container.getParent(), container
-						.getParent().getChildren().indexOf(container) + 1);
-			}
-		}
-		return position;
-	}
+    // TODO: dead
+//	private static DesignPosition moveOutFromText(DesignPosition position) {
+//		EditPart container = position.getContainerPart();
+//		if (container instanceof TextEditPart) {
+//			int offset = position.getOffset();
+//			String text = ((TextEditPart) container).getTextData();
+//			if (offset == 0) {
+//				return new DesignPosition(container.getParent(), container
+//						.getParent().getChildren().indexOf(container));
+//			} else if (offset == text.length()) {
+//				return new DesignPosition(container.getParent(), container
+//						.getParent().getChildren().indexOf(container) + 1);
+//			}
+//		}
+//		return position;
+//	}
 
-	public static void insertDocumentFragment(DesignPosition position,
-			DocumentFragment fragment) {
-		// FIXME: NOT DONE.
-	}
+//	private static void insertDocumentFragment(DesignPosition position,
+//			DocumentFragment fragment) {
+//		// FIXME: NOT DONE.
+//	}
 
 	/**
 	 * Test whether the range intersect with the part.
 	 * 
 	 * @param range
 	 * @param part
+	 * @return true if thereis an intersection
 	 */
 	public static boolean intersect(DesignRange range, EditPart part) {
 		if (range == null || !range.isValid())
@@ -231,7 +238,7 @@
 	 * without constructing a new one.
 	 * 
 	 * @param range
-	 * @return
+	 * @return the normalized range
 	 */
 	public static DesignRange normalize(DesignRange range) {
 		if (range == null || !range.isValid()) {
@@ -254,7 +261,7 @@
 	 * @return 0 means equal. 1 Means p1 is after p2. -1 means p1 is before p2.
 	 *         Integer.MIN_VALUE means some error and can't compare.
 	 */
-	public static int compareDesignPosition(DesignPosition p1, DesignPosition p2) {
+	private static int compareDesignPosition(DesignPosition p1, DesignPosition p2) {
 		if (!p1.isValid() || !p2.isValid())
 			return Integer.MIN_VALUE;
 		if (p1.equals(p2))
@@ -330,7 +337,7 @@
 	 * @param part2
 	 * @return
 	 */
-	public static EditPart findCommonAncester(EditPart part1, EditPart part2) {
+	private static EditPart findCommonAncester(EditPart part1, EditPart part2) {
 		if (part1 == part2) {
 			return part1;
 		}
@@ -355,6 +362,10 @@
 
 	}
 
+	/**
+	 * @param range
+	 * @return the common ancestor
+	 */
 	public static EditPart findCommonAncestor(DesignRange range) {
 		if (!range.isValid()) {
 			return null;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/LocationModifierRequest.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/LocationModifierRequest.java
index 3f720f0..176710b 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/LocationModifierRequest.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/LocationModifierRequest.java
@@ -37,10 +37,16 @@
 		super(type);
 	}
 
+	/**
+	 * @return true if the control key was pressed
+	 */
 	public boolean isControlKeyPressed() {
 		return _controlKeyDown;
 	}
 
+	/**
+	 * @param b
+	 */
 	public void setControlKeyPressed(boolean b) {
 		this._controlKeyDown = b;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/NodeCreationFactory.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/NodeCreationFactory.java
index e08dd21..7c54de0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/NodeCreationFactory.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/NodeCreationFactory.java
@@ -32,14 +32,20 @@
  * @author mengbo
  */
 public class NodeCreationFactory implements CreationFactory {
-	String _tagName;
+	private final String _tagName;
 
-	String _uri;
+	private final String _uri;
 
-	String _suggestedPrefix;
+	private final String _suggestedPrefix;
 
-	Map _attributes;
+	private final Map _attributes;
 
+	/**
+	 * @param uri
+	 * @param tagname
+	 * @param suggestedPrefix
+	 * @param attributes
+	 */
 	public NodeCreationFactory(String uri, String tagname,
 			String suggestedPrefix, Map attributes) {
 		_tagName = tagname;
@@ -90,7 +96,7 @@
 	 * XXX: need some better way for owner document. Maybe pass in from
 	 * constructor
 	 * 
-	 * @return
+	 * @return the owner document
 	 */
 	protected Document getOwnerDocument() {
 		IWorkbenchWindow active = PlatformUI.getWorkbench()
@@ -112,7 +118,7 @@
 	 * 
 	 * @see org.eclipse.jst.pagedesigner.requests.NodeCreationFactory#getPrefix(int)
 	 */
-	public String getPrefix(String uri, IDOMModel model, String suggested) {
+	private String getPrefix(String uri, IDOMModel model, String suggested) {
 		if (ITLDConstants.URI_HTML.equals(uri)
 				|| ITLDConstants.URI_JSP.equals(uri))
 			return null;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/PageDesignerRequestConstants.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/PageDesignerRequestConstants.java
index 69f1f4b..74e1797 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/PageDesignerRequestConstants.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/requests/PageDesignerRequestConstants.java
@@ -10,6 +10,10 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.requests;
 
+/**
+ * Page designer constants
+ *
+ */
 public final class PageDesignerRequestConstants 
 {
     /**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/ColumnHandle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/ColumnHandle.java
index 85c6e5c..97a1c1a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/ColumnHandle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/ColumnHandle.java
@@ -21,7 +21,6 @@
 
 	/**
 	 * @param owner
-	 * @param isRow
 	 * @param index
 	 */
 	public ColumnHandle(GraphicalEditPart owner, int index) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/ColumnResizeHandle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/ColumnResizeHandle.java
index 92496e1..e6446a1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/ColumnResizeHandle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/ColumnResizeHandle.java
@@ -22,6 +22,8 @@
 	int _columnIndex;
 
 	/**
+	 * @param owner 
+	 * @param index 
 	 * 
 	 */
 	public ColumnResizeHandle(GraphicalEditPart owner, int index) {
@@ -29,6 +31,9 @@
 		_columnIndex = index;
 	}
 
+	/**
+	 * @return the column index
+	 */
 	public int getColumnIndex() {
 		return _columnIndex;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteHeaderFooterAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteHeaderFooterAction.java
index 7ce481a..02a8e5c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteHeaderFooterAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteHeaderFooterAction.java
@@ -24,6 +24,8 @@
 
 	/**
 	 * @param text
+	 * @param editPart 
+	 * @param isHeader 
 	 */
 	public DeleteHeaderFooterAction(String text, EditPart editPart,
 			boolean isHeader) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteHeaderFooterRequest.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteHeaderFooterRequest.java
index 3a48173..ebd315d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteHeaderFooterRequest.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteHeaderFooterRequest.java
@@ -20,6 +20,10 @@
 public class DeleteHeaderFooterRequest extends Request {
 	private boolean _isHeader;
 
+	/**
+	 * @param type
+	 * @param isHeader
+	 */
 	public DeleteHeaderFooterRequest(String type, boolean isHeader) {
 		super(type);
 		this._isHeader = isHeader;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteRowColumnAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteRowColumnAction.java
index e56fe3f..0f68bd1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteRowColumnAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/DeleteRowColumnAction.java
@@ -24,6 +24,9 @@
 
 	/**
 	 * @param text
+	 * @param tablePart 
+	 * @param index 
+	 * @param isrow 
 	 */
 	public DeleteRowColumnAction(String text, EditPart tablePart, int index,
 			boolean isrow) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertHeaderFooterAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertHeaderFooterAction.java
index 4d0000e..4009220 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertHeaderFooterAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertHeaderFooterAction.java
@@ -24,6 +24,8 @@
 
 	/**
 	 * @param text
+	 * @param editPart 
+	 * @param isHeader 
 	 */
 	public InsertHeaderFooterAction(String text, EditPart editPart,
 			boolean isHeader) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertHeaderFooterRequest.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertHeaderFooterRequest.java
index 2f86799..845d48a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertHeaderFooterRequest.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertHeaderFooterRequest.java
@@ -20,6 +20,10 @@
 public class InsertHeaderFooterRequest extends Request {
 	private boolean _isHeader;
 
+	/**
+	 * @param type
+	 * @param isHeader
+	 */
 	public InsertHeaderFooterRequest(String type, boolean isHeader) {
 		super(type);
 		this._isHeader = isHeader;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertRowColumnAction.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertRowColumnAction.java
index ebd835d..6eedf0a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertRowColumnAction.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/InsertRowColumnAction.java
@@ -24,6 +24,10 @@
 
 	/**
 	 * @param text
+	 * @param tablePart 
+	 * @param index 
+	 * @param isrow 
+	 * @param isbefore 
 	 */
 	public InsertRowColumnAction(String text, EditPart tablePart, int index,
 			boolean isrow, boolean isbefore) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/RowHandle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/RowHandle.java
index 8cd08d2..5ebd6d9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/RowHandle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/RowHandle.java
@@ -21,7 +21,6 @@
 
 	/**
 	 * @param owner
-	 * @param isRow
 	 * @param index
 	 */
 	public RowHandle(GraphicalEditPart owner, int index) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/RowResizeHandle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/RowResizeHandle.java
index 10682ff..8efbcc3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/RowResizeHandle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/RowResizeHandle.java
@@ -22,7 +22,8 @@
 	int _rowIndex;
 
 	/**
-	 * 
+	 * @param owner 
+	 * @param index 
 	 */
 	public RowResizeHandle(GraphicalEditPart owner, int index) {
 		super(owner, true, index);
@@ -30,6 +31,9 @@
 		_rowIndex = index;
 	}
 
+	/**
+	 * @return the row index
+	 */
 	public int getRowIndex() {
 		return _rowIndex;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableColumnHandleLocator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableColumnHandleLocator.java
index 9816f93..37bb7e2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableColumnHandleLocator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableColumnHandleLocator.java
@@ -30,7 +30,7 @@
 	GraphicalEditPart _tablePart;
 
 	/**
-	 * @param ref
+	 * @param tablePart 
 	 */
 	public TableColumnHandleLocator(GraphicalEditPart tablePart) {
 		super(tablePart.getFigure());
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableEditConst.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableEditConst.java
index 54b714a..40b1dee 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableEditConst.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableEditConst.java
@@ -15,8 +15,14 @@
  * @author mengbo
  * @version 1.5
  */
-public interface TableEditConst {
+/*package*/ interface TableEditConst {
+	/**
+	 * height constant
+	 */
 	public static final int HEIGHT = 10;
 
+	/**
+	 * width constant
+	 */
 	public static final int WIDTH = 10;
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableEditHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableEditHelper.java
index f1b4a85..5614d81 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableEditHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableEditHelper.java
@@ -26,7 +26,7 @@
 	 * This method will return null if the editpart is not a table.
 	 * 
 	 * @param tablePart
-	 * @return
+	 * @return the adapter
 	 */
 	public static ITableEditAdapter getTableEditAdapter(
 			GraphicalEditPart tablePart) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableInsertRequest.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableInsertRequest.java
index d7c9fae..101d47c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableInsertRequest.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableInsertRequest.java
@@ -16,11 +16,17 @@
  * @version 1.5
  */
 public class TableInsertRequest extends TableRowColumnRequest {
-	public static final String TABLE_INSERT_REQUEST = "Table Insert";
+	/**
+	 * 
+	 */
+	private static final String TABLE_INSERT_REQUEST = "Table Insert";
 
 	boolean _before;
 
 	/**
+	 * @param row 
+	 * @param index 
+	 * @param before 
 	 * 
 	 */
 	public TableInsertRequest(boolean row, int index, boolean before) {
@@ -28,10 +34,16 @@
 		this._before = before;
 	}
 
+	/**
+	 * @return true if is before
+	 */
 	public boolean isBefore() {
 		return _before;
 	}
 
+	/**
+	 * @param before
+	 */
 	public void setBefore(boolean before) {
 		this._before = before;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableResizeRequest.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableResizeRequest.java
index b4dbef7..5bca788 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableResizeRequest.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableResizeRequest.java
@@ -18,7 +18,7 @@
  * @version 1.5
  */
 public class TableResizeRequest extends Request {
-	public static final String TABLE_RESIZE_REQ = "Table Resize";
+	private static final String TABLE_RESIZE_REQ = "Table Resize";
 
 	private boolean _row;
 
@@ -27,7 +27,8 @@
 	private int _delta;
 
 	/**
-	 * 
+	 * @param isrow 
+	 * @param index 
 	 */
 	public TableResizeRequest(boolean isrow, int index) {
 		super(TABLE_RESIZE_REQ);
@@ -35,26 +36,44 @@
 		this._index = index;
 	}
 
+	/**
+	 * @return the index
+	 */
 	public int getIndex() {
 		return _index;
 	}
 
+	/**
+	 * @param index
+	 */
 	public void setIndex(int index) {
 		this._index = index;
 	}
 
+	/**
+	 * @return true if is row
+	 */
 	public boolean isRow() {
 		return _row;
 	}
 
+	/**
+	 * @param row
+	 */
 	public void setRow(boolean row) {
 		this._row = row;
 	}
 
+	/**
+	 * @return the delta
+	 */
 	public int getDelta() {
 		return _delta;
 	}
 
+	/**
+	 * @param delta
+	 */
 	public void setDelta(int delta) {
 		this._delta = delta;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowColumnDeleteRequest.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowColumnDeleteRequest.java
index aa86052..1e44f46 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowColumnDeleteRequest.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowColumnDeleteRequest.java
@@ -16,10 +16,9 @@
  * @version 1.5
  */
 public class TableRowColumnDeleteRequest extends TableRowColumnRequest {
-	public static final String TABLE_ROWCOLUMN_DELETE = "Table RowColumn Delete";
+	private static final String TABLE_ROWCOLUMN_DELETE = "Table RowColumn Delete";
 
 	/**
-	 * @param type
 	 * @param row
 	 * @param index
 	 */
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowColumnRequest.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowColumnRequest.java
index 0a5b33a..b7bc8cd 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowColumnRequest.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowColumnRequest.java
@@ -24,6 +24,8 @@
 
 	/**
 	 * @param type
+	 * @param row 
+	 * @param index 
 	 */
 	public TableRowColumnRequest(Object type, boolean row, int index) {
 		super(type);
@@ -31,18 +33,30 @@
 		this._index = index;
 	}
 
+	/**
+	 * @return the index
+	 */
 	public int getIndex() {
 		return _index;
 	}
 
+	/**
+	 * @param index
+	 */
 	public void setIndex(int index) {
 		this._index = index;
 	}
 
+	/**
+	 * @return true if is row
+	 */
 	public boolean isRow() {
 		return _row;
 	}
 
+	/**
+	 * @param row
+	 */
 	public void setRow(boolean row) {
 		this._row = row;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowHandleLocator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowHandleLocator.java
index d1c2a9e..54ed350 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowHandleLocator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableRowHandleLocator.java
@@ -31,7 +31,7 @@
 	GraphicalEditPart _tablePart;
 
 	/**
-	 * @param ref
+	 * @param tablePart
 	 */
 	public TableRowHandleLocator(GraphicalEditPart tablePart) {
 		super(tablePart.getFigure());
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideHandle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideHandle.java
index ab53c87..753ad40 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideHandle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideHandle.java
@@ -41,10 +41,16 @@
 		return null;
 	}
 
+	/**
+	 * @return the edit part
+	 */
 	public GraphicalEditPart getTableEditPart() {
 		return this.getOwner();
 	}
 
+	/**
+	 * @return the adapter
+	 */
 	public ITableEditAdapter getTableEditAdapter() {
 		return TableEditHelper.getTableEditAdapter(getOwner());
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideItemHandle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideItemHandle.java
index 201b1ff..9b833ab 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideItemHandle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideItemHandle.java
@@ -29,6 +29,9 @@
 	private int _index;
 
 	/**
+	 * @param owner 
+	 * @param isRow 
+	 * @param index 
 	 * 
 	 */
 	public TableSideItemHandle(GraphicalEditPart owner, boolean isRow, int index) {
@@ -68,10 +71,16 @@
 		return new TableSideItemDragTracker(getOwner(), _isRow, _index);
 	}
 
+	/**
+	 * @return the index
+	 */
 	public int getIndex() {
 		return _index;
 	}
 
+	/**
+	 * @return true if is row
+	 */
 	public boolean isRow() {
 		return _isRow;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideResizeDragTracker.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideResizeDragTracker.java
index abfe878..ca0771f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideResizeDragTracker.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideResizeDragTracker.java
@@ -37,6 +37,8 @@
 
 	/**
 	 * @param sourceEditPart
+	 * @param isrow 
+	 * @param index 
 	 */
 	public TableSideResizeDragTracker(EditPart sourceEditPart, boolean isrow,
 			int index) {
@@ -127,7 +129,7 @@
 		}
 	}
 
-	protected MarqueeRectangleFigure getMarqueeRectangleFigure() {
+	private MarqueeRectangleFigure getMarqueeRectangleFigure() {
 		if (this._marqueeFigure == null) {
 			this._marqueeFigure = new MarqueeRectangleFigure();
 			addFeedback(this._marqueeFigure);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideResizeHandle.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideResizeHandle.java
index af5d8ec..bfe6b22 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideResizeHandle.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tableedit/TableSideResizeHandle.java
@@ -26,6 +26,9 @@
 	private int _index;
 
 	/**
+	 * @param owner 
+	 * @param isrow 
+	 * @param index 
 	 * 
 	 */
 	public TableSideResizeHandle(GraphicalEditPart owner, boolean isrow,
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/taglibprocessing/CSSClassType.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/taglibprocessing/CSSClassType.java
new file mode 100644
index 0000000..df7b36c
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/taglibprocessing/CSSClassType.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.taglibprocessing;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IDOMContextResolver;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.internal.impl.StructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.metadataprocessors.AbstractRootTypeDescriptor;
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValue;
+import org.eclipse.jst.jsf.metadataprocessors.features.IPossibleValues;
+import org.eclipse.jst.jsf.metadataprocessors.features.PossibleValue;
+import org.eclipse.jst.pagedesigner.css2.CSSUtil;
+import org.w3c.dom.Document;
+
+/**
+ * Represents a style class attribute type
+ *
+ */
+public class CSSClassType extends AbstractRootTypeDescriptor implements
+		IMetaDataEnabledFeature, IPossibleValues {
+
+	private List<IPossibleValue> _pvs;
+	
+	public List<IPossibleValue> getPossibleValues() {
+		if (_pvs == null){
+			IDOMContextResolver resolver = StructuredDocumentContextResolverFactory.getInstance().getDOMContextResolver(getStructuredDocumentContext());
+			_pvs = getCSSClasses(resolver.getDOMDocument());
+		}
+		return _pvs;
+	}
+
+	private List<IPossibleValue> getCSSClasses(Document doc) {
+		List result = new ArrayList();
+		String [] names = CSSUtil.getCSSClasses(doc);
+		for (int i=0;i<names.length;i++){
+			IPossibleValue pv = new PossibleValue(names[i]);
+			result.add(pv);
+		}
+		return result;
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/taglibprocessing/CSSIdType.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/taglibprocessing/CSSIdType.java
new file mode 100644
index 0000000..bf6c760
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/taglibprocessing/CSSIdType.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.taglibprocessing;
+
+import org.eclipse.jst.jsf.metadataprocessors.AbstractRootTypeDescriptor;
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+
+/**
+ * Represents CSS id attribute type
+ * EXPERIMENTAL - may change or disappear
+ *
+ */
+public class CSSIdType extends AbstractRootTypeDescriptor implements
+		IMetaDataEnabledFeature {
+
+	/**
+	 * Constructor
+	 */
+	public CSSIdType() {
+		// TODO Auto-generated constructor stub
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/taglibprocessing/CSSStyleType.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/taglibprocessing/CSSStyleType.java
new file mode 100644
index 0000000..614f988
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/taglibprocessing/CSSStyleType.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Oracle Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Oracle Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.taglibprocessing;
+
+import org.eclipse.jst.jsf.metadataprocessors.AbstractRootTypeDescriptor;
+import org.eclipse.jst.jsf.metadataprocessors.IMetaDataEnabledFeature;
+
+/**
+ * Represents CSS style attribute
+ *
+ */
+public class CSSStyleType extends AbstractRootTypeDescriptor implements
+		IMetaDataEnabledFeature {
+
+	/**
+	 * Constructor
+	 */
+	public CSSStyleType() {
+		// TODO Auto-generated constructor stub
+	}
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/ExposeHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/ExposeHelper.java
index 6e1c24b..6828db1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/ExposeHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/ExposeHelper.java
@@ -41,7 +41,7 @@
 	IHTMLGraphicalViewer _viewer;
 
 	/**
-	 * @param owner
+	 * @param viewer 
 	 */
 	public ExposeHelper(IHTMLGraphicalViewer viewer) {
 		_viewer = viewer;
@@ -49,6 +49,7 @@
 
 	/**
 	 * Expose rectangle. (non-Javadoc)
+	 * @param rect 
 	 * 
 	 * @see org.eclipse.gef.ExposeHelper#exposeDescendant(org.eclipse.gef.EditPart)
 	 */
@@ -225,6 +226,10 @@
 		}
 	}
 
+	/**
+	 * @param selection
+	 * @param viewer
+	 */
 	public static void expose(ISelection selection,
 			ScrollingGraphicalViewer viewer) {
 		if (selection instanceof IStructuredSelection) {
@@ -238,6 +243,9 @@
 		}
 	}
 
+	/**
+	 * @param p
+	 */
 	public void adjustVertical(Point p) {
 		int offset = 0;
 		if ((offset = getVerticalBoundsOffset(p, false)) < SCROLL_OFFSET) {
@@ -252,6 +260,9 @@
 		}
 	}
 
+	/**
+	 * @return the location of the view port
+	 */
 	public Point getViewpostLocation() {
 		if (_viewer != null) {
 			Viewport port = _viewer.getViewport();
@@ -263,6 +274,11 @@
 		return null;
 	}
 
+	/**
+	 * @param figure
+	 * @param p
+	 * @return the translated point
+	 */
 	public Point translateToViewport(IFigure figure, Point p) {
 		Point vp = getViewpostLocation();
 		return new Point(p.x - vp.x, p.y - vp.y);
@@ -300,7 +316,11 @@
         return p.y;
 	}
 
-	public void exposeBorder(Rectangle rect, AbstractEditPolicy policy) {
+	/**
+	 * @param rect
+	 * @param policy
+	 */
+	void exposeBorder(Rectangle rect, AbstractEditPolicy policy) {
 		Point p = rect.getTopLeft();
 		p = translateToViewport(((GraphicalEditPart) policy.getHost())
 				.getFigure(), p);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/RangeDragTracker.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/RangeDragTracker.java
index 162c499..ee6ac23 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/RangeDragTracker.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/RangeDragTracker.java
@@ -29,7 +29,6 @@
 import org.eclipse.jst.pagedesigner.viewer.DesignPosition;
 import org.eclipse.jst.pagedesigner.viewer.DesignRange;
 import org.eclipse.jst.pagedesigner.viewer.EditPartPositionHelper;
-import org.eclipse.jst.pagedesigner.viewer.HTMLGraphicalViewer;
 import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
 import org.eclipse.swt.graphics.Cursor;
 
@@ -38,10 +37,7 @@
  */
 public class RangeDragTracker extends TargetingTool implements DragTracker {
 	/** Flag to indicate selection has been performed. */
-	protected static final int FLAG_SELECTION_PERFORMED = TargetingTool.MAX_FLAG << 1;
-
-	/** Max flag */
-	protected static final int MAX_FLAG = FLAG_SELECTION_PERFORMED;
+	private static final int FLAG_SELECTION_PERFORMED = TargetingTool.MAX_FLAG << 1;
 
 	private EditPart editpart;
 
@@ -134,7 +130,7 @@
 	}
 
 	/**
-	 * Calls {@link #performSelection()}if the source is not selected. If the
+	 * If the
 	 * source is selected and there are no modifier keys pressed (i.e. the user
 	 * isn't selecting multiple edit parts or deselecting edit parts), sets the
 	 * direct edit flag so that when the mouse is released, a direct edit will
@@ -168,10 +164,9 @@
 	}
 
 	/**
-	 * If in the drag state, the tool selects the source edit part. If the edit
-	 * part was already selected, {@link #performDirectEdit()}is called. If the
+	 * If in the drag state, the tool selects the source edit part.  If the
 	 * edit part is newly selected and not completely visible,
-	 * {@link EditPartViewer#reveal(EditPart)}is called to show the selected
+	 * {@link org.eclipse.gef.EditPartViewer#reveal(EditPart)}is called to show the selected
 	 * edit part.
 	 * 
 	 * @see org.eclipse.gef.tools.AbstractTool#handleButtonUp(int)
@@ -232,7 +227,7 @@
 
 	/**
 	 * Creates a {@link SelectionRequest}and sends it to the source edit part
-	 * via {@link EditPart#performRequest(Request)}. Possible uses are to open
+	 * via {@link EditPart#performRequest(org.eclipse.gef.Request)}. Possible uses are to open
 	 * the selected item in another editor or replace the current editor's
 	 * contents based on the selected item.
 	 */
@@ -261,6 +256,9 @@
 		this.editpart = part;
 	}
 
+	/**
+	 * @return the html graphical viewer
+	 */
 	public IHTMLGraphicalViewer getHTMLGraphicalViewer() {
 		return (IHTMLGraphicalViewer) getCurrentViewer();
 	}
@@ -300,10 +298,7 @@
 		} else {
 			getHTMLGraphicalViewer().setRange(position, position);
 		}
-		if (getHTMLGraphicalViewer() instanceof HTMLGraphicalViewer) {
-			((HTMLGraphicalViewer) getHTMLGraphicalViewer())
-					.updateHorizontalPos();
-		}
+		getHTMLGraphicalViewer().updateHorizontalPos();
 	}
 
     protected boolean handleHover() {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/RangeSelectionTool.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/RangeSelectionTool.java
index c5da846..be49075 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/RangeSelectionTool.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/tools/RangeSelectionTool.java
@@ -36,7 +36,6 @@
 import org.eclipse.jst.pagedesigner.parts.DocumentEditPart;
 import org.eclipse.jst.pagedesigner.parts.NodeEditPart;
 import org.eclipse.jst.pagedesigner.requests.LocationModifierRequest;
-import org.eclipse.jst.pagedesigner.viewer.HTMLGraphicalViewer;
 import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyEvent;
@@ -152,8 +151,8 @@
 						(IHTMLGraphicalViewer) this.getCurrentViewer());
 				e.doit = false;
 			} else {
-				if (getCurrentViewer() instanceof HTMLGraphicalViewer
-						&& ((HTMLGraphicalViewer) getCurrentViewer())
+				if (getCurrentViewer() instanceof IHTMLGraphicalViewer
+						&& ((IHTMLGraphicalViewer) getCurrentViewer())
 								.isInRangeMode()
 						&& (!Character.isIdentifierIgnorable(e.character) && !Character
 								.isISOControl(e.character))
@@ -174,8 +173,8 @@
 			command.execute();
 			e.doit = false;
 			if (command instanceof ICaretPositionMover) {
-				if (getCurrentViewer() instanceof HTMLGraphicalViewer) {
-					((HTMLGraphicalViewer) getCurrentViewer())
+				if (getCurrentViewer() instanceof IHTMLGraphicalViewer) {
+					((IHTMLGraphicalViewer) getCurrentViewer())
 							.updateHorizontalPos();
 				}
 			}
@@ -223,30 +222,6 @@
 	// // when reach here, should be standard content keys.
 	// return handleRangeModeContentChar(content);
 	// }
-
-	/**
-	 * For inner debuging.
-	 * 
-	 * @param e
-	 */
-    
-    // TODO: dead?
-//	private void dumpKey(KeyEvent e) {
-//		String message = "code:" + Integer.toBinaryString(e.keyCode) + "char:" + e.character + "key:" + Integer.toBinaryString(e.stateMask); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-//		_log.info(message);
-//	}
-//
-//	/**
-//	 * @param content
-//	 */
-//	private boolean handleRangeModeContentChar(char content) {
-//		IHTMLGraphicalViewer viewer = (IHTMLGraphicalViewer) this
-//				.getCurrentViewer();
-//		ContentCommand c = new ContentCommand(viewer, content);
-//		c.execute();
-//		return true;
-//	}
-
 	/*
 	 * (non-Javadoc)
 	 * 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/CommonResourceDialog.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/CommonResourceDialog.java
index 527270b..c714b34 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/CommonResourceDialog.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/CommonResourceDialog.java
@@ -42,9 +42,11 @@
  * selection. The client can prvide the suffixs of files to filter when
  * candidates are shown on the tree,
  * 
+ * TODO: dead?
+ * 
  * @author mengbo
  */
-public class CommonResourceDialog extends TreeViewerSelectionDialog {
+class CommonResourceDialog extends TreeViewerSelectionDialog {
 	private static final int WEBROOT_FOLDER_DEPTH = 2;
 
 	// CommonResourceDialog.statusMessage = Please select an image file
@@ -142,7 +144,7 @@
 		}
 
 		/**
-		 * @see ITreeContentProvider#getElements
+		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements
 		 */
 		public Object[] getElements(Object element) {
 			return getChildren(element);
@@ -159,14 +161,14 @@
 		}
 
 		/**
-		 * @see ITreeContentProvider#hasChildren
+		 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren
 		 */
 		public boolean hasChildren(Object element) {
 			return getChildren(element).length > 0;
 		}
 
 		/**
-		 * @see IContentProvider#inputChanged
+		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged
 		 */
 		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
             // do nothing
@@ -175,10 +177,10 @@
 	}
 
 	// The default resource filter
-	class CommonResourceFilter extends ViewerFilter {
+	static class CommonResourceFilter extends ViewerFilter {
 		private String _suffixs[] = { IFileFolderConstants.EXT_PROPERTIES };
 
-		Logger _log = PDPlugin.getLogger(CommonResourceFilter.class);
+		private Logger _mylog = PDPlugin.getLogger(CommonResourceFilter.class);
 
 		private IProject _project;
 
@@ -197,12 +199,15 @@
 			this._suffixs = _suffixs;
 		}
 
+		/**
+		 * @param project
+		 */
 		public CommonResourceFilter(IProject project) {
 			_project = project;
 		}
 
 		/**
-		 * @param _project
+		 * @param project
 		 *            The _project to set.
 		 */
 		public void setProject(IProject project) {
@@ -264,7 +269,7 @@
 								.getAlerts()
 								.detailError(
 										"Error.ImgFileFilter.0", "Error.ImgFileFilter.2"); //$NON-NLS-2$
-						_log.error(
+						_mylog.error(
 								"Error.ProjectFileDialogContentProvider.0", e); //$NON-NLS-1$
 						return false;
 					}
@@ -368,7 +373,7 @@
 		return new Object[] { returnValue };
 	}
 
-	public IPath getContainerFullPath(Object _selectedElement) {
+	private IPath getContainerFullPath(Object _selectedElement) {
 		if (_selectedElement == null) {
 			return null;
 		} else if (_selectedElement instanceof IContainer) {
@@ -379,7 +384,7 @@
 		return null;
 	}
 
-	public IPath getWebRelatedPath(Object _selectedElement) {
+	private IPath getWebRelatedPath(Object _selectedElement) {
 		IPath result = null;
 		if (_selectedElement == null) {
 			return null;
@@ -395,13 +400,4 @@
 		}
 		return result;
 	}
-
-	/**
-	 * @param _suffixs
-	 *            The _suffixs to set.
-	 */
-	public void setSuffixs(String[] suffixs) {
-		this._suffixs = suffixs;
-		_filter.setSuffixs(suffixs);
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/PartActivationHandler.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/PartActivationHandler.java
index 8cc2087..e6bc799 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/PartActivationHandler.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/PartActivationHandler.java
@@ -27,6 +27,9 @@
 
 	private IWorkbenchPart _trace;
 
+	/**
+	 * @param part
+	 */
 	public PartActivationHandler(IWorkbenchPart part) {
 		_trace = part;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/ResourceOnClasspathDialog.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/ResourceOnClasspathDialog.java
index 8f33ee0..6a53826 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/ResourceOnClasspathDialog.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/ResourceOnClasspathDialog.java
@@ -20,10 +20,10 @@
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IJarEntryResource;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.core.JarEntryFile;
 import org.eclipse.jdt.ui.JavaElementLabelProvider;
 import org.eclipse.jdt.ui.StandardJavaElementContentProvider;
 import org.eclipse.jface.viewers.Viewer;
@@ -63,6 +63,9 @@
 	class ResourceOnClasspathFilter extends ViewerFilter {
 		StandardJavaElementContentProvider _javaContentProvider;
 
+		/**
+		 * @param contentProvider
+		 */
 		public ResourceOnClasspathFilter(
 				StandardJavaElementContentProvider contentProvider) {
 			_javaContentProvider = contentProvider;
@@ -125,9 +128,9 @@
 				}
 				return false;
 			}
-			// XXX: JarEntryFile is for internal use.
-			if (element instanceof JarEntryFile) {
-				String ext = ((JarEntryFile) element).getFullPath()
+
+			if (element instanceof IJarEntryResource) {
+				String ext = ((IJarEntryResource) element).getFullPath()
 						.getFileExtension();
 				if (ext != null && Arrays.asList(_suffixs).contains(ext)) {
 					return true;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/TreeViewerSelectionDialog.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/TreeViewerSelectionDialog.java
index 0197559..97aa367 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/TreeViewerSelectionDialog.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/TreeViewerSelectionDialog.java
@@ -51,19 +51,19 @@
  * 
  * @author mengbo
  */
-public abstract class TreeViewerSelectionDialog extends SelectionDialog {
+abstract class TreeViewerSelectionDialog extends SelectionDialog {
 	// = "Select a file"
 	private static final String DEFAULT_TITLE = PageDesignerResources
 			.getInstance().getString("TreeViewerSelectionDialog.Title"); //$NON-NLS-1$
 
 	/** Used to tag the image type */
-	public static final int STYLE_NONE = 0;
+	static final int STYLE_NONE = 0;
 
-	public static final int STYLE_INFORMATION = 1;
+	static final int STYLE_INFORMATION = 1;
 
-	public static final int STYLE_ERROR = 2;
+	static final int STYLE_ERROR = 2;
 
-	public static final int STYLE_WARNING = 3;
+	static final int STYLE_WARNING = 3;
 
 	/** Sizi of the TreeViewer composite */
 	private static final int SIZING_SELECTION_PANE_HEIGHT = 300;
@@ -96,6 +96,7 @@
 
 	/**
 	 * @param parentShell
+	 * @param statusMessage 
 	 */
 	public TreeViewerSelectionDialog(Shell parentShell, String statusMessage) {
 		super(parentShell);
@@ -106,9 +107,8 @@
 
 	/**
 	 * Returns a new drill down viewer for this dialog.
+	 * @param parent 
 	 * 
-	 * @param heightHint -
-	 *            height hint for the drill down composite
 	 */
 	protected void createTreeViewer(Composite parent) {
 		// Create drill down
@@ -162,6 +162,7 @@
 
 	/**
 	 * Creates the contents of the composite.
+	 * @param parent 
 	 */
 	public void createTreeViewerComposite(Composite parent) {
 		Composite treeViewerComposite = new Composite(parent, SWT.NONE);
@@ -181,7 +182,7 @@
 	/**
 	 * Sets the selected existing container.
 	 * 
-	 * @param container -
+	 * @param selection -
 	 *            the current selected container.
 	 */
 	public void setSelectedElement(Object selection) {
@@ -251,9 +252,6 @@
 		this._filter = filter;
 	}
 
-	public void setStatusMessage(String message) {
-		_statusMessage = message;
-	}
 
 	/**
 	 * Update the status message
@@ -273,6 +271,8 @@
 	/**
 	 * Get the different message according the message type.
 	 * 
+	 * @param imageType 
+	 * 
 	 * @return Image - the message image
 	 */
 	protected Image getMessageImage(int imageType) {
@@ -315,7 +315,14 @@
 		return control;
 	}
 
+	/**
+	 * @param selection
+	 * @return true if the selection is valid
+	 */
 	protected abstract boolean isValidSelection(Object selection);
 
+	/**
+	 * @return the input element
+	 */
 	protected abstract Object findInputElement();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorPart.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorPart.java
index d1dcae1..a7ea94c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorPart.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorPart.java
@@ -41,9 +41,9 @@
 import org.eclipse.ui.IPropertyListener;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.PartInitException;
-//import org.eclipse.ui.internal.WorkbenchPlugin;
 import org.eclipse.ui.part.EditorPart;
 import org.eclipse.ui.part.MultiPageEditorActionBarContributor;
+import org.eclipse.ui.part.MultiPageEditorPart;
 import org.eclipse.ui.part.MultiPageEditorSite;
 
 /**
@@ -74,8 +74,6 @@
 	 * multi-page editor. The page is added at the given index. This also hooks
 	 * a property change listener on the nested editor.
 	 * 
-	 * @param index
-	 *            the index at which to add the page (0-based)
 	 * @param editor
 	 *            the nested editor
 	 * @param input
@@ -123,6 +121,9 @@
 		connectPage(editor);
 	}
 
+	/**
+	 * @param editor
+	 */
 	protected void connectPage(IEditorPart editor) {
 		ISelectionProvider editSelectionProvider = editor.getSite()
 				.getSelectionProvider();
@@ -167,6 +168,9 @@
 		return newContainer;
 	}
 
+	/**
+	 * @throws PartInitException
+	 */
 	abstract protected void createPages() throws PartInitException;
 
 	/**
@@ -354,9 +358,8 @@
 	 * <p>
 	 * Subclasses may extend this method.
 	 * </p>
+	 * @param activeEditor 
 	 * 
-	 * @param newPageIndex
-	 *            the index of the activated page
 	 */
 	protected void activeEditorChanged(IEditorPart activeEditor) {
 		setActiveEditor(activeEditor);
@@ -366,8 +369,7 @@
 		while (site != null) {
 			IEditorActionBarContributor contributor = site
 					.getActionBarContributor();
-			if (contributor != null
-					&& contributor instanceof MultiPageEditorActionBarContributor) {
+			if (contributor instanceof MultiPageEditorActionBarContributor) {
 				((MultiPageEditorActionBarContributor) contributor)
 						.setActivePage(activeEditor);
 			}
@@ -421,9 +423,8 @@
 
 	/**
 	 * Sets the currently active page.
+	 * @param part
 	 * 
-	 * @param pageIndex
-	 *            the index of the page to be activated; the index must be valid
 	 */
 	protected void setActiveEditor(IEditorPart part) {
 		_activeEditor = part;
@@ -501,6 +502,9 @@
 		return false;
 	}
 
+	/**
+	 * @param orientation
+	 */
 	public void setOrientation(int orientation) {
 		this._orientation = orientation;
 		if (_sashForm != null && !_sashForm.isDisposed()) {
@@ -509,6 +513,9 @@
 		}
 	}
 
+	/**
+	 * @param part
+	 */
 	public void setMaximizedEditor(IEditorPart part) {
 		if (part != null) {
 			Composite c = (Composite) _editorToComposite.get(part);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorSelectionProvider.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorSelectionProvider.java
index 229043a..2f47aaa 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorSelectionProvider.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorSelectionProvider.java
@@ -80,6 +80,7 @@
 
 	/**
 	 * Returns the sash editor.
+	 * @return the sash editor part
 	 */
 	public SashEditorPart getSashEditor() {
 		return _sashEditor;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorSite.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorSite.java
index 31cec57..4558404 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorSite.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/common/sash/SashEditorSite.java
@@ -74,9 +74,9 @@
 	 * Creates a site for the given editor nested within the given multi-page
 	 * editor.
 	 * 
-	 * @param _sashEditor
+	 * @param sashEditor
 	 *            the multi-page editor
-	 * @param _editor
+	 * @param editor
 	 *            the nested editor
 	 */
 	public SashEditorSite(SashEditorPart sashEditor, IEditorPart editor) {
@@ -378,19 +378,16 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.IWorkbenchPartSite#progressEnd()
+	/**
+	 * @param job
 	 */
 	public void progressEnd(Job job) {
 		// Do nothing
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.IWorkbenchPartSite#progressStart()
+
+	/**
+	 * @param job
 	 */
 	public void progressStart(Job job) {
 		// Do nothing
@@ -416,23 +413,22 @@
 
 	public void registerContextMenu(MenuManager menuManager,
 			ISelectionProvider selectionProvider, boolean includeEditorInput) {
-		// TODO Auto-generated method stub
-
+	    // do nothing
 	}
 
 	public void registerContextMenu(String menuId, MenuManager menuManager,
 			ISelectionProvider selectionProvider, boolean includeEditorInput) {
-		// TODO Auto-generated method stub
+		// do nothing
 
 	}
 
 	public Object getService(Class api) {
-		// TODO Auto-generated method stub
+		// return null
 		return null;
 	}
 
 	public boolean hasService(Class api) {
-		// TODO Auto-generated method stub
+		// no service
 		return false;
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ClasspathResourceButtonDialogField.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ClasspathResourceButtonDialogField.java
new file mode 100644
index 0000000..6960121
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ClasspathResourceButtonDialogField.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Sybase, Inc. 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:
+ *     Sybase, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.pagedesigner.ui.dialogfields;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jst.jsf.common.ui.IFileFolderConstants;
+import org.eclipse.jst.jsf.common.ui.JSFUICommonPlugin;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IStringButtonAdapter;
+import org.eclipse.jst.jsf.common.ui.internal.dialogfield.StringButtonDialogField;
+import org.eclipse.jst.jsf.common.ui.internal.dialogs.ResourceOnClasspathDialog;
+import org.eclipse.jst.pagedesigner.properties.attrgroup.IElementContextable;
+import org.eclipse.jst.pagedesigner.utils.StructuredModelUtil;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+
+/**
+ * @author mengbo
+ */
+public class ClasspathResourceButtonDialogField extends StringButtonDialogField implements IElementContextable
+{
+
+	private static final String[] PROPERTIES_FILES_SUFFIXS = new String[] { IFileFolderConstants.EXT_PROPERTIES }; //$NON-NLS-1$
+
+	private static class MyStringButtonAdapter implements IStringButtonAdapter
+	{
+		private IProject _project;
+
+		public void changeControlPressed(DialogField field) {
+			browseButtonPressed(field);
+		}
+
+		private void browseButtonPressed(DialogField field) 
+		{
+			if (field instanceof ClasspathResourceButtonDialogField)
+			{
+				ClasspathResourceButtonDialogField classPathField = 
+					(ClasspathResourceButtonDialogField) field;
+				Shell shell = field.getShell();
+				ResourceOnClasspathDialog dialog = 
+					new ResourceOnClasspathDialog(shell, getJavaProject());
+				dialog.setTitle(JSFUICommonPlugin
+						.getResourceString("DialogField.ResourceButton.SelectFile"));//$NON-NLS-1$
+				dialog.setSuffixs(PROPERTIES_FILES_SUFFIXS);
+				if (dialog.open() == Window.OK) {
+					String oldValue = classPathField.getText();
+	
+					String newValue = (String) dialog.getResult()[0];
+					if (oldValue != newValue) {
+						classPathField.setText(newValue);
+					}
+				}
+			}
+		}
+		
+		private IJavaProject getJavaProject() {
+			try {
+				if (_project != null && _project.hasNature(JavaCore.NATURE_ID)) {
+					return JavaCore.create(_project);
+				}
+	            return null;
+			} catch (CoreException e) {
+				return null;
+			}
+		}
+	}
+	
+	/**
+s	 */
+	public ClasspathResourceButtonDialogField() {
+		super(new MyStringButtonAdapter());
+	}
+
+	public void setElementContext(
+			org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode ancester,
+			IDOMElement element) {
+		IProject prj = StructuredModelUtil.getProjectFor(ancester.getModel());
+		
+		IStringButtonAdapter adapter = getStringButtonAdapter();
+		
+		if (adapter instanceof MyStringButtonAdapter)
+		{
+			((MyStringButtonAdapter)adapter)._project = prj;
+		}
+	}
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ContextableClasspathResourceButtonDialogField.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ContextableClasspathResourceButtonDialogField.java
deleted file mode 100644
index fca73e6..0000000
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ContextableClasspathResourceButtonDialogField.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Sybase, Inc. 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:
- *     Sybase, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.pagedesigner.ui.dialogfields;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ClasspathResourceButtonDialogField;
-import org.eclipse.jst.pagedesigner.properties.attrgroup.IElementContextable;
-import org.eclipse.jst.pagedesigner.utils.StructuredModelUtil;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
-import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
-
-/**
- * @author mengbo
- * @version 1.5
- */
-public class ContextableClasspathResourceButtonDialogField extends
-		ClasspathResourceButtonDialogField implements IElementContextable {
-	/**
-	 * @param project
-	 */
-	public ContextableClasspathResourceButtonDialogField() {
-		super(null);
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.pagedesigner.attributegroup.IElementContextable#setElementContext(org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode,
-	 *      org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement)
-	 */
-	public void setElementContext(IDOMNode ancester, IDOMElement element) {
-		IProject prj = StructuredModelUtil.getProjectFor(ancester.getModel());
-		this.setProject(prj);
-	}
-}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ContextableResourceButtonDialogField.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ContextableResourceButtonDialogField.java
index ac658fc..a9e50ec 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ContextableResourceButtonDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ContextableResourceButtonDialogField.java
@@ -29,7 +29,7 @@
 		ResourceButtonDialogField implements IElementContextable {
 
 	/**
-	 * @param project
+	 * Default constructor
 	 */
 	public ContextableResourceButtonDialogField() {
 		super(null);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/DialogFieldWrapper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/DialogFieldWrapper.java
index ef17dd8..893f40e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/DialogFieldWrapper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/DialogFieldWrapper.java
@@ -17,6 +17,7 @@
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldChangeListener;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IStringButtonAdapter;
 import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ISupportTextValue;
+import org.eclipse.jst.pagedesigner.editors.properties.IPropertyPageDescriptor;
 import org.eclipse.jst.pagedesigner.meta.IAttributeDescriptor;
 import org.eclipse.jst.pagedesigner.meta.IBindingHandler;
 import org.eclipse.jst.pagedesigner.properties.attrgroup.IElementContextable;
@@ -49,6 +50,7 @@
 // NOTE: currently this class is dedicated to page designer by using the
 // IElementContextable interface.
 // It should be very easy to make it standard alone and reused in other places.
+@SuppressWarnings("deprecation")
 public class DialogFieldWrapper implements DialogField, ISupportTextValue,
 		IElementContextable {
 	private DialogField _wrapped;
@@ -71,14 +73,23 @@
 
 	private String _tagName;
 
-	private IAttributeDescriptor _attr;
+    private IAttributeDescriptor _attr;
 
-	private IBindingHandler _handler;
+    private IBindingHandler _handler;
+
+	private IPropertyPageDescriptor _pdattr;
 
 	/**
+	 * @param field 
+	 * @param image 
+	 * @param disabledImage 
+	 * @param uri 
+	 * @param tagName 
+	 * @param attr 
+	 * @param handler 
 	 * 
 	 */
-	public DialogFieldWrapper(DialogField field, Image image,
+    public DialogFieldWrapper(DialogField field, Image image,
 			Image disabledImage, String uri, String tagName,
 			IAttributeDescriptor attr, IBindingHandler handler) {
 		super();
@@ -100,6 +111,51 @@
 			 * 
 			 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IStringButtonAdapter#changeControlPressed(org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField)
 			 */
+            public void changeControlPressed(DialogField field1) {
+				Shell shell = field1.getLabelControl(null, null).getShell();
+				DialogFieldWrapper wrapper = (DialogFieldWrapper) field1;
+				String result = _handler
+						.handleBinding(shell, wrapper.getAncester(), wrapper
+								.getElement(), wrapper.getText());
+				if (result != null) {
+					wrapper.setText(result);
+				}
+			}
+		});
+	}
+	
+	/**
+	 * @param field 
+	 * @param image 
+	 * @param disabledImage 
+	 * @param uri 
+	 * @param tagName 
+	 * @param attr 
+	 * @param handler 
+	 * 
+	 */
+    public DialogFieldWrapper(DialogField field, Image image,
+			Image disabledImage, String uri, String tagName,
+			IPropertyPageDescriptor attr, IBindingHandler handler) {
+		super();
+		if (!(field instanceof ISupportTextValue)) {
+			throw new IllegalArgumentException(
+					"Field must be ISupportTextValue");
+		}
+		_wrapped = field;
+		this._image = image;
+		this._disabledImage = disabledImage;
+		this._uri = uri;
+		this._tagName = tagName;
+		this._pdattr = attr;
+		this._handler = handler;
+
+		setDatabindingPressedHandler(new IStringButtonAdapter() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.jst.jsf.common.ui.internal.dialogfield.IStringButtonAdapter#changeControlPressed(org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField)
+			 */
 			public void changeControlPressed(DialogField field1) {
 				Shell shell = field1.getLabelControl(null, null).getShell();
 				DialogFieldWrapper wrapper = (DialogFieldWrapper) field1;
@@ -113,7 +169,7 @@
 		});
 	}
 
-	public void setDatabindingPressedHandler(IStringButtonAdapter adapter) {
+	private void setDatabindingPressedHandler(IStringButtonAdapter adapter) {
 		this._adapter = adapter;
 		this.updateDatabindingControl();
 	}
@@ -151,7 +207,7 @@
 	 * @see org.eclipse.jst.pagedesigner.properties.attrgroup.IElementContextable#setElementContext(org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode,
 	 *      org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement)
 	 */
-	public void setElementContext(IDOMNode ancester, IDOMElement element) {
+    public void setElementContext(IDOMNode ancester, IDOMElement element) {
 		if (_wrapped instanceof IElementContextable) {
 			((IElementContextable) _wrapped).setElementContext(ancester,
 					element);
@@ -159,8 +215,14 @@
 		this._ancester = ancester;
 		this._element = element;
 
-		boolean bindingEnabled = _handler.isEnabled(_ancester, _element, _uri,
+		boolean bindingEnabled = false;
+		
+		if (_attr != null)
+			bindingEnabled = _handler.isEnabled(_ancester, _element, _uri,
 				_tagName, _attr);
+		else if (_pdattr != null)
+			bindingEnabled = false;//_handler.isEnabled(_ancester, _element, _pdattr);
+		
 		this.setDatabindingEnabled(bindingEnabled);
 	}
 
@@ -204,7 +266,7 @@
 	 * @return
 	 */
 	private Control getDatabingingButton(FormToolkit toolkit, Composite parent) {
-		if (_databindingButton == null) {
+		if (_databindingButton == null || _databindingButton.isDisposed()) {
 			Assert.isNotNull(parent,
 					"uncreated control requested with composite null"); //$NON-NLS-1$
 			if (toolkit != null) {
@@ -316,14 +378,14 @@
 		return _wrapped.getNumberOfControls() + 1;
 	}
 
+	/**
+	 * @param enabled
+	 */
 	public void setDatabindingEnabled(boolean enabled) {
 		this._databindingEnabled = enabled;
 		updateDatabindingControl();
 	}
 
-	public boolean isDatabindingEnabled() {
-		return _databindingEnabled;
-	}
 
 	/*
 	 * (non-Javadoc)
@@ -374,7 +436,7 @@
 		_wrapped.putAttachedData(key, value);
 	}
 
-	protected void databindingControlPressed() {
+	private void databindingControlPressed() {
 		if (_adapter != null) {
 			_adapter.changeControlPressed(this);
 		}
@@ -389,14 +451,17 @@
 		_wrapped.handleGrabHorizontal();
 	}
 
-	public IDOMNode getAncester() {
+	private IDOMNode getAncester() {
 		return _ancester;
 	}
 
-	public IDOMElement getElement() {
+	private IDOMElement getElement() {
 		return _element;
 	}
 
+	/**
+	 * @return the wrapped field
+	 */
 	public DialogField getWrappedDialogField() {
 		return _wrapped;
 	}
@@ -408,4 +473,8 @@
 	public void setToolTip(String toolTip) {
 		_wrapped.setToolTip(toolTip);
 	}
+
+	public Shell getShell() {
+		return _wrapped.getShell();
+	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ExtendedResourceButtonDialogField.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ExtendedResourceButtonDialogField.java
index 52c1b0e..0c458ec 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ExtendedResourceButtonDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/ExtendedResourceButtonDialogField.java
@@ -21,6 +21,9 @@
  */
 public class ExtendedResourceButtonDialogField extends
 		ResourceButtonDialogField {
+	/**
+	 * @param project
+	 */
 	public ExtendedResourceButtonDialogField(IProject project) {
 		super(project);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/StyleButtonDialogField.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/StyleButtonDialogField.java
index c8b9d8e..0e05a53 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/StyleButtonDialogField.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogfields/StyleButtonDialogField.java
@@ -36,10 +36,16 @@
 		IElementContextable {
 	private IDOMElement _element;
 
+	/**
+	 * Equivalent to StyleButtonDialogField(null)
+	 */
 	public StyleButtonDialogField() {
 		this(null);
 	}
 
+	/**
+	 * @param element
+	 */
 	public StyleButtonDialogField(IDOMElement element) {
 		this(null, element);
 		setStringButtonAdapter(new IStringButtonAdapter() {
@@ -50,6 +56,10 @@
 		setButtonLabel(DialogsMessages.getString("StyleButtonDialogField.Edit"));//$NON-NLS-1$ 
 	}
 
+	/**
+	 * @param adapter
+	 * @param element
+	 */
 	public StyleButtonDialogField(IStringButtonAdapter adapter,
 			IDOMElement element) {
 		super(adapter);
@@ -92,8 +102,4 @@
 			}
 		}
 	}
-
-	public void setElement(IDOMElement element) {
-		_element = element;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BackgroudPreferenceNode.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BackgroudPreferenceNode.java
index 20aaec7..f1fe115 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BackgroudPreferenceNode.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BackgroudPreferenceNode.java
@@ -28,6 +28,10 @@
 
 	private CSSPropertyContext _style;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public BackgroudPreferenceNode(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_element = element;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BackgroundPreferencePage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BackgroundPreferencePage.java
index a15b9bb..83ca8c4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BackgroundPreferencePage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BackgroundPreferencePage.java
@@ -39,6 +39,10 @@
 
 	private ColorButtonDialogField _backgroundColorField;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public BackgroundPreferencePage(IDOMElement element,
 			CSSPropertyContext style) {
 		super();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BlockPreferenceNode.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BlockPreferenceNode.java
index 988295f..064cefc 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BlockPreferenceNode.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BlockPreferenceNode.java
@@ -28,6 +28,10 @@
 
 	private CSSPropertyContext _style;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public BlockPreferenceNode(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_element = element;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BlockPreferencePage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BlockPreferencePage.java
index 8d5215c..786e738 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BlockPreferencePage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BlockPreferencePage.java
@@ -39,6 +39,10 @@
 
 	private Text _textIndentText;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public BlockPreferencePage(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_style = style;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BorderPreferenceNode.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BorderPreferenceNode.java
index e3a4feb..63e775f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BorderPreferenceNode.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BorderPreferenceNode.java
@@ -28,6 +28,10 @@
 
 	private CSSPropertyContext _style;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public BorderPreferenceNode(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_element = element;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BorderPreferencePage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BorderPreferencePage.java
index adc769f..78e99f5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BorderPreferencePage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BorderPreferencePage.java
@@ -46,6 +46,10 @@
 	private ColorButtonDialogField _colorTopField, _colorRightField,
 			_colorBottomField, _colorLeftField;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public BorderPreferencePage(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_style = style;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BoxPreferenceNode.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BoxPreferenceNode.java
index 106bf83..8899b9f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BoxPreferenceNode.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BoxPreferenceNode.java
@@ -28,6 +28,10 @@
 
 	private CSSPropertyContext _styles;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public BoxPreferenceNode(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_element = element;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BoxPreferencePage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BoxPreferencePage.java
index 450355c..697944f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BoxPreferencePage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/BoxPreferencePage.java
@@ -47,6 +47,10 @@
 	private StyleCombo _marginTopUnitCombo, _marginRightUnitCombo,
 			_marginBottomUnitCombo, _marginLeftUnitCombo;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public BoxPreferencePage(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_style = style;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/DialogsMessages.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/DialogsMessages.java
index 60db23c..612d976 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/DialogsMessages.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/DialogsMessages.java
@@ -28,6 +28,10 @@
         // no external instantiation
 	}
 
+	/**
+	 * @param key
+	 * @return the value for key or !!key!! if none
+	 */
 	public static String getString(String key) {
 		try {
 			return RESOURCE_BUNDLE.getString(key);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ExtensionsPreferenceNode.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ExtensionsPreferenceNode.java
index 1ac4ce7..39eca4f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ExtensionsPreferenceNode.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ExtensionsPreferenceNode.java
@@ -28,6 +28,10 @@
 
 	private CSSPropertyContext _style;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public ExtensionsPreferenceNode(IDOMElement element,
 			CSSPropertyContext style) {
 		super();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/IStyleConstants.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/IStyleConstants.java
index 9c0952a..4a840d6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/IStyleConstants.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/IStyleConstants.java
@@ -16,29 +16,56 @@
  * @version 1.5
  */
 public interface IStyleConstants {
+	/**
+	 * attachment constants
+	 */
 	final public static String[] ATTACHMENT = { "fixed", "scroll" };
 
+	/**
+	 * auto constants
+	 */
 	final public static String[] AUTO = { "auto" };
 
+	/**
+	 * border style constants
+	 */
 	final public static String[] BORDER_STYLE = { "none", "dotted", "dashed",
 			"solid", "double", "groove", "ridge", "inset", "outset" };
 
+	/**
+	 * border width constants
+	 */
 	final public static String[] BORDER_WIDTH = { "thin", "medium", "thick" };
 
+	/**
+	 * clear constants
+	 */
 	final public static String[] CLEAR = { "left", "right", "both", "none" };
 
+	/**
+	 * color constants
+	 */
 	final public static String[] COLOR = { "black", "blue", "gray", "green",
 			"orange", "red", "white", "yellow", "aqua", "fuchsia", "lime",
 			"maroon", "navy", "olive", "purple", "silver", "teal" };
 
+	/**
+	 * display constants
+	 */
 	final public static String[] DISPLAY = { "none", "inline", "block",
 			"list-item", "run-in", "compact", "marker", "table",
 			"inline-table", "table-row-group", "table-header-group",
 			"table-footer-group", "table-row", "table-column-group",
 			"table-column", "table-cell", "table-caption" };
 
+	/**
+	 * float constants
+	 */
 	final public static String[] FLOAT = { "left", "right", "none" };
 
+	/**
+	 * font family constants
+	 */
 	final public static String[] FONT_FAMILY = { "Verdana, Arial, Sans-Serif",
 			"Tahoma, Verdana, Arial, Sans-Serif", "\"Times New Roman\", Serif",
 			"Georgia, \"Times New Roman\", Serif",
@@ -46,63 +73,129 @@
 			"\"Comic Sans MS\", Sans-Serif", "\"Courier New\", Courier",
 			"\"Trebuchet MS\", Sans-Serif" };
 
+	/**
+	 * font size constants
+	 */
 	final public static String[] FONT_SIZE_NUMBER = { "9", "10", "12", "14",
 			"16", "18", "24", "36", "xx-small", "x-small", "small", "medium",
 			"large", "x-large", "xx-large", "smaller", "larger" };
 
+	/**
+	 * font style constants
+	 */
 	final public static String[] FONT_STYLE = { "normal", "italic", "oblique" };
 
+	/**
+	 * font transform constants
+	 */
 	final public static String[] FONT_TEXTTRANSFORM = { "capitalize",
 			"uppercase", "lowercase", "none" };
 
+	/**
+	 * font variant constants
+	 */
 	final public static String[] FONT_VARIANT = { "normal", "small-caps" };
 
+	/**
+	 * font weight constants
+	 */
 	final public static String[] FONT_WEIGHT = { "normal", "bold", "bolder",
 			"lighter", "100", "200", "300", "400", "500", "600", "700", "800",
 			"900" };
 
+	/**
+	 * list position constants
+	 */
 	final public static String[] LIST_POSITION = { "inside", "outside" };
 
+	/**
+	 * list type constants
+	 */
 	final public static String[] LIST_TYPE = { "disc", "circle", "sqaure",
 			"decimal", "lower-roman", "upper-roman", "lower-alpha",
 			"upper-alpah", "none" };
 
+	/**
+	 * none
+	 */
 	final public static String[] NONE = { "none" };
 
+	/**
+	 * normal
+	 */
 	final public static String[] NORMAL = { "normal" };
 
+	/**
+	 * percent
+	 */
 	final public static String[] PERCENT = { "%" };
 
+	/**
+	 * position constants
+	 */
 	final public static String[] POSITION = { "left", "center", "right" };
 
+	/**
+	 * positioning type constants
+	 */
 	final public static String[] POSITIONING_TYPE = { "absolute", "relative",
 			"static" };
 
+	/**
+	 * repeat constants
+	 */
 	final public static String[] REPEAT = { "no-repeat", "repeat", "repeat-x",
 			"repeat-y" };
 
+	/**
+	 * unit of size constants
+	 */
 	final public static String[] SIZE_UNIT = { "px", "pt", "in", "cm", "mm",
 			"pc", "em", "ex", "%" };
 
+	/**
+	 * text align constants
+	 */
 	final public static String[] TEXT_ALIGN = { "left", "right", "center",
 			"justify" };
 
+	/**
+	 * text decoration constants
+	 */
 	final public static String[] TEXT_DECORATION = { "underline", "overline",
 			"line-through", "blink", "none" };
 
+	/**
+	 * veritical align constants
+	 */
 	final public static String[] VERTICAL_ALIGN = { "baseline", "sub", "super",
 			"top", "text-top", "middle", "bottom", "text-bottom" };
 
+	/**
+	 * white space constants
+	 */
 	final public static String[] WHITE_SPACE = { "normal", "pre", "nowrap" };
 
+	/**
+	 * visibility constants
+	 */
 	final public static String[] VISIBILITY = { "inherit", "visible", "hidden" };
 
+	/**
+	 * overflow constants
+	 */
 	final public static String[] OVERFLOW = { "visible", "hidden", "scroll",
 			"auto" };
 
+	/**
+	 * page break constants
+	 */
 	final public static String[] PAGE_BREAK = { "auto", "always", "left",
 			"right" };
 
+	/**
+	 * cursor constants
+	 */
 	final public static String[] CURSOR = { "hand", "crosshair", "text",
 			"wait", "default", "help", "e-resize", "ne-resize", "n-resize",
 			"nw-resize", "w-resize", "sw-resize", "s-resize", "se-resize",
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ListPreferenceNode.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ListPreferenceNode.java
index 334afe4..a0cd4a3 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ListPreferenceNode.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ListPreferenceNode.java
@@ -28,6 +28,10 @@
 
 	private CSSPropertyContext _style;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public ListPreferenceNode(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_element = element;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ListPreferencePage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ListPreferencePage.java
index 078e7e3..eda6fa5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ListPreferencePage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/ListPreferencePage.java
@@ -32,6 +32,10 @@
 
 	private StyleCombo _typeCombo, _imageCombo, _positionCombo;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public ListPreferencePage(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_style = style;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/PositioningPreferenceNode.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/PositioningPreferenceNode.java
index f46dd07..78f7576 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/PositioningPreferenceNode.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/PositioningPreferenceNode.java
@@ -28,6 +28,10 @@
 
 	private CSSPropertyContext _style;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public PositioningPreferenceNode(IDOMElement element,
 			CSSPropertyContext style) {
 		super();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/PositioningPreferencePage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/PositioningPreferencePage.java
index 415ff91..0d1c494 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/PositioningPreferencePage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/PositioningPreferencePage.java
@@ -48,6 +48,10 @@
 	private Combo _clipTopUnitCombo, _clipRightUnitCombo, _clipBottomUnitCombo,
 			_clipLeftUnitCombo;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public PositioningPreferencePage(IDOMElement element,
 			CSSPropertyContext style) {
 		super();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/StyleDialog.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/StyleDialog.java
index 8ad3b9b..ee269aa 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/StyleDialog.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/StyleDialog.java
@@ -29,6 +29,8 @@
 	/**
 	 * @param parentShell
 	 * @param manager
+	 * @param element 
+	 * @param style 
 	 */
 	public StyleDialog(Shell parentShell, PreferenceManager manager,
 			IDOMElement element, CSSPropertyContext style) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/TextPreferenceNode.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/TextPreferenceNode.java
index c279c69..f01913e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/TextPreferenceNode.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/TextPreferenceNode.java
@@ -28,6 +28,10 @@
 
 	private IDOMElement _element;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public TextPreferenceNode(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_element = element;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/TextPreferencePage.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/TextPreferencePage.java
index af69bc5..abb291d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/TextPreferencePage.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/ui/dialogs/TextPreferencePage.java
@@ -47,6 +47,10 @@
 			_textDecorationOverlineButton, _textDecorationLineThroughButton,
 			_textDecorationBlinkButton, _textDecorationNoneButton;
 
+	/**
+	 * @param element
+	 * @param style
+	 */
 	public TextPreferencePage(IDOMElement element, CSSPropertyContext style) {
 		super();
 		_style = style;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/BodyHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/BodyHelper.java
index 2f9485e..2a20b1a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/BodyHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/BodyHelper.java
@@ -192,7 +192,7 @@
         // good, we find a body container and the new node should be header
         // of it.
         Node child = headerContainer.getFirstChild();
-        // TODO: dead? Node refNode = position.getNextSiblingNode();
+
         // if parent is different from headerContainer, then
         // child!=referenceHolder[0] will always be true
         while (child != null) // && child != refNode)
@@ -246,15 +246,16 @@
 	 * @param position
 	 * @param body
 	 * @param defaultPrefix
-	 * @return
+	 * @return the new dom position based on the insert.  May return null if
+	 * insert fails.
 	 */
 	public static IDOMPosition insertBody(IDOMPosition position, QName body,
 			String defaultPrefix) {
 		IBodyInfo bodyInfo = getBodyInfo((IDOMNode) position.getContainerNode());
 
 		Node node = position.getContainerNode();
-		Node originalContainer = node;
-		Node nextSibling = position.getNextSiblingNode();
+		final Node originalContainer = node;
+		final Node nextSibling = position.getNextSiblingNode();
 
 		// create the body element first.
 		Document ownerDoc;
@@ -267,9 +268,9 @@
 			return null; // should not happen
 		}
 
-		String prefix = JSPUtil.getOrCreatePrefix(((IDOMNode) node).getModel(),
+		final String prefix = JSPUtil.getOrCreatePrefix(((IDOMNode) node).getModel(),
 				body.getNamespaceURI(), defaultPrefix);
-		Element ele = ownerDoc.createElement((prefix == null ? ""
+		final Element ele = ownerDoc.createElement((prefix == null ? ""
 				: (prefix + ":"))
 				+ body.getLocalPart());
 
@@ -322,7 +323,8 @@
 	 * 
 	 * @param uri
 	 * @param tag
-	 * @return
+	 * @return true if tag is an element that should be moved in response to 
+	 * body insert.
 	 */
 	public static boolean shouldIgnoreAdjust(String uri, String tag) {
 		// FIXME:
@@ -331,6 +333,10 @@
 				|| (ITLDConstants.URI_JSP.equals(uri));
 	}
 
+	/**
+	 * @param node
+	 * @return the body info corresponding to node (should we use a node adapter?)
+	 */
 	public static IBodyInfo getBodyInfo(IDOMNode node) {
 		// TODO: in the future, when bodyinfo is no longer singleton, we'll use
 		// adapter mechanism.
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/CacheManager.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/CacheManager.java
index 5f513f4..5483281 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/CacheManager.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/CacheManager.java
@@ -34,6 +34,10 @@
 	// keep track of LRU
 	LinkedList _keys = new LinkedList();
 
+	/**
+	 * @param creator
+	 * @param maxSize
+	 */
 	public CacheManager(ICacheEntryCreator creator, int maxSize) {
 		_creator = creator;
 		_maxSize = maxSize;
@@ -42,6 +46,10 @@
 		}
 	}
 
+	/**
+	 * @param key
+	 * @return the cache entry for key
+	 */
 	public Object getEntry(Object key) {
 		Object result = _map.get(key);
 		if (result == null) {
@@ -62,6 +70,9 @@
         return result;
 	}
 
+	/**
+	 * Dispose the cache
+	 */
 	public void disposeAll() {
 		_keys.clear();
 		for (Iterator iter = _map.keySet().iterator(); iter.hasNext();) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/CommandUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/CommandUtil.java
index 114355b..b86284f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/CommandUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/CommandUtil.java
@@ -11,12 +11,22 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.utils;
 
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jst.jsf.common.metadata.query.ITaglibDomainMetaDataModelContext;
+import org.eclipse.jst.jsf.common.metadata.query.TaglibDomainMetaDataQueryHelper;
 import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IStructuredDocumentContextResolverFactory;
+import org.eclipse.jst.jsf.context.resolver.structureddocument.IWorkspaceContextResolver;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContext;
+import org.eclipse.jst.jsf.context.structureddocument.IStructuredDocumentContextFactory;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
 import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry;
+import org.eclipse.jst.pagedesigner.itemcreation.CreationData;
 import org.eclipse.jst.pagedesigner.itemcreation.ITagCreator;
-import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
+import org.eclipse.jst.pagedesigner.itemcreation.internal.TagCreationFactory;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 import org.w3c.dom.Element;
 
@@ -27,24 +37,49 @@
 public class CommandUtil {
 	private static final Logger _log = PDPlugin.getLogger(CommandUtil.class);
 
-	public static Element excuteInsertion(TagToolPaletteEntry itemDes,
-			IHTMLGraphicalViewer viewer, IDOMPosition domPosition) {
-		return excuteInsertion(itemDes, viewer.getModel(), domPosition);
-	}
-
+	/**
+	 * @param tagItem
+	 * @param model
+	 * @param domPosition
+	 * @param customizationData 
+	 * @return the element inserted or null if failed
+	 */
 	public static Element excuteInsertion(TagToolPaletteEntry tagItem,
-			IDOMModel model, IDOMPosition domPosition) {
-		try {						
-			ITagCreator tagCreator = (ITagCreator)tagItem.getAdapter(ITagCreator.class);
+			IDOMModel model, IDOMPosition domPosition, IAdaptable customizationData) {
+		try 
+		{	
+		    IStructuredDocument doc = model.getDocument().getStructuredDocument();
+		    
+		    IStructuredDocumentContext context =
+		        IStructuredDocumentContextFactory.INSTANCE.getContext(doc, -1);
+		    IWorkspaceContextResolver  resolver =
+		        IStructuredDocumentContextResolverFactory.INSTANCE.getWorkspaceContextResolver(context);
+		    
+		    IProject project = resolver.getProject();
+		    
+            final ITaglibDomainMetaDataModelContext modelContext = 
+                TaglibDomainMetaDataQueryHelper
+                    .createMetaDataModelContext(project, tagItem.getURI());
+
+            // TODO: note that the constructor currently causes the prefix defn
+            // to be added to the target doc.  This should be moved into
+            // an ensure method in the AbstractTagCreator
+            final CreationData creationData = 
+                new CreationData(tagItem, model, domPosition, modelContext, customizationData);
+
+		    ITagCreator tagCreator = 
+			    TagCreationFactory.getInstance().createTagCreator(creationData.getTagId());
+			
 			if (tagCreator == null)
+			{
 				return null;//should never get here!
-			
-			return tagCreator.createTag(tagItem, model, domPosition);
-			
+			}
+
+			return tagCreator.createTag(creationData);
 		} catch (Exception e) {
-			_log.info("Invalid insertion in position:" + domPosition + "\n", e);
-			return null;
+			_log.error("Problem creating tag "+tagItem.getTagName()+" at:" + domPosition + "\n", e);
 		}
+        return null;
 	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/DOMUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/DOMUtil.java
index c266580..098d285 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/DOMUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/DOMUtil.java
@@ -26,6 +26,12 @@
  * @author mengbo
  */
 public class DOMUtil {
+	/**
+	 * @param parent
+	 * @param tag
+	 * @return the list of child elements  of parent that are Elements
+	 * and that have name 'tag' ignoring case
+	 */
 	public static List getChildElementsByTagIgnoreCase(Element parent,
 			String tag) {
 		List ret = new ArrayList();
@@ -44,7 +50,8 @@
 
 	/**
 	 * @param ele
-	 * @return
+	 * @return the element value of the TEXT_NODE children of element
+	 * concat'd together
 	 */
 	public static String getTextElementValue(Element ele) {
 		StringBuffer buffer = new StringBuffer();
@@ -63,7 +70,8 @@
 	/**
 	 * @param element
 	 * @param string
-	 * @return
+	 * @return the attribute named string on element ignoring case in the comparison
+	 * or null if not found
 	 */
 	public static String getAttributeIgnoreCase(Element element, String string) {
 		NamedNodeMap map = element.getAttributes();
@@ -77,9 +85,9 @@
 	}
 
 	/**
-	 * @param tr
-	 * @param strings
-	 * @return
+	 * @param parent
+	 * @param tags
+	 * @return the list of children of parent with name in tags ignoring case
 	 */
 	public static List getChildrenByTagsIgnoreCase(Element parent, String[] tags) {
 		List result = new ArrayList();
@@ -99,10 +107,17 @@
 		return result;
 	}
 
+	/**
+	 * @param ele
+	 */
 	public static void removeAllChildren(Element ele) {
 		((ElementImpl) ele).removeChildNodes();
 	}
 
+	/**
+	 * @param ele
+	 * @param value
+	 */
 	public static void setTextElementValue(Element ele, String value) {
 		removeAllChildren(ele);
 		Text txt = ele.getOwnerDocument().createTextNode(value);
@@ -110,10 +125,11 @@
 	}
 
 	/**
-	 * @param htmlElement
-	 * @param string
-	 * @param i
-	 * @return
+	 * @param ele 
+	 * @param attr 
+	 * @param defaultvalue 
+	 * @return the integer attribute of ele called attr.  Default value
+	 * is returned if the attribute is not found.
 	 */
 	public static int getIntAttributeIgnoreCase(Element ele, String attr,
 			int defaultvalue) {
@@ -135,7 +151,7 @@
 	 * get all child elements
 	 * 
 	 * @param ele
-	 * @return
+	 * @return the list of element children of type ELEMENT_NODE
 	 */
 	public static List getElementChildren(Element ele) {
 		List ret = new ArrayList();
@@ -154,7 +170,8 @@
 	 * 
 	 * @param ele
 	 * @param attrName
-	 * @return
+	 * @return true if element has attribute called attrName ignoring
+	 * case  in the comparison.
 	 */
 	public static boolean hasAttribute(Element ele, String attrName) {
 		NamedNodeMap map = ele.getAttributes();
@@ -167,6 +184,10 @@
 		return false;
 	}
 
+	/**
+	 * @param node
+	 * @param sb
+	 */
 	public static void nodeToString(Node node, StringBuffer sb) {
 		int type = node.getNodeType();
 		switch (type) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/EntityMap.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/EntityMap.java
index 14b7213..0b68bad 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/EntityMap.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/EntityMap.java
@@ -20,6 +20,10 @@
 public class EntityMap {
 	private static Logger _log = PDPlugin.getLogger(EntityMap.class);
 
+	/**
+	 * @param s
+	 * @return s translated for HTML entities.
+	 */
 	public static String translate(String s) {
 		char[] array = s.toCharArray();
 		StringBuffer buffer = new StringBuffer();
@@ -64,6 +68,8 @@
 	 * Translate entity maps and compact whitespace. For heading and training
 	 * space, will not trim, only compact (making multiple whitespace to become
 	 * a single ' ' char).
+	 * @param s 
+	 * @return the result string.
 	 */
 	public static String translateAndCompact(String s) {
 		char[] array = s.toCharArray();
@@ -121,6 +127,8 @@
 	 * 
 	 * @param s
 	 *            the form &#number or &letterordigit without the trailing ";"
+	 * @param strBuf 
+	 * @return true  the translation can be done
 	 */
 	public static boolean translateEntity(String s, StringBuffer strBuf) {
 		int i = HTMLSpecialCharHelper.getSpecial(s); // HTMLSpecialCharHelper
@@ -160,7 +168,7 @@
 	 * 
 	 * @param n
 	 * @return
-	 * @see http://www.w3.org/Talks/1999/0830-tutorial-unicode-mjd/slide27-0.html
+	 * see http://www.w3.org/Talks/1999/0830-tutorial-unicode-mjd/slide27-0.html
 	 */
 	private static char replaceBadEntity(char n) {
 		if (n < 132 || n > 156)
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/HTMLSpecialCharHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/HTMLSpecialCharHelper.java
index 9e2a880..4959198 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/HTMLSpecialCharHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/HTMLSpecialCharHelper.java
@@ -34,260 +34,260 @@
 	static {
 		_table = new Hashtable(256);
 
-		_table.put(new Integer(34), "&quot;"); //$NON-NLS-1$
-		_table.put(new Integer(38), "&amp;"); //$NON-NLS-1$
-		_table.put(new Integer(60), "&lt;"); //$NON-NLS-1$
-		_table.put(new Integer(62), "&gt;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(34), "&quot;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(38), "&amp;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(60), "&lt;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(62), "&gt;"); //$NON-NLS-1$
 
-		_table.put(new Integer(160), "&nbsp;"); //$NON-NLS-1$
-		_table.put(new Integer(161), "&iexcl;"); //$NON-NLS-1$
-		_table.put(new Integer(162), "&cent;"); //$NON-NLS-1$
-		_table.put(new Integer(163), "&pound;"); //$NON-NLS-1$
-		_table.put(new Integer(164), "&curren;"); //$NON-NLS-1$
-		_table.put(new Integer(165), "&yen;"); //$NON-NLS-1$
-		_table.put(new Integer(166), "&brvbar;"); //$NON-NLS-1$
-		_table.put(new Integer(167), "&sect;"); //$NON-NLS-1$
-		_table.put(new Integer(168), "&uml;"); //$NON-NLS-1$
-		_table.put(new Integer(169), "&copy;"); //$NON-NLS-1$
-		_table.put(new Integer(170), "&ordf;"); //$NON-NLS-1$
-		_table.put(new Integer(171), "&laquo;"); //$NON-NLS-1$
-		_table.put(new Integer(172), "&not;"); //$NON-NLS-1$
-		_table.put(new Integer(173), "&shy;"); //$NON-NLS-1$
-		_table.put(new Integer(174), "&reg;"); //$NON-NLS-1$
-		_table.put(new Integer(175), "&macr;"); //$NON-NLS-1$
-		_table.put(new Integer(176), "&deg;"); //$NON-NLS-1$
-		_table.put(new Integer(177), "&plusmn;"); //$NON-NLS-1$
-		_table.put(new Integer(178), "&sup2;"); //$NON-NLS-1$
-		_table.put(new Integer(179), "&sup3;"); //$NON-NLS-1$
-		_table.put(new Integer(180), "&acute;"); //$NON-NLS-1$
-		_table.put(new Integer(181), "&micro;"); //$NON-NLS-1$
-		_table.put(new Integer(182), "&para;"); //$NON-NLS-1$
-		_table.put(new Integer(183), "&middot;"); //$NON-NLS-1$
-		_table.put(new Integer(184), "&cedil;"); //$NON-NLS-1$
-		_table.put(new Integer(185), "&sup1;"); //$NON-NLS-1$
-		_table.put(new Integer(186), "&ordm;"); //$NON-NLS-1$
-		_table.put(new Integer(187), "&raquo;"); //$NON-NLS-1$
-		_table.put(new Integer(188), "&frac14;"); //$NON-NLS-1$
-		_table.put(new Integer(189), "&frac12;"); //$NON-NLS-1$
-		_table.put(new Integer(190), "&frac34;"); //$NON-NLS-1$
-		_table.put(new Integer(191), "&iquest;"); //$NON-NLS-1$
-		_table.put(new Integer(192), "&Agrave;"); //$NON-NLS-1$
-		_table.put(new Integer(193), "&Aacute;"); //$NON-NLS-1$
-		_table.put(new Integer(194), "&Acirc;"); //$NON-NLS-1$
-		_table.put(new Integer(195), "&Atilde;"); //$NON-NLS-1$
-		_table.put(new Integer(196), "&Auml;"); //$NON-NLS-1$
-		_table.put(new Integer(197), "&Aring;"); //$NON-NLS-1$
-		_table.put(new Integer(198), "&AElig;"); //$NON-NLS-1$
-		_table.put(new Integer(199), "&Ccedil;"); //$NON-NLS-1$
-		_table.put(new Integer(200), "&Egrave;"); //$NON-NLS-1$
-		_table.put(new Integer(201), "&Eacute;"); //$NON-NLS-1$
-		_table.put(new Integer(202), "&Ecirc;"); //$NON-NLS-1$
-		_table.put(new Integer(203), "&Euml;"); //$NON-NLS-1$
-		_table.put(new Integer(204), "&Igrave;"); //$NON-NLS-1$
-		_table.put(new Integer(205), "&Iacute;"); //$NON-NLS-1$
-		_table.put(new Integer(206), "&Icirc;"); //$NON-NLS-1$
-		_table.put(new Integer(207), "&Iuml;"); //$NON-NLS-1$
-		_table.put(new Integer(208), "&ETH;"); //$NON-NLS-1$
-		_table.put(new Integer(209), "&Ntilde;"); //$NON-NLS-1$
-		_table.put(new Integer(210), "&Ograve;"); //$NON-NLS-1$
-		_table.put(new Integer(211), "&Oacute;"); //$NON-NLS-1$
-		_table.put(new Integer(212), "&Ocirc;"); //$NON-NLS-1$
-		_table.put(new Integer(213), "&Otilde;"); //$NON-NLS-1$
-		_table.put(new Integer(214), "&Ouml;"); //$NON-NLS-1$
-		_table.put(new Integer(215), "&times;"); //$NON-NLS-1$
-		_table.put(new Integer(216), "&Oslash;"); //$NON-NLS-1$
-		_table.put(new Integer(217), "&Ugrave;"); //$NON-NLS-1$
-		_table.put(new Integer(218), "&Uacute;"); //$NON-NLS-1$
-		_table.put(new Integer(219), "&Ucirc;"); //$NON-NLS-1$
-		_table.put(new Integer(220), "&Uuml;"); //$NON-NLS-1$
-		_table.put(new Integer(221), "&Yacute;"); //$NON-NLS-1$
-		_table.put(new Integer(222), "&THORN;"); //$NON-NLS-1$
-		_table.put(new Integer(223), "&szlig;"); //$NON-NLS-1$
-		_table.put(new Integer(224), "&agrave;"); //$NON-NLS-1$
-		_table.put(new Integer(225), "&aacute;"); //$NON-NLS-1$
-		_table.put(new Integer(226), "&acirc;"); //$NON-NLS-1$
-		_table.put(new Integer(227), "&atilde;"); //$NON-NLS-1$
-		_table.put(new Integer(228), "&auml;"); //$NON-NLS-1$
-		_table.put(new Integer(229), "&aring;"); //$NON-NLS-1$
-		_table.put(new Integer(230), "&aelig;"); //$NON-NLS-1$
-		_table.put(new Integer(231), "&ccedil;"); //$NON-NLS-1$
-		_table.put(new Integer(232), "&egrave;"); //$NON-NLS-1$
-		_table.put(new Integer(233), "&eacute;"); //$NON-NLS-1$
-		_table.put(new Integer(234), "&ecirc;"); //$NON-NLS-1$
-		_table.put(new Integer(235), "&euml;"); //$NON-NLS-1$
-		_table.put(new Integer(236), "&igrave;"); //$NON-NLS-1$
-		_table.put(new Integer(237), "&iacute;"); //$NON-NLS-1$
-		_table.put(new Integer(238), "&icirc;"); //$NON-NLS-1$
-		_table.put(new Integer(239), "&iuml;"); //$NON-NLS-1$
-		_table.put(new Integer(240), "&eth;"); //$NON-NLS-1$
-		_table.put(new Integer(241), "&ntilde;"); //$NON-NLS-1$
-		_table.put(new Integer(242), "&ograve;"); //$NON-NLS-1$
-		_table.put(new Integer(243), "&oacute;"); //$NON-NLS-1$
-		_table.put(new Integer(244), "&ocirc;"); //$NON-NLS-1$
-		_table.put(new Integer(245), "&otilde;"); //$NON-NLS-1$
-		_table.put(new Integer(246), "&ouml;"); //$NON-NLS-1$
-		_table.put(new Integer(247), "&divide;"); //$NON-NLS-1$
-		_table.put(new Integer(248), "&oslash;"); //$NON-NLS-1$
-		_table.put(new Integer(249), "&ugrave;"); //$NON-NLS-1$
-		_table.put(new Integer(250), "&uacute;"); //$NON-NLS-1$
-		_table.put(new Integer(251), "&ucirc;"); //$NON-NLS-1$
-		_table.put(new Integer(252), "&uuml;"); //$NON-NLS-1$
-		_table.put(new Integer(253), "&yacute;"); //$NON-NLS-1$
-		_table.put(new Integer(254), "&thorn;"); //$NON-NLS-1$
-		_table.put(new Integer(255), "&yuml;"); //$NON-NLS-1$
-		_table.put(new Integer(402), "&fnof;"); //$NON-NLS-1$
-		_table.put(new Integer(913), "&Alpha;"); //$NON-NLS-1$
-		_table.put(new Integer(914), "&Beta;"); //$NON-NLS-1$
-		_table.put(new Integer(915), "&Gamma;"); //$NON-NLS-1$
-		_table.put(new Integer(916), "&Delta;"); //$NON-NLS-1$
-		_table.put(new Integer(917), "&Epsilon;"); //$NON-NLS-1$
-		_table.put(new Integer(918), "&Zeta;"); //$NON-NLS-1$
-		_table.put(new Integer(919), "&Eta;"); //$NON-NLS-1$
-		_table.put(new Integer(920), "&Theta;"); //$NON-NLS-1$
-		_table.put(new Integer(921), "&Iota;"); //$NON-NLS-1$
-		_table.put(new Integer(922), "&Kappa;"); //$NON-NLS-1$
-		_table.put(new Integer(923), "&Lambda;"); //$NON-NLS-1$
-		_table.put(new Integer(924), "&Mu;"); //$NON-NLS-1$
-		_table.put(new Integer(925), "&Nu;"); //$NON-NLS-1$
-		_table.put(new Integer(926), "&Xi;"); //$NON-NLS-1$
-		_table.put(new Integer(927), "&Omicron;"); //$NON-NLS-1$
-		_table.put(new Integer(928), "&Pi;"); //$NON-NLS-1$
-		_table.put(new Integer(929), "&Rho;"); //$NON-NLS-1$
-		_table.put(new Integer(931), "&Sigma;"); //$NON-NLS-1$
-		_table.put(new Integer(932), "&Tau;"); //$NON-NLS-1$
-		_table.put(new Integer(933), "&Upsilon;"); //$NON-NLS-1$
-		_table.put(new Integer(934), "&Phi;"); //$NON-NLS-1$
-		_table.put(new Integer(935), "&Chi;"); //$NON-NLS-1$
-		_table.put(new Integer(936), "&Psi;"); //$NON-NLS-1$
-		_table.put(new Integer(937), "&Omega;"); //$NON-NLS-1$
-		_table.put(new Integer(945), "&alpha;"); //$NON-NLS-1$
-		_table.put(new Integer(946), "&beta;"); //$NON-NLS-1$
-		_table.put(new Integer(947), "&gamma;"); //$NON-NLS-1$
-		_table.put(new Integer(948), "&delta;"); //$NON-NLS-1$
-		_table.put(new Integer(949), "&epsilon;"); //$NON-NLS-1$
-		_table.put(new Integer(950), "&zeta;"); //$NON-NLS-1$
-		_table.put(new Integer(951), "&eta;"); //$NON-NLS-1$
-		_table.put(new Integer(952), "&theta;"); //$NON-NLS-1$
-		_table.put(new Integer(953), "&iota;"); //$NON-NLS-1$
-		_table.put(new Integer(954), "&kappa;"); //$NON-NLS-1$
-		_table.put(new Integer(955), "&lambda;"); //$NON-NLS-1$
-		_table.put(new Integer(956), "&mu;"); //$NON-NLS-1$
-		_table.put(new Integer(957), "&nu;"); //$NON-NLS-1$
-		_table.put(new Integer(958), "&xi;"); //$NON-NLS-1$
-		_table.put(new Integer(959), "&omicron;"); //$NON-NLS-1$
-		_table.put(new Integer(960), "&pi;"); //$NON-NLS-1$
-		_table.put(new Integer(961), "&rho;"); //$NON-NLS-1$
-		_table.put(new Integer(962), "&sigmaf;"); //$NON-NLS-1$
-		_table.put(new Integer(963), "&sigma;"); //$NON-NLS-1$
-		_table.put(new Integer(964), "&tau;"); //$NON-NLS-1$
-		_table.put(new Integer(965), "&upsilon;"); //$NON-NLS-1$
-		_table.put(new Integer(966), "&phi;"); //$NON-NLS-1$
-		_table.put(new Integer(967), "&chi;"); //$NON-NLS-1$
-		_table.put(new Integer(968), "&psi;"); //$NON-NLS-1$
-		_table.put(new Integer(969), "&omega;"); //$NON-NLS-1$
-		_table.put(new Integer(977), "&thetasym;"); //$NON-NLS-1$
-		_table.put(new Integer(978), "&upsih;"); //$NON-NLS-1$
-		_table.put(new Integer(982), "&piv;"); //$NON-NLS-1$
-		_table.put(new Integer(8226), "&bull;"); //$NON-NLS-1$
-		_table.put(new Integer(8230), "&hellip;"); //$NON-NLS-1$
-		_table.put(new Integer(8242), "&prime;"); //$NON-NLS-1$
-		_table.put(new Integer(8243), "&Prime;"); //$NON-NLS-1$
-		_table.put(new Integer(8254), "&oline;"); //$NON-NLS-1$
-		_table.put(new Integer(8260), "&frasl;"); //$NON-NLS-1$
-		_table.put(new Integer(8472), "&weierp;"); //$NON-NLS-1$
-		_table.put(new Integer(8465), "&image;"); //$NON-NLS-1$
-		_table.put(new Integer(8476), "&real;"); //$NON-NLS-1$
-		_table.put(new Integer(8482), "&trade;"); //$NON-NLS-1$
-		_table.put(new Integer(8501), "&alefsym;"); //$NON-NLS-1$
-		_table.put(new Integer(8592), "&larr;"); //$NON-NLS-1$
-		_table.put(new Integer(8593), "&uarr;"); //$NON-NLS-1$
-		_table.put(new Integer(8594), "&rarr;"); //$NON-NLS-1$
-		_table.put(new Integer(8595), "&darr;"); //$NON-NLS-1$
-		_table.put(new Integer(8596), "&harr;"); //$NON-NLS-1$
-		_table.put(new Integer(8629), "&crarr;"); //$NON-NLS-1$
-		_table.put(new Integer(8656), "&lArr;"); //$NON-NLS-1$
-		_table.put(new Integer(8657), "&uArr;"); //$NON-NLS-1$
-		_table.put(new Integer(8658), "&rArr;"); //$NON-NLS-1$
-		_table.put(new Integer(8659), "&dArr;"); //$NON-NLS-1$
-		_table.put(new Integer(8660), "&hArr;"); //$NON-NLS-1$
-		_table.put(new Integer(8704), "&forall;"); //$NON-NLS-1$
-		_table.put(new Integer(8706), "&part;"); //$NON-NLS-1$
-		_table.put(new Integer(8707), "&exist;"); //$NON-NLS-1$
-		_table.put(new Integer(8709), "&empty;"); //$NON-NLS-1$
-		_table.put(new Integer(8711), "&nabla;"); //$NON-NLS-1$
-		_table.put(new Integer(8712), "&isin;"); //$NON-NLS-1$
-		_table.put(new Integer(8713), "&notin;"); //$NON-NLS-1$
-		_table.put(new Integer(8715), "&ni;"); //$NON-NLS-1$
-		_table.put(new Integer(8719), "&prod;"); //$NON-NLS-1$
-		_table.put(new Integer(8722), "&sum;"); //$NON-NLS-1$
-		_table.put(new Integer(8722), "&minus;"); //$NON-NLS-1$
-		_table.put(new Integer(8727), "&lowast;"); //$NON-NLS-1$
-		_table.put(new Integer(8730), "&radic;"); //$NON-NLS-1$
-		_table.put(new Integer(8733), "&prop;"); //$NON-NLS-1$
-		_table.put(new Integer(8734), "&infin;"); //$NON-NLS-1$
-		_table.put(new Integer(8736), "&ang;"); //$NON-NLS-1$
-		_table.put(new Integer(8869), "&and;"); //$NON-NLS-1$
-		_table.put(new Integer(8870), "&or;"); //$NON-NLS-1$
-		_table.put(new Integer(8745), "&cap;"); //$NON-NLS-1$
-		_table.put(new Integer(8746), "&cup;"); //$NON-NLS-1$
-		_table.put(new Integer(8747), "&int;"); //$NON-NLS-1$
-		_table.put(new Integer(8756), "&there4;"); //$NON-NLS-1$
-		_table.put(new Integer(8764), "&sim;"); //$NON-NLS-1$
-		_table.put(new Integer(8773), "&cong;"); //$NON-NLS-1$
-		_table.put(new Integer(8773), "&asymp;"); //$NON-NLS-1$
-		_table.put(new Integer(8800), "&ne;"); //$NON-NLS-1$
-		_table.put(new Integer(8801), "&equiv;"); //$NON-NLS-1$
-		_table.put(new Integer(8804), "&le;"); //$NON-NLS-1$
-		_table.put(new Integer(8805), "&ge;"); //$NON-NLS-1$
-		_table.put(new Integer(8834), "&sub;"); //$NON-NLS-1$
-		_table.put(new Integer(8835), "&sup;"); //$NON-NLS-1$
-		_table.put(new Integer(8836), "&nsub;"); //$NON-NLS-1$
-		_table.put(new Integer(8838), "&sube;"); //$NON-NLS-1$
-		_table.put(new Integer(8839), "&supe;"); //$NON-NLS-1$
-		_table.put(new Integer(8853), "&oplus;"); //$NON-NLS-1$
-		_table.put(new Integer(8855), "&otimes;"); //$NON-NLS-1$
-		_table.put(new Integer(8869), "&perp;"); //$NON-NLS-1$
-		_table.put(new Integer(8901), "&sdot;"); //$NON-NLS-1$
-		_table.put(new Integer(8968), "&lceil;"); //$NON-NLS-1$
-		_table.put(new Integer(8969), "&rceil;"); //$NON-NLS-1$
-		_table.put(new Integer(8970), "&lfloor;"); //$NON-NLS-1$
-		_table.put(new Integer(8971), "&rfloor;"); //$NON-NLS-1$
-		_table.put(new Integer(9001), "&lang;"); //$NON-NLS-1$
-		_table.put(new Integer(9002), "&rang;"); //$NON-NLS-1$
-		_table.put(new Integer(9674), "&loz;"); //$NON-NLS-1$
-		_table.put(new Integer(9824), "&spades;"); //$NON-NLS-1$
-		_table.put(new Integer(9827), "&clubs;"); //$NON-NLS-1$
-		_table.put(new Integer(9829), "&hearts;"); //$NON-NLS-1$
-		_table.put(new Integer(9830), "&diams;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(160), "&nbsp;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(161), "&iexcl;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(162), "&cent;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(163), "&pound;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(164), "&curren;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(165), "&yen;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(166), "&brvbar;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(167), "&sect;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(168), "&uml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(169), "&copy;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(170), "&ordf;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(171), "&laquo;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(172), "&not;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(173), "&shy;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(174), "&reg;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(175), "&macr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(176), "&deg;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(177), "&plusmn;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(178), "&sup2;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(179), "&sup3;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(180), "&acute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(181), "&micro;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(182), "&para;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(183), "&middot;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(184), "&cedil;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(185), "&sup1;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(186), "&ordm;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(187), "&raquo;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(188), "&frac14;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(189), "&frac12;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(190), "&frac34;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(191), "&iquest;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(192), "&Agrave;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(193), "&Aacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(194), "&Acirc;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(195), "&Atilde;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(196), "&Auml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(197), "&Aring;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(198), "&AElig;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(199), "&Ccedil;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(200), "&Egrave;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(201), "&Eacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(202), "&Ecirc;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(203), "&Euml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(204), "&Igrave;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(205), "&Iacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(206), "&Icirc;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(207), "&Iuml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(208), "&ETH;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(209), "&Ntilde;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(210), "&Ograve;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(211), "&Oacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(212), "&Ocirc;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(213), "&Otilde;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(214), "&Ouml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(215), "&times;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(216), "&Oslash;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(217), "&Ugrave;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(218), "&Uacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(219), "&Ucirc;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(220), "&Uuml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(221), "&Yacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(222), "&THORN;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(223), "&szlig;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(224), "&agrave;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(225), "&aacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(226), "&acirc;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(227), "&atilde;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(228), "&auml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(229), "&aring;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(230), "&aelig;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(231), "&ccedil;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(232), "&egrave;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(233), "&eacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(234), "&ecirc;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(235), "&euml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(236), "&igrave;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(237), "&iacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(238), "&icirc;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(239), "&iuml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(240), "&eth;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(241), "&ntilde;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(242), "&ograve;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(243), "&oacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(244), "&ocirc;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(245), "&otilde;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(246), "&ouml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(247), "&divide;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(248), "&oslash;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(249), "&ugrave;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(250), "&uacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(251), "&ucirc;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(252), "&uuml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(253), "&yacute;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(254), "&thorn;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(255), "&yuml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(402), "&fnof;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(913), "&Alpha;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(914), "&Beta;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(915), "&Gamma;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(916), "&Delta;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(917), "&Epsilon;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(918), "&Zeta;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(919), "&Eta;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(920), "&Theta;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(921), "&Iota;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(922), "&Kappa;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(923), "&Lambda;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(924), "&Mu;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(925), "&Nu;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(926), "&Xi;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(927), "&Omicron;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(928), "&Pi;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(929), "&Rho;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(931), "&Sigma;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(932), "&Tau;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(933), "&Upsilon;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(934), "&Phi;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(935), "&Chi;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(936), "&Psi;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(937), "&Omega;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(945), "&alpha;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(946), "&beta;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(947), "&gamma;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(948), "&delta;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(949), "&epsilon;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(950), "&zeta;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(951), "&eta;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(952), "&theta;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(953), "&iota;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(954), "&kappa;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(955), "&lambda;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(956), "&mu;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(957), "&nu;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(958), "&xi;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(959), "&omicron;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(960), "&pi;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(961), "&rho;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(962), "&sigmaf;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(963), "&sigma;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(964), "&tau;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(965), "&upsilon;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(966), "&phi;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(967), "&chi;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(968), "&psi;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(969), "&omega;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(977), "&thetasym;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(978), "&upsih;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(982), "&piv;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8226), "&bull;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8230), "&hellip;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8242), "&prime;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8243), "&Prime;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8254), "&oline;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8260), "&frasl;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8472), "&weierp;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8465), "&image;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8476), "&real;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8482), "&trade;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8501), "&alefsym;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8592), "&larr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8593), "&uarr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8594), "&rarr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8595), "&darr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8596), "&harr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8629), "&crarr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8656), "&lArr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8657), "&uArr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8658), "&rArr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8659), "&dArr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8660), "&hArr;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8704), "&forall;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8706), "&part;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8707), "&exist;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8709), "&empty;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8711), "&nabla;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8712), "&isin;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8713), "&notin;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8715), "&ni;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8719), "&prod;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8722), "&sum;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8722), "&minus;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8727), "&lowast;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8730), "&radic;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8733), "&prop;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8734), "&infin;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8736), "&ang;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8869), "&and;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8870), "&or;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8745), "&cap;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8746), "&cup;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8747), "&int;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8756), "&there4;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8764), "&sim;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8773), "&cong;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8773), "&asymp;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8800), "&ne;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8801), "&equiv;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8804), "&le;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8805), "&ge;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8834), "&sub;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8835), "&sup;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8836), "&nsub;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8838), "&sube;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8839), "&supe;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8853), "&oplus;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8855), "&otimes;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8869), "&perp;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8901), "&sdot;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8968), "&lceil;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8969), "&rceil;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8970), "&lfloor;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8971), "&rfloor;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(9001), "&lang;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(9002), "&rang;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(9674), "&loz;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(9824), "&spades;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(9827), "&clubs;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(9829), "&hearts;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(9830), "&diams;"); //$NON-NLS-1$
 
-		_table.put(new Integer(338), "&OElig;"); //$NON-NLS-1$
-		_table.put(new Integer(339), "&oelig;"); //$NON-NLS-1$
-		_table.put(new Integer(352), "&Scaron;"); //$NON-NLS-1$
-		_table.put(new Integer(353), "&scaron;"); //$NON-NLS-1$
-		_table.put(new Integer(376), "&Yuml;"); //$NON-NLS-1$
-		_table.put(new Integer(710), "&circ;"); //$NON-NLS-1$
-		_table.put(new Integer(732), "&tilde;"); //$NON-NLS-1$
-		_table.put(new Integer(8194), "&ensp;"); //$NON-NLS-1$
-		_table.put(new Integer(8195), "&emsp;"); //$NON-NLS-1$
-		_table.put(new Integer(8201), "&thinsp;"); //$NON-NLS-1$
-		_table.put(new Integer(8204), "&zwnj;"); //$NON-NLS-1$
-		_table.put(new Integer(8205), "&zwj;"); //$NON-NLS-1$
-		_table.put(new Integer(8206), "&lrm;"); //$NON-NLS-1$
-		_table.put(new Integer(8207), "&rlm;"); //$NON-NLS-1$
-		_table.put(new Integer(8211), "&ndash;"); //$NON-NLS-1$
-		_table.put(new Integer(151), "&mdash;"); //$NON-NLS-1$
-		_table.put(new Integer(8216), "&lsquo;"); //$NON-NLS-1$
-		_table.put(new Integer(8217), "&rsquo;"); //$NON-NLS-1$
-		_table.put(new Integer(8218), "&sbquo;"); //$NON-NLS-1$
-		_table.put(new Integer(8220), "&ldquo;"); //$NON-NLS-1$
-		_table.put(new Integer(8221), "&rdquo;"); //$NON-NLS-1$
-		_table.put(new Integer(8222), "&bdquo;"); //$NON-NLS-1$
-		_table.put(new Integer(8224), "&dagger;"); //$NON-NLS-1$
-		_table.put(new Integer(8225), "&Dagger;"); //$NON-NLS-1$
-		_table.put(new Integer(8240), "&permil;"); //$NON-NLS-1$
-		_table.put(new Integer(8249), "&lsaquo;"); //$NON-NLS-1$
-		_table.put(new Integer(8250), "&rsaquo;"); //$NON-NLS-1$
-		_table.put(new Integer(8364), "&euro;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(338), "&OElig;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(339), "&oelig;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(352), "&Scaron;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(353), "&scaron;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(376), "&Yuml;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(710), "&circ;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(732), "&tilde;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8194), "&ensp;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8195), "&emsp;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8201), "&thinsp;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8204), "&zwnj;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8205), "&zwj;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8206), "&lrm;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8207), "&rlm;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8211), "&ndash;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(151), "&mdash;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8216), "&lsquo;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8217), "&rsquo;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8218), "&sbquo;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8220), "&ldquo;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8221), "&rdquo;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8222), "&bdquo;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8224), "&dagger;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8225), "&Dagger;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8240), "&permil;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8249), "&lsaquo;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8250), "&rsaquo;"); //$NON-NLS-1$
+		_table.put(Integer.valueOf(8364), "&euro;"); //$NON-NLS-1$
 
 		_reverse = new Hashtable(256);
 		for (Enumeration e = _table.keys(); e.hasMoreElements();) {
@@ -300,12 +300,18 @@
 	}
 
 	/**
+	 * @param ch 
 	 * @return if not in the special list
 	 */
 	public static String getSpecial(int ch) {
-		return (String) _table.get(new Integer(ch));
+		return (String) _table.get(Integer.valueOf(ch));
 	}
 
+	/**
+	 * @param str
+	 * @return the code value corresponding to the string or null
+	 * if string is unknown
+	 */
 	public static int getSpecial(String str) {
 		Integer result = (Integer) _reverse.get(str);
 		if (result == null) {
@@ -314,6 +320,13 @@
         return result.intValue();
 	}
 
+	/**
+	 * @param str
+	 * @param start
+	 * @param end
+	 * @param writer
+	 * @throws IOException
+	 */
 	public static void encode(String str, int start, int end, Writer writer)
 			throws IOException {
 		for (int i = start; i < end; i++) {
@@ -333,10 +346,22 @@
 		}
 	}
 
+	/**
+	 * @param str
+	 * @param result
+	 * @return the encoded string buffer
+	 */
 	public static StringBuffer encode(String str, StringBuffer result) {
 		return encode(str, 0, str.length(), result);
 	}
 
+	/**
+	 * @param str
+	 * @param start
+	 * @param end
+	 * @param result
+	 * @return the encoded string buffer
+	 */
 	public static StringBuffer encode(String str, int start, int end,
 			StringBuffer result) {
 		for (int i = start; i < end; i++) {
@@ -357,11 +382,25 @@
 		return result;
 	}
 
+	/**
+	 * @param str
+	 * @param buffer
+	 * @return the decoded string buffer
+	 * @throws RuntimeException
+	 */
 	public static StringBuffer decode(String str, StringBuffer buffer)
 			throws RuntimeException {
 		return decode(str, 0, str.length(), buffer);
 	}
 
+	/**
+	 * @param str
+	 * @param start
+	 * @param end
+	 * @param buffer
+	 * @return the decoded string buffer
+	 * @throws RuntimeException
+	 */
 	public static StringBuffer decode(String str, int start, int end,
 			StringBuffer buffer) throws RuntimeException {
 		int pos = start;
@@ -398,6 +437,10 @@
 		return buffer;
 	}
 
+	/**
+	 * @param entityRef
+	 * @return the code for the decoded entity reference
+	 */
 	public static int decodeEntity(String entityRef) {
 		Integer result = (Integer) _reverse.get(entityRef);
 		if (result != null) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/HTMLUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/HTMLUtil.java
index f469858..a4400d2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/HTMLUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/HTMLUtil.java
@@ -24,7 +24,7 @@
 	 * check whether a char is a HTML whitespace.
 	 * 
 	 * @param ch
-	 * @return
+	 * @return true if ch is considered to be HTML whitespace
 	 * @see <a href="http://www.w3.org/TR/html4/struct/text.html#h-9.1">white
 	 *      space </a>
 	 */
@@ -35,7 +35,7 @@
 
 	/**
 	 * @param text
-	 * @return
+	 * @return true if the entire string is considered to be HTML whitespace
 	 */
 	public static boolean isHTMLWhitespaceString(String text) {
 		for (int i = 0, size = text.length(); i < size; i++) {
@@ -46,7 +46,10 @@
 		return true;
 	}
 
-	public static final String[] HiddenTags = new String[] {
+	/**
+	 * the HTML tags considered to be hidden
+	 */
+	static final String[] HiddenTags = new String[] {
 			IHTMLConstants.TAG_APPLET, IHTMLConstants.TAG_AREA,
 			IHTMLConstants.TAG_BASE, IHTMLConstants.TAG_BASEFONT,
 			IHTMLConstants.TAG_HEAD, IHTMLConstants.TAG_IFRAME,
@@ -56,6 +59,10 @@
 			IHTMLConstants.TAG_STYLE, IHTMLConstants.TAG_TITLE,
 			IHTMLConstants.TAG_PARAM };
 
+	/**
+	 * @param tag
+	 * @return true if the tag name is not in the list of hidden tags
+	 */
 	public static boolean isVisualHtmlElement(String tag) {
 		return !Arrays.asList(HiddenTags).contains(tag.toLowerCase());
 	}
@@ -66,10 +73,10 @@
 	 * tag close.
 	 * <p>
 	 * For consequent whitespace, will compact them.
-	 * 
-	 * @param data
-	 * @return
-	 * @see http://www.w3.org/TR/html4/struct/text.html#h-9.1
+	 * @param textNode 
+	 * @param s 
+	 * @return the compacted string
+	 * see http://www.w3.org/TR/html4/struct/text.html#h-9.1
 	 */
 	// XXX: currently, the whitespace handling is in this class, in the future
 	// may consider move it
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/ICacheEntryCreator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/ICacheEntryCreator.java
index 8edf749..a63faee 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/ICacheEntryCreator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/ICacheEntryCreator.java
@@ -11,8 +11,21 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.utils;
 
-public interface ICacheEntryCreator {
-	public Object createEntry(Object key);
+/**
+ * Identifies a factory/dispose advisor for cache entries
+ * @param <KEY> 
+ * @param <ENTRY> 
+ */
+public interface ICacheEntryCreator<KEY,ENTRY> {
+	/**
+	 * @param key
+	 * @return the created entry
+	 */
+	public ENTRY createEntry(KEY key);
 
-	public void dispose(Object key, Object entry);
+	/**
+	 * @param key
+	 * @param entry
+	 */
+	public void dispose(KEY key, ENTRY entry);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/IntFlexArray.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/IntFlexArray.java
index 0e2ccc1..4c50dcf 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/IntFlexArray.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/IntFlexArray.java
@@ -22,16 +22,26 @@
 
 	int size = 0;
 
+	/**
+	 * Create a new flex array with default capacity
+	 */
 	public IntFlexArray() {
 		this(10);
 	}
 
+	/**
+	 * @param initCapacity
+	 */
 	public IntFlexArray(int initCapacity) {
 		if (initCapacity <= 0)
 			initCapacity = 10;
 		array = new int[initCapacity];
 	}
 
+	/**
+	 * @param idx
+	 * @param obj
+	 */
 	public void setAt(int idx, int obj) {
 		ensureCapacity(idx + 1);
 		array[idx] = obj;
@@ -39,12 +49,19 @@
 			size = idx + 1;
 	}
 
+	/**
+	 * @param idx
+	 * @return the value at idx or 0 if idx is out of bounds
+	 */
 	public int getAt(int idx) {
 		if (idx < array.length)
 			return array[idx];
         return 0;
 	}
 
+	/**
+	 * @return the current size of the array
+	 */
 	public int getSize() {
 		return size;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/JSPUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/JSPUtil.java
index 9f40f17..99526d9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/JSPUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/JSPUtil.java
@@ -76,7 +76,7 @@
 		if (prefix != null) {
 			return prefix;
 		}
-		
+
 		prefix = findUnusedPrefix(model, defaultPrefix);
 
 		//need proper API to determine xml type... this may need to change in future
@@ -142,6 +142,31 @@
 		TLDCMDocumentManager m = TaglibController.getTLDCMDocumentManager(model
 				.getStructuredDocument());
 		if (m == null) {
+		    // if the doc manager has nothing but the type is XML,
+		    // then see if the prefix is encoded as a namespace in
+		    // the doc root
+		    if (model.getDocument().isXMLType())
+		    {
+		        Element root = getRootElement(model);
+	            if (root != null){              
+	                NamedNodeMap attrs = root.getAttributes();
+	                for (int i=0;i<attrs.getLength();i++){
+	                    Attr a = (Attr)attrs.item(i);
+	                    //is the taglib uri already declared?
+	                    if (a.getValue().equals(uri)
+	                            && a.getName().startsWith("xmlns:"))
+	                    {
+	                        String prefix =  a.getNodeName().substring("xmlns:".length());
+	                        
+	                        if ("".equals(prefix))
+	                        {
+	                            prefix = null;
+	                        }
+	                        return prefix;
+	                    }
+	                }
+	            }
+		    }
 			return null;
 		}
 		List trackers = m.getTaglibTrackers();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/JavaUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/JavaUtil.java
index 2cc3eb7..7d554c6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/JavaUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/JavaUtil.java
@@ -16,8 +16,8 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJarEntryResource;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.internal.core.JarEntryFile;
 import org.eclipse.jst.jsf.common.ui.IFileFolderConstants;
 import org.eclipse.jst.pagedesigner.PDPlugin;
 
@@ -29,7 +29,7 @@
 	 * 
 	 * @param javaProject
 	 * @param parent
-	 * @return
+	 * @return the path in javaProject or new Path("") if not found on a class path
 	 * @author mengbo
 	 */
 	public static IPath getPathOnClasspath(IJavaProject javaProject,
@@ -81,8 +81,8 @@
 					}
 				}
 			}
-		} else if (parent instanceof JarEntryFile) {
-			IPath elementPath = ((JarEntryFile) parent).getFullPath();
+		} else if (parent instanceof IJarEntryResource) {
+			IPath elementPath = ((IJarEntryResource) parent).getFullPath();
 			if (elementPath.getFileExtension().equalsIgnoreCase(
 					IFileFolderConstants.EXT_PROPERTIES)) {
 				result = elementPath;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/NodeLocationComparator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/NodeLocationComparator.java
index 87cf105..571819a 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/NodeLocationComparator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/NodeLocationComparator.java
@@ -26,19 +26,22 @@
 public class NodeLocationComparator implements Comparator {
 	private final static Map orders = new HashMap();
 
-	private final static Integer DEFAULT_ORDER = new Integer(Integer.MAX_VALUE);
+	private final static Integer DEFAULT_ORDER = Integer.valueOf(Integer.MAX_VALUE);
 
 	private static NodeLocationComparator _instance = new NodeLocationComparator();
 	static {
-		orders.put("taglib", new Integer(0));
-		orders.put("directive.taglib", new Integer(0));
-		orders.put("head", new Integer(1));
+		orders.put("taglib", Integer.valueOf(0));
+		orders.put("directive.taglib", Integer.valueOf(0));
+		orders.put("head", Integer.valueOf(1));
 	}
 
 	private NodeLocationComparator() {
         // no external instantiation
 	}
 
+	/**
+	 * @return the singleton
+	 */
 	public static NodeLocationComparator getInstance() {
 		return _instance;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/PreviewUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/PreviewUtil.java
index 3faf608..3174b0f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/PreviewUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/PreviewUtil.java
@@ -20,6 +20,7 @@
 import java.util.Map;
 import java.util.MissingResourceException;
 import java.util.PropertyResourceBundle;
+import java.util.Map.Entry;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
@@ -47,26 +48,67 @@
 			.getProperty("line.separator"); //$NON-NLS-1$
 
 	/** web root path */
-	public static String WEBROOT_PATH = null;
+	private final static String WEBROOT_PATH = null;
 
 	/** the file being previewed */
-	public static IFile CURRENT_FILE = null;
+	private static IFile CURRENT_FILE = null;
 
 	/** the property bundel */
-	public static PropertyResourceBundle BUNDLE = null;
+	private static PropertyResourceBundle BUNDLE = null;
 
 	/** the property bundel map used for loadbundle preview action */
-	public static Map BUNDLE_MAP = null;
+	private static Map BUNDLE_MAP = null;
 
 	/** the variable name used for loadbundel preview action */
-	public static String VAR = null;
+	private static String VAR = null;
 
 	/** key is prefix value is uri */
 	private static Map _taglibMap = new HashMap();
 
-	// TODO: dead? private static final String PAGE_EXTEND = "_jsppreview_.html"; //$NON-NLS-1$
 
 	/**
+	 * @return the current bundle
+	 */
+	public static final PropertyResourceBundle getBUNDLE() {
+        return BUNDLE;
+    }
+
+    /**
+     * @param bundle
+     */
+    public static final void setBUNDLE(PropertyResourceBundle bundle) {
+        BUNDLE = bundle;
+    }
+
+    /**
+     * @return the current bundle map
+     */
+    public static final Map getBUNDLE_MAP() {
+        return BUNDLE_MAP;
+    }
+
+    /**
+     * @param bundle_map
+     */
+    public static final void setBUNDLE_MAP(Map bundle_map) {
+        BUNDLE_MAP = bundle_map;
+    }
+
+    /**
+     * @return the current variable
+     */
+    public static final String getVAR() {
+        return VAR;
+    }
+
+    /**
+     * @param var
+     */
+    public static final void setVAR(String var) {
+        VAR = var;
+    }
+
+    /**
 	 * @return Returns the _taglibMap.
 	 */
 	public static Map getTaglibMap() {
@@ -86,6 +128,7 @@
 	 * 
 	 * @param map
 	 *            tag attribute map
+	 * @return the attribute string
 	 */
 	public static String getAttributesAsString(Map map) {
 		return getAttributesAsString(map, true);
@@ -96,6 +139,7 @@
 	 * 
 	 * @param uri
 	 *            taglib uri
+	 * @return the path as a string
 	 */
 	public static String getPathFromURI(String uri) {
 		if (uri == null) {
@@ -134,6 +178,7 @@
 	 * 
 	 * @param attrValue
 	 *            expression
+	 * @return the value
 	 */
 	public static String getValueOFEP(String attrValue) {
 		if (attrValue != null) {
@@ -176,16 +221,18 @@
 	 *            tag attribute map
 	 * @param flag
 	 *            state
+	 * @return the attributes as a single string
 	 */
-	public static String getAttributesAsString(Map map, boolean flag) {
+	private static String getAttributesAsString(Map<String, String> map, boolean flag) {
 		if (map == null) {
 			return null;
 		}
 
 		StringBuffer stringbuffer = new StringBuffer();
-		for (Iterator e = map.keySet().iterator(); e.hasNext();) {
-			String attrName = (String) e.next();
-			String attrValue = (String) map.get(attrName);
+		for (Iterator<Entry<String, String>> e = map.entrySet().iterator(); e.hasNext();) {
+		    Map.Entry<String,String> entry = e.next();
+			String attrName = entry.getKey();
+			String attrValue = entry.getValue();
 			attrValue = getValueOFEP(attrValue);
 			if (ICSSPropertyID.ATTR_SRC.equalsIgnoreCase(attrName)
 					|| ICSSPropertyID.ATTR_HREF.equalsIgnoreCase(attrName)
@@ -229,6 +276,7 @@
 	 * 
 	 * @param nodeMap
 	 *            NamedNodeMap type
+	 * @return the map
 	 */
 	public static Map getAttributeMap(NamedNodeMap nodeMap) {
 		if (nodeMap != null) {
@@ -252,7 +300,7 @@
 	/**
 	 * @param result
 	 * @param editorInput
-	 * @return
+	 * @return the file
 	 */
 	public static File toFile(StringBuffer result, IEditorInput editorInput) {
 		try {
@@ -293,7 +341,7 @@
 		if (attrMap != null) {
 			for (int i = 0, n = attrMap.getLength(); i < n; i++) {
 				Node attrNode = attrMap.item(i);
-				if (attrNode != null && attrNode instanceof Attr) {
+				if (attrNode instanceof Attr) {
 					Attr attr = (Attr) attrNode;
 					attr.setNodeValue(getValueOFEP(attr.getNodeValue()));
 					attr.setNodeValue(PathUtil.convertToAbsolutePath(attr
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/ProjectResolver.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/ProjectResolver.java
index 2433df1..e18044d 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/ProjectResolver.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/ProjectResolver.java
@@ -45,6 +45,10 @@
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
+/**
+ * A URIResolver implementation
+ *
+ */
 public class ProjectResolver implements URIResolver {
 	private static final String TLD_TAG_URI = "uri";
 
@@ -66,12 +70,16 @@
 	 * project.getAdapter(URIResolver.class) to obtain a URIResolver aware of
 	 * the Project's special requirements. Note that a URIResolver may not be
 	 * returned at all so manually creating this object may still be required.
+	 * @param project
 	 */
 	public ProjectResolver(IProject project) {
 		super();
 		_project = project;
 	}
 
+	/**
+	 * @param path
+	 */
 	public void seekTld(IFolder path) {
 		if (path == null) {
 			return;
@@ -104,6 +112,9 @@
 		}
 	}
 
+	/**
+	 * @param path
+	 */
 	public void seekTld(File path) {
 		if (path == null || !path.isDirectory()) {
 			return;
@@ -140,23 +151,28 @@
 		}
 	}
 
+	/**
+	 * @param tldFile
+	 * @return the uri for the tld in tldFile or null
+	 */
 	public String getURIfromTLD(File tldFile) {
 
 		if (tldFile == null) {
 			return null;
 		}
-		IDOMModel tldModel;
+		IDOMModel tldModel = null;
 
 		InputStream in = null;
 		try {
 			in = new FileInputStream(tldFile);
 		} catch (FileNotFoundException e) {
 			_log.error("RenderingTraverser.Error.FileNotFound", e);
+			return null;
 		}
 //		IDOMModel xmlModel = null;
 
 		try {
-			tldModel = (IDOMModel) PDPlugin.getModelManager().getModelForRead(
+			tldModel = (IDOMModel) StructuredModelManager.getModelManager().getModelForRead(
 					tldFile.getAbsolutePath(), in, null);
 			NodeList uriList = tldModel.getDocument().getElementsByTagName(
 					TLD_TAG_URI);
@@ -170,11 +186,20 @@
 			_log.error("RenderingTraverser.Error.IO", e1);
 		} finally {
 			ResourceUtils.ensureClosed(in);
+			
+			if (tldModel != null)
+			{
+			    tldModel.releaseFromRead();
+			}
 		}
 
 		return null;
 	}
 
+	/**
+	 * @param tldFile
+	 * @return the URI for the TLD in tldFile or null
+	 */
 	public String getURIfromTLD(IFile tldFile) {
 		if (tldFile == null) {
 			return null;
@@ -198,6 +223,9 @@
 		return null;
 	}
 
+	/**
+	 * initialize the map of tlds
+	 */
 	public void initTldMap() {
 		if (_uriMap == null) {
 			_uriMap = new HashMap();
@@ -424,7 +452,7 @@
 		// a.) if path has a device, and if it begins with IPath.SEPARATOR,
 		// remove it
 		final String device = path.getDevice();
-		if ((device != null) && (device.length() > 0)) {
+		if (device != null && device.length() > 0) {
 			if (device.charAt(0) == IPath.SEPARATOR) {
 				final String newDevice = device.substring(1);
 				newPath = path.setDevice(newDevice);
@@ -432,12 +460,17 @@
 		}
 		// b.) if it has a hostname, it is UNC name... Any java or eclipse api
 		// helps it ??
-		if (path != null && host != null && host.length() != 0) {
+		if (newPath != null && host != null && host.length() != 0) {
 			IPath uncPath = new Path(host);
 			uncPath = uncPath.append(path);
 			newPath = uncPath.makeUNC(true);
 		}
-		return newPath.toString();
+		
+		if (newPath != null)
+		{
+		    return newPath.toString();
+		}
+		return path.toString();
 	}
 
 	/**
@@ -470,7 +503,7 @@
 		return _project;
 	}
 
-	protected String getRootLocationString() {
+	private String getRootLocationString() {
 		return null;
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/SelectManyHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/SelectManyHelper.java
index 5fead43..a7f3ff6 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/SelectManyHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/SelectManyHelper.java
@@ -12,8 +12,10 @@
 package org.eclipse.jst.pagedesigner.utils;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.eclipse.jst.jsf.core.internal.tld.CMUtil;
 import org.eclipse.jst.jsf.core.internal.tld.IJSFConstants;
@@ -31,37 +33,29 @@
  * @author mengbo
  */
 public class SelectManyHelper {
-//	private static final String OPTION_VISUAL_PREFIX = "option: "; //$NON-NLS-1$
-//
-//	private static final String OPTION_VISUAL_PREFIX_BINDING = "option(binding): "; //$NON-NLS-1$
-//
-//	private static final String OPTION_VISUAL_PREFIX_VALUE = "option(value): "; //$NON-NLS-1$
 
-	private static final String NO_VALUE = "<no value>"; //$NON-NLS-1$
+	private final static Set<String> JSF_SELECT_TAGS, HTML_SELECT_TAGS;
 
-	public static HashSet JSF_SELECT_TAGS, HTML_SELECT_TAGS;
-
-	public static HashSet HTML_SELECT_TAG_OPTIONS, JSF_SELECT_TAG_OPTIONS;
 
 	static {
-		HTML_SELECT_TAGS = new HashSet(10);
-		HTML_SELECT_TAGS.add(IHTMLConstants.TAG_SELECT);
-		HTML_SELECT_TAGS.add(IHTMLConstants.TAG_OPTGROUP);
-		HTML_SELECT_TAG_OPTIONS = new HashSet(10);
-		HTML_SELECT_TAG_OPTIONS.add(IHTMLConstants.TAG_OPTGROUP);
-		HTML_SELECT_TAG_OPTIONS.add(IHTMLConstants.TAG_OPTION);
-
-		JSF_SELECT_TAG_OPTIONS = new HashSet(10);
-		JSF_SELECT_TAG_OPTIONS.add(IJSFConstants.TAG_SELECTITEM);
-		JSF_SELECT_TAG_OPTIONS.add(IJSFConstants.TAG_SELECTITEMS);
-		JSF_SELECT_TAGS = new HashSet(10);
-		JSF_SELECT_TAGS.add(IJSFConstants.TAG_SELECTONELISTBOX);
-		JSF_SELECT_TAGS.add(IJSFConstants.TAG_SELECTONEMENU);
-		JSF_SELECT_TAGS.add(IJSFConstants.TAG_SELECTMANYLISTBOX);//
-		JSF_SELECT_TAGS.add(IJSFConstants.TAG_SELECTMANYMENU);//
-		JSF_SELECT_TAGS.add(IJSFConstants.TAG_SELECTMANYCHECKBOX);
+		Set<String> tempSet = new HashSet<String>(4);
+		tempSet.add(IHTMLConstants.TAG_SELECT);
+		tempSet.add(IHTMLConstants.TAG_OPTGROUP);
+		HTML_SELECT_TAGS = Collections.unmodifiableSet(tempSet);
+		
+		tempSet = new HashSet(8);
+		tempSet.add(IJSFConstants.TAG_SELECTONELISTBOX);
+		tempSet.add(IJSFConstants.TAG_SELECTONEMENU);
+		tempSet.add(IJSFConstants.TAG_SELECTMANYLISTBOX);//
+		tempSet.add(IJSFConstants.TAG_SELECTMANYMENU);//
+		tempSet.add(IJSFConstants.TAG_SELECTMANYCHECKBOX);
+		JSF_SELECT_TAGS = Collections.unmodifiableSet(tempSet);
 	}
 
+	/**
+	 * @param node
+	 * @return the select option children of node
+	 */
 	public static Object[] getSelectOptions(Element node) {
 		if (node == null) {
 			return null;
@@ -115,6 +109,10 @@
 		return null;
 	}
 
+	/**
+	 * @param node
+	 * @return the selection option children of node as strings
+	 */
 	public static String[] getSelectOptionsString(Element node) {
 		if (node == null) {
 			return null;
@@ -144,6 +142,10 @@
 		return (String[]) result.toArray(new String[] {});
 	}
 
+	/**
+	 * @param node
+	 * @return true if node has select option children
+	 */
 	public static boolean hasSelectOptions(Element node) {
 		if (node == null) {
 			return false;
@@ -177,6 +179,10 @@
 		return false;
 	}
 
+	/**
+	 * @param node
+	 * @return true if node is a core or HTML select tag
+	 */
 	public static boolean supportSections(Element node) {
 		String uri = CMUtil.getElementNamespaceURI(node);
 		if (ITLDConstants.URI_JSF_HTML.equals(uri)) {
@@ -187,24 +193,4 @@
 		}
 		return false;
 	}
-
-	public static String getJsfSelectionVisualLabel(Element element) {
-		/*
-		 * if (ele.getAttribute(ICSSPropertyID.ATTR_ITEMLABEL) != null) { return
-		 * OPTION_VISUAL_PREFIX +
-		 * ele.getAttribute(ICSSPropertyID.ATTR_ITEMLABEL); //$NON-NLS-1$ } else
-		 * if (ele.getAttribute(ICSSPropertyID.ATTR_BINDING) != null) { return
-		 * OPTION_VISUAL_PREFIX_BINDING +
-		 * ele.getAttribute(ICSSPropertyID.ATTR_BINDING); //$NON-NLS-1$ } else
-		 * if (ele.getAttribute(ICSSPropertyID.ATTR_ITEMVALUE) != null) { return
-		 * OPTION_VISUAL_PREFIX_VALUE +
-		 * ele.getAttribute(ICSSPropertyID.ATTR_ITEMVALUE); //$NON-NLS-1$ }
-		 * 
-		 * return NO_VALUE; //$NON-NLS-1$
-		 */
-		if (element != null) {
-			return element.getNodeName();
-		}
-        return NO_VALUE;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/SelectionHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/SelectionHelper.java
index ae67831..ee93b58 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/SelectionHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/SelectionHelper.java
@@ -55,7 +55,7 @@
 	 * 
 	 * @param model
 	 * @param textSel
-	 * @return
+	 * @return the node for the text selectin in model or null
 	 */
 	public static Node toNode(IStructuredModel model, ITextSelection textSel) {
 		// FIXME: currently always normalize to a single node. should also
@@ -73,7 +73,7 @@
 	 * node.
 	 * 
 	 * @param selection
-	 * @return
+	 * @return the node for the selection or null
 	 */
 	public static Node toNode(IStructuredSelection selection) {
 		if (selection.isEmpty()) {
@@ -93,7 +93,7 @@
 	 * convert a DesignRange into a single node.
 	 * 
 	 * @param range
-	 * @return
+	 * @return the node for the design range or null
 	 */
 	public static Node toNode(DesignRange range) {
 		if (range.isValid()) {
@@ -110,7 +110,7 @@
 	 *            if null, then will calculate it using offset.
 	 * @param offset
 	 *            offset in source.
-	 * @return
+	 * @return a dom position for the region and offset
 	 */
 	public static IDOMPosition toDOMPosition(IDOMModel model,
 			IndexedRegion region, int offset) {
@@ -207,6 +207,7 @@
 	 * @param graphicViewer
 	 * @param offset
 	 * @param length
+	 * @return a selection
 	 */
 	public static ISelection convertToDesignerSelection(
 			IHTMLGraphicalViewer graphicViewer, int offset, int length) {
@@ -315,7 +316,7 @@
 	 * structured selection of Node
 	 * 
 	 * @param sel
-	 * @return
+	 * @return a structured selectino
 	 */
 	public static IStructuredSelection convertFromDesignSelection(
 			IStructuredSelection sel) {
@@ -333,10 +334,10 @@
 
 	/**
 	 * 
-	 * @param selection
+	 * @param range
 	 *            selection from designer, could be IStructuredSelection of
 	 *            NodeEditPart, or DesignRange.
-	 * @return
+	 * @return a text selection
 	 */
 	public static ITextSelection convertFromDesignSelection(DesignRange range) {
 		if (range.isValid()) {
@@ -360,6 +361,11 @@
         return new TextSelection(0, 0);
 	}
 
+	/**
+	 * @param selection
+	 * @return a text selection for the selection or TextSelection(0,0)
+	 * if nothing can be determined
+	 */
 	public static ITextSelection convertFromDesignSelectionToTextSelection(
 			ISelection selection) {
 		if (selection instanceof IStructuredSelection) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/WebAppUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/WebAppUtil.java
index 35dd36f..d3971e2 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/WebAppUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/WebAppUtil.java
@@ -26,6 +26,11 @@
 public class WebAppUtil {
 	private final static String FACES_SERVLET_NAME = "javax.faces.webapp.FacesServlet";
 
+	/**
+	 * @param url
+	 * @param openedFile
+	 * @return the transformed url
+	 */
 	public static String transformJSPURL(String url, IFile openedFile) {
 		boolean canSupportJSF = JSPUtil.supportTaglib(
 				ITLDConstants.URI_JSF_HTML, openedFile);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/XMLUtil.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/XMLUtil.java
index 7a98425..7638cd4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/XMLUtil.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/utils/XMLUtil.java
@@ -35,13 +35,18 @@
 import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.w3c.dom.Document;
 
+/**
+ * 
+ *
+ */
 public class XMLUtil {
 	private static Logger _log = PDPlugin.getLogger(XMLUtil.class);
 
 	/**
 	 * Returns a DocumentBuilder capable of creating a DOM Document from input.
 	 * 
-	 * @return
+	 * @return a new instance of a document builder or null if an exception
+	 * occurs on creation
 	 */
 	public synchronized static DocumentBuilder getDocumentBuilder() {
 		DocumentBuilder result = null;
@@ -54,21 +59,6 @@
 		return result;
 	}
 
-	public synchronized static DocumentBuilder getDocumentBuilder(
-			boolean validating) {
-		DocumentBuilder result = null;
-		try {
-			DocumentBuilderFactory instance = DocumentBuilderFactory
-					.newInstance();
-			instance.setValidating(validating);
-			result = instance.newDocumentBuilder();
-		} catch (ParserConfigurationException e) {
-			// "Error in create documentBuilder"
-			_log.info("XMLUtil.Error.0", e); //$NON-NLS-1$
-		}
-		return result;
-	}
-
 	/**
 	 * Transforms a DOM document into a lightly-formatted UTF-8 represntation
 	 * and outputs it to an outputstream
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/ActionData.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/ActionData.java
index 5a6e93c..e0c1afa 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/ActionData.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/ActionData.java
@@ -19,26 +19,48 @@
  * @author mengbo
  */
 public class ActionData {
+	/**
+	 * Action type for palette drag and drop
+	 */
 	public static final int PALETTE_DND = 1;
 
+	/**
+	 * Action type for databinding drag and drop
+	 */
 	public static final int DATABINDING_DND = 2;
 
+	/**
+	 * Action type for other drag and  drop
+	 */
 	public static final int OTHER_DND = 3;
 
+	/**
+	 * Action type for key board navigation
+	 */
 	public static final int KEYBOARD_NAVAGATION = 4;
 
+	/**
+	 * Action type for inline editing
+	 */
 	public static final int INLINE_EDIT = 5;
 
+	/**
+	 * Action type for component move
+	 */
 	public static final int COMPONENT_MOVE = 6;
 
+	/**
+	 * Unknown action type (?)
+	 */
 	public static final int UNKNOWN = 0;
 
-	private int _actionType;
+	private final int _actionType;
 
-	private Object _data;
+	private final Object _data;
 
 	/**
-	 * 
+	 * @param action 
+	 * @param data 
 	 */
 	public ActionData(int action, Object data) {
 		_actionType = action;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/BasicMovementRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/BasicMovementRule.java
index ac8d97d..f1306ce 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/BasicMovementRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/BasicMovementRule.java
@@ -17,7 +17,7 @@
 /**
  * @author mengbo
  */
-public class BasicMovementRule extends DefaultMovementRule {
+/*package*/ class BasicMovementRule extends DefaultMovementRule {
 
 	/**
 	 * @param actionData
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/BasicPositionRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/BasicPositionRule.java
index c2e2eee..3eaa5f0 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/BasicPositionRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/BasicPositionRule.java
@@ -20,13 +20,17 @@
  * 
  * @author mengbo
  */
-public class BasicPositionRule extends DefaultPositionRule {
+/*package*/ class BasicPositionRule extends DefaultPositionRule 
+{
+    private final IPositionMediator _mediator;
 
 	/**
 	 * @param mediator
+	 * @param actionData 
 	 */
 	public BasicPositionRule(IPositionMediator mediator, ActionData actionData) {
-		super(mediator, actionData);
+	    super(actionData);
+        _mediator = mediator;
 	}
 
 	/*
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/ContainerMoveInAndOutRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/ContainerMoveInAndOutRule.java
index 342d5ea..c953334 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/ContainerMoveInAndOutRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/ContainerMoveInAndOutRule.java
@@ -21,12 +21,12 @@
 /**
  * @author mengbo
  */
-public class ContainerMoveInAndOutRule extends DefaultMovementRule {
-	public final String[] HTML_CONTAINERS = { IHTMLConstants.TAG_TABLE };
+/*package*/ class ContainerMoveInAndOutRule extends DefaultMovementRule {
+	private static final String[] HTML_CONTAINERS = { IHTMLConstants.TAG_TABLE };
 
-	public final String[] NONE_HTML_CONTAINERS = {};
+	private static final String[] NONE_HTML_CONTAINERS = {};
 
-	public final String[] SPECIAL_HTML_CONTAINERS = {
+	private static final String[] SPECIAL_HTML_CONTAINERS = {
 			IJSFConstants.TAG_OUTPUTLINK, IJSFConstants.TAG_COMMANDLINK,
 			IJSFConstants.TAG_FACET, IJSFConstants.TAG_VERBATIM };
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultMovementRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultMovementRule.java
index d7bd149..1aaab7c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultMovementRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultMovementRule.java
@@ -14,10 +14,11 @@
 /**
  * @author mengbo
  */
-public class DefaultMovementRule implements IMovementRule {
+/*package*/ class DefaultMovementRule implements IMovementRule {
 	ActionData _actionData;
 
 	/**
+	 * @param actionData 
 	 * 
 	 */
 	public DefaultMovementRule(ActionData actionData) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultPositionRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultPositionRule.java
index bc8199d..40e8222 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultPositionRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultPositionRule.java
@@ -21,16 +21,14 @@
  */
 public class DefaultPositionRule implements IPositionRule {
 
-	protected IPositionMediator _mediator;
-
 	private ActionData _actionData;
 
 	/**
+	 * @param actionData 
 	 * 
 	 */
-	public DefaultPositionRule(IPositionMediator mediator, ActionData actionData) {
+	public DefaultPositionRule(ActionData actionData) {
 		super();
-		_mediator = mediator;
 		if (actionData != null) {
 			_actionData = actionData;
 		} else {
@@ -38,6 +36,9 @@
 		}
 	}
 
+    /**
+     * @return the action data
+     */
     protected final ActionData getActionData()
     {
         return _actionData;
@@ -74,8 +75,6 @@
 	/**
 	 * If container is inEditable and can be referenced, the position is
 	 * invalid, otherwise as default the position is valid. (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jst.pagedesigner.caret.IPositionRule#isValidPosition(org.eclipse.jst.pagedesigner.dom.IDOMPosition)
 	 */
 	public boolean isValidPosition(IDOMPosition position) {
 		boolean result = isEditable(new Target(position.getContainerNode()));
@@ -100,8 +99,7 @@
     
     /**
      * @param host
-     * @param tagName
-     * @return
+     * @return true if the host edit part is a widget
      */
      public static boolean isWidget(EditPart host) {
         if (host instanceof NodeEditPart) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultPositionValidator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultPositionValidator.java
index 141310d..6c45a83 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultPositionValidator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DefaultPositionValidator.java
@@ -28,9 +28,12 @@
 /**
  * @author mengbo
  */
-public class DefaultPositionValidator implements IPositionMediator {
-	private List _rules = new ArrayList();
+/*package*/ class DefaultPositionValidator implements IPositionMediator {
+	private List<IValidationRule> _rules = new ArrayList<IValidationRule>();
 
+	/**
+	 * the validator's action data
+	 */
 	protected final ActionData _actionData;
 
 	/**
@@ -41,20 +44,23 @@
 	}
 
 	/**
-	 * 
+	 * @param actionData 
 	 */
 	protected DefaultPositionValidator(ActionData actionData) {
 		_actionData = actionData;
 		initRules();
 	}
 
+	/**
+	 * initialize the default rules
+	 */
 	protected void initRules() {
 		_rules.clear();
 		addRule(new BasicPositionRule(this, _actionData));
-        addRule(new IETablePositionRule(this, _actionData));
-        addRule(new RootContainerPositionRule(this, _actionData));
-        addRule(new JSFRootContainerPositionRule(this, _actionData));
-        addRule(new WhitespacePositionMoveRule(this, _actionData));
+        addRule(new IETablePositionRule(_actionData));
+        addRule(new RootContainerPositionRule(_actionData));
+        addRule(new JSFRootContainerPositionRule(_actionData));
+        addRule(new WhitespacePositionMoveRule(_actionData));
 	}
 
 	/**
@@ -64,6 +70,9 @@
 		return Collections.unmodifiableList(_rules);
 	}
 
+	/**
+	 * @param rule
+	 */
 	protected void addRule(IValidationRule rule) {
 		_rules.add(rule);
 	}
@@ -180,8 +189,6 @@
 
 	/**
 	 * Adjust the position to an editable area.
-	 * 
-	 * @see org.eclipse.jst.pagedesigner.caret.IValidator#getEditableContainer(org.eclipse.gef.EditPart)
 	 */
 	public EditPart getEditableContainer(Target target) {
 		EditPart part = target.getPart();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DropActionData.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DropActionData.java
index 74fc4ae..0d3f211 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DropActionData.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/DropActionData.java
@@ -13,22 +13,41 @@
 import java.util.Collections;
 import java.util.List;
 
+/**
+ * An action data for object drops
+ * @author cbateman
+ *
+ */
 public class DropActionData extends ActionData
 {
+    /**
+     * @param action
+     * @param data
+     */
     public DropActionData(int action, DropData data ) 
     {
         super(action, data);
     }
 
+    /**
+     * @return the drop data or  null if none
+     */
     public DropData getDropData()
     {
         return (DropData) getData();
     }
     
+    /**
+     * Encapsulates the tags to be dropped
+     *
+     */
     public static class DropData
     {
         private final List    _tagIds;
         
+        /**
+         * @param tagIds
+         */
         public DropData(List tagIds)
         {
             _tagIds = Collections.unmodifiableList(tagIds);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/HeadDataPositionRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/HeadDataPositionRule.java
index 4bacd8f..ed2fcae 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/HeadDataPositionRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/HeadDataPositionRule.java
@@ -16,12 +16,12 @@
  * 
  * @author mengbo
  */
-public class HeadDataPositionRule extends DefaultPositionRule {
+/*package*/ class HeadDataPositionRule extends DefaultPositionRule {
 
 	/**
 	 * @param data
 	 */
-	public HeadDataPositionRule(IPositionMediator mediator, ActionData data) {
-		super(mediator, data);
+	public HeadDataPositionRule(ActionData data) {
+		super(data);
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IEPanelgridPositionRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IEPanelgridPositionRule.java
index fef2410..df41805 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IEPanelgridPositionRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IEPanelgridPositionRule.java
@@ -21,16 +21,18 @@
  * 
  * @author mengbo
  */
-public class IEPanelgridPositionRule extends DefaultPositionRule {
-	public IEPanelgridPositionRule(IPositionMediator mediator,
-			ActionData actionData) {
-		super(mediator, actionData);
+/*package*/ class IEPanelgridPositionRule extends DefaultPositionRule {
+	/**
+	 * @param actionData
+	 */
+	public IEPanelgridPositionRule(ActionData actionData) {
+		super(actionData);
 	}
 
 	/**
 	 * PanelGrid is not editable.
 	 * 
-	 * @see org.eclipse.jst.pagedesigner.caret.IPositionRule#isEditable(org.eclipse.gef.EditPart)
+	 * @see org.eclipse.jst.pagedesigner.validation.caret.IPositionRule#isEditable(Target)
 	 */
 	public boolean isEditable(Target target) {
 		Node node = target.getNode();
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IETablePositionRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IETablePositionRule.java
index 9bcda2e..f93405c 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IETablePositionRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IETablePositionRule.java
@@ -33,10 +33,10 @@
 			IHTMLConstants.TAG_TBODY, IHTMLConstants.TAG_TFOOT };
 
 	/**
-	 * @param mediator
+	 * @param actionData 
 	 */
-	public IETablePositionRule(IPositionMediator mediator, ActionData actionData) {
-		super(mediator, actionData);
+	public IETablePositionRule(ActionData actionData) {
+		super(actionData);
 	}
 
 	/*
@@ -78,9 +78,10 @@
 		return super.hasEditableArea(target);
 	}
 
-	/*
+	/**
 	 * Used to valid the structure of table, later will use dtd to do that.
-	 * @param node @return
+	 * @param container 
+	 * @return true if the table is valid
 	 */
 	public boolean isInValidTable(Node container) {
 		boolean result = false;
@@ -183,20 +184,4 @@
 		}
 		return false;
 	}
-
-    // TODO: dead?
-//	private boolean isValidTrTd(List ancestors) {
-//		String name;
-//		int offset = ancestors.size();
-//		if (offset >= 2) {
-//			return IHTMLConstants.TAG_TR.equalsIgnoreCase(((Node) ancestors
-//					.get(offset - 1)).getLocalName())
-//					&& //
-//					(IHTMLConstants.TAG_TH.equalsIgnoreCase(((Node) ancestors
-//							.get(offset - 2)).getLocalName()) || //
-//					IHTMLConstants.TAG_TD.equalsIgnoreCase(((Node) ancestors
-//							.get(offset - 2)).getLocalName()));
-//		}
-//		return false;
-//	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IMovementMediator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IMovementMediator.java
index a1ff20d..8c1fccd 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IMovementMediator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IMovementMediator.java
@@ -17,8 +17,16 @@
  * @author mengbo
  */
 public interface IMovementMediator extends IPositionMediator {
+	/**
+	 * @param target
+	 * @return true if mediator allows movment in
+	 */
 	public boolean allowsMoveIn(Target target);
 
+	/**
+	 * @param target
+	 * @return true if mediator allows movement out
+	 */
 	public boolean allowsMoveOut(Target target);
 
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IMovementRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IMovementRule.java
index b1017d6..90377a8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IMovementRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IMovementRule.java
@@ -15,7 +15,15 @@
  * @author mengbo
  */
 public interface IMovementRule extends IValidationRule {
+	/**
+	 * @param target
+	 * @return true if allows move in
+	 */
 	public boolean allowsMoveIn(Target target);
 
+	/**
+	 * @param target
+	 * @return true allows move out
+	 */
 	public boolean allowsMoveOut(Target target);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IPositionMediator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IPositionMediator.java
index 847fcda..235a164 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IPositionMediator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IPositionMediator.java
@@ -27,8 +27,8 @@
 	/**
 	 * To see if the node itself or its descendent is editable.
 	 * 
-	 * @param node
-	 * @return
+	 * @param target
+	 * @return true if the target has editable area
 	 */
 	public boolean hasEditableArea(Target target);
 
@@ -36,20 +36,29 @@
 	 * To see if the position is valid.
 	 * 
 	 * @param position
-	 * @return
+	 * @return true if position is  valid
 	 */
 	public boolean isValidPosition(IDOMPosition position);
 
+	/**
+	 * @param position
+	 * @return true if position is valid
+	 */
 	public boolean isValidPosition(DesignPosition position);
 
 	/**
 	 * To see if the node is editable.
 	 * 
-	 * @param node
-	 * @return
+	 * @param target
+	 * @return true if target is editable
 	 */
 	public boolean isEditable(Target target);
 
+	/**
+	 * @param target
+	 * @param atRight
+	 * @return true if can reference target
+	 */
 	public boolean canReference(Target target, boolean atRight);
 
 	/**
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IPositionRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IPositionRule.java
index 86cfb21..6088e1e 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IPositionRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/IPositionRule.java
@@ -22,17 +22,16 @@
 	 * can we input something into the target. For DnD, this means whether can
 	 * we drag and drop something into it.
 	 * 
-	 * @param node
-	 * @return
+	 * @param target
+	 * @return true if target is editable
 	 */
 	public boolean isEditable(Target target);
 
 	/**
 	 * To see if the node itself or its descendent is editable.
 	 * 
-	 * @see isEditable for other details.
-	 * @param node
-	 * @return
+	 * @param target
+	 * @return true if target is editable
 	 */
 	public boolean hasEditableArea(Target target);
 
@@ -44,7 +43,7 @@
 	 * @param target
 	 * @param atRight
 	 *            TODO
-	 * @return
+	 * @return true if can reference target
 	 */
 	public boolean canReference(Target target, boolean atRight);
 
@@ -55,7 +54,7 @@
 	 * and isEditable.
 	 * 
 	 * @param position
-	 * @return
+	 * @return true if position is valid
 	 */
 	public boolean isValidPosition(IDOMPosition position);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/InlineEditingNavigationMediator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/InlineEditingNavigationMediator.java
index 696dc30..c1c1115 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/InlineEditingNavigationMediator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/InlineEditingNavigationMediator.java
@@ -24,7 +24,7 @@
 import org.eclipse.jst.pagedesigner.parts.DocumentEditPart;
 import org.eclipse.jst.pagedesigner.tools.ExposeHelper;
 import org.eclipse.jst.pagedesigner.viewer.DesignPosition;
-import org.eclipse.jst.pagedesigner.viewer.HTMLGraphicalViewer;
+import org.eclipse.jst.pagedesigner.viewer.IHTMLGraphicalViewer;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
@@ -95,7 +95,8 @@
 	}
 
 	/**
-	 * @see org.eclipse.jst.pagedesigner.validation.caret.IMovementMediator#getConstainedEditableContainer(org.eclipse.jst.pagedesigner.caret.Target)
+	 * @param target 
+	 * @return ? 
 	 */
 	public EditPart getRootConstainedEditableContainer(Target target) {
 		// if (EditModelQuery.isDocument(target.getNode()))
@@ -122,7 +123,7 @@
 	}
 
 	/**
-	 * @see org.eclipse.jst.pagedesigner.validation.caret.IMovementMediator#getConstainedEditableContainer(org.eclipse.jst.pagedesigner.caret.Target)
+	 * @see org.eclipse.jst.pagedesigner.validation.caret.IMovementMediator#getConstainedEditableContainer(org.eclipse.jst.pagedesigner.validation.caret.Target)
 	 */
 	public EditPart getConstainedEditableContainer(Target target) {
 		EditPart part = target.getPart();
@@ -144,16 +145,20 @@
 	}
 
 	/**
-	 * @see org.eclipse.jst.pagedesigner.validation.caret.IMovementMediator#getConstainedEditableContainer(org.eclipse.jst.pagedesigner.caret.Target)
+	 * @param position 
+	 * @param p 
+	 * @param viewer 
+	 * @return the constrained editable container or null if none found for the arguments
+	 * @see org.eclipse.jst.pagedesigner.validation.caret.IMovementMediator#getConstainedEditableContainer(org.eclipse.jst.pagedesigner.validation.caret.Target)
 	 */
 	public EditPart getConstainedEditableContainer(DesignPosition position,
 			Point p, GraphicalViewer viewer) {
 		Rectangle rect = new Rectangle(p.x, p.y, 1, 1);
-		Viewport port = ((HTMLGraphicalViewer) viewer).getViewport();
+		Viewport port = ((IHTMLGraphicalViewer) viewer).getViewport();
 
 		Point viewLocation = port.getViewLocation();
 		Point lastLocation = viewLocation.getCopy();
-		new ExposeHelper((HTMLGraphicalViewer) viewer).exposeArea(rect);
+		new ExposeHelper((IHTMLGraphicalViewer) viewer).exposeArea(rect);
 		viewLocation = port.getViewLocation();
 		Dimension offset = lastLocation.getDifference(viewLocation);
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/InlineEditingPositionMediator.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/InlineEditingPositionMediator.java
index 40b5e99..5329586 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/InlineEditingPositionMediator.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/InlineEditingPositionMediator.java
@@ -32,6 +32,6 @@
 	 */
 	protected void initRules() {
 		super.initRules();
-		addRule(new IEPanelgridPositionRule(this, _actionData));
+		addRule(new IEPanelgridPositionRule(_actionData));
 	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/JSFRootContainerPositionRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/JSFRootContainerPositionRule.java
index 562d6b7..c4e08ea 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/JSFRootContainerPositionRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/JSFRootContainerPositionRule.java
@@ -25,15 +25,20 @@
  * @author mengbo
  */
 public class JSFRootContainerPositionRule extends DefaultPositionRule {
-	public static final String[] JSF_ROOT_CONTAINERS = { "view", "subview" };
+    
+    private final static int  DEFAULT_MAX_DEPTH_SEARCH = 3;
+    
+	/**
+	 * TODO: this is not enough because it ignores the uri and keys on only
+	 * the name of the tag.
+	 */
+	/*package*/ static final String[] JSF_ROOT_CONTAINERS = { "view", "subview" };
 
 	/**
-	 * @param mediator
 	 * @param actionData
 	 */
-	public JSFRootContainerPositionRule(IPositionMediator mediator,
-			ActionData actionData) {
-		super(mediator, actionData);
+	public JSFRootContainerPositionRule(ActionData actionData) {
+		super(actionData);
 	}
 
 	/*
@@ -43,7 +48,7 @@
 	 */
 	public boolean hasEditableArea(Target target) {
 		Node node = target.getNode();
-		if (hasBasicContainers(EditModelQuery.getDocumentNode(node))) {
+		if (hasBasicContainers(EditModelQuery.getDocumentNode(node),DEFAULT_MAX_DEPTH_SEARCH)) {
             ActionData actionData = getActionData();
 			if (actionData instanceof DropActionData) {
                 DropActionData dropActionData = (DropActionData) actionData;
@@ -77,7 +82,7 @@
 	public boolean isEditable(Target target) {
 		boolean result = true;
 		Node node = target.getNode();
-		if (hasBasicContainers(EditModelQuery.getDocumentNode(node))) {
+		if (hasBasicContainers(EditModelQuery.getDocumentNode(node), DEFAULT_MAX_DEPTH_SEARCH)) {
             ActionData actionData = getActionData();
             if (actionData instanceof DropActionData) {
                 DropActionData dropActionData = (DropActionData) actionData;
@@ -99,12 +104,15 @@
 		return super.isEditable(target);
 	}
 
-	public static boolean isWithinkBasicContainer(Node node) {
-		return EditModelQuery.isChild(JSF_ROOT_CONTAINERS, node, false, false);
-	}
 
-	public static Node getBasicContainer(Document document) {
-		Node node = EditModelQuery.getChild(document, JSF_ROOT_CONTAINERS, 3,
+	/**
+	 * @param document
+	 * @param maxDepth 
+	 * @return the closest tag called "view" or "subview" to the root of document
+	 * search to a maximum tag depth of maxDepth
+	 */
+	public static Node getBasicContainer(Document document, int maxDepth) {
+		Node node = EditModelQuery.getChild(document, JSF_ROOT_CONTAINERS, maxDepth,
 				false);
 		return node;
 	}
@@ -114,10 +122,12 @@
 	 * second level.
 	 * 
 	 * @param document
-	 * @return
+	 * @param maxDepth 
+	 * @return true if document has a view and subview limited to a maximum search
+	 * depth of maxDepth
 	 */
-	public static boolean hasBasicContainers(Document document) {
-		return getBasicContainer(document) != null;
+	public static boolean hasBasicContainers(Document document, int maxDepth) {
+		return getBasicContainer(document, maxDepth) != null;
 	}
 
 	/*
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/NodeConstructionPositionRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/NodeConstructionPositionRule.java
index 0045421..54b389f 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/NodeConstructionPositionRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/NodeConstructionPositionRule.java
@@ -17,11 +17,10 @@
 public class NodeConstructionPositionRule extends DefaultPositionRule {
 
 	/**
-	 * 
+	 * @param actionData 
 	 */
-	public NodeConstructionPositionRule(IPositionMediator mediator,
-			ActionData actionData) {
-		super(mediator, actionData);
+	public NodeConstructionPositionRule(ActionData actionData) {
+		super(actionData);
 	}
 
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/RootContainerPositionRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/RootContainerPositionRule.java
index 7d7134d..9d41be7 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/RootContainerPositionRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/RootContainerPositionRule.java
@@ -24,14 +24,13 @@
  * @author mengbo
  */
 public class RootContainerPositionRule extends DefaultPositionRule {
-	public static final String[] HTML_ROOT_CONTAINERS = { "body" };
+	static final String[] HTML_ROOT_CONTAINERS = { "body" };
 
 	/**
-	 * @param mediator
+	 * @param actionData
 	 */
-	public RootContainerPositionRule(IPositionMediator mediator,
-			ActionData actionData) {
-		super(mediator, actionData);
+	public RootContainerPositionRule(ActionData actionData) {
+		super(actionData);
 	}
 
 	/**
@@ -39,7 +38,7 @@
 	 * container. 2. If none of the containers exists, then target will be not
 	 * restricted.
 	 * 
-	 * @see org.eclipse.jst.pagedesigner.validation.caret.IPositionRule#hasEditableArea(org.eclipse.gef.EditPart)
+	 * @see org.eclipse.jst.pagedesigner.validation.caret.IPositionRule#hasEditableArea(org.eclipse.jst.pagedesigner.validation.caret.Target)
 	 */
 	public boolean hasEditableArea(Target target) {
 		EditPart part = target.getPart();
@@ -72,17 +71,21 @@
 	 * second level.
 	 * 
 	 * @param document
-	 * @return
+	 * @return true if the document has basic containers
 	 */
 	public static boolean hasBasicContainers(Document document) {
 		return getBasicContainer(document) != null;
 
 	}
 
-	public static boolean isWithinkBasicContainer(Node node) {
+	private static boolean isWithinkBasicContainer(Node node) {
 		return EditModelQuery.isChild(HTML_ROOT_CONTAINERS, node, true, false);
 	}
 
+	/**
+	 * @param document
+	 * @return the basic root container for the document or null
+	 */
 	public static Node getBasicContainer(Document document) {
 		Node node = EditModelQuery.getChild(document, HTML_ROOT_CONTAINERS, 2,
 				false);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/Target.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/Target.java
index 2121d7d..d680ec9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/Target.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/Target.java
@@ -28,6 +28,9 @@
 
 	private Node _node;
 
+	/**
+	 * @param part
+	 */
 	public Target(EditPart part) {
 		_part = part;
         
@@ -45,6 +48,9 @@
         }
 	}
 
+	/**
+	 * @param node
+	 */
 	public Target(Node node) {
 		_node = node;
 		Assert.isTrue(node instanceof INodeNotifier);
@@ -82,6 +88,10 @@
         return null;
     }
     
+	/**
+	 * @param node
+	 * @return the edit part for node or null if none found
+	 */
 	public static EditPart resolvePart(Node node) {
 		if (node instanceof INodeNotifier
 				&& ((INodeNotifier) node).getAdapterFor(EditPart.class) != null) {
@@ -91,6 +101,10 @@
 		return null;
 	}
 
+	/**
+	 * @param part
+	 * @return the node for part
+	 */
 	public static Node resolveNode(EditPart part) {
 		return (Node) part.getModel();
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/WhitespacePositionMoveRule.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/WhitespacePositionMoveRule.java
index ec70d48..79e87c5 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/WhitespacePositionMoveRule.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/validation/caret/WhitespacePositionMoveRule.java
@@ -28,11 +28,10 @@
 		IMovementRule {
 
 	/**
-	 * @param mediator
+	 * @param actionData
 	 */
-	public WhitespacePositionMoveRule(IPositionMediator mediator,
-			ActionData actionData) {
-		super(mediator, actionData);
+	public WhitespacePositionMoveRule(ActionData actionData) {
+		super(actionData);
 	}
 
 	/*
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/AbstractDropLocationStrategy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/AbstractDropLocationStrategy.java
index 62b283b..6dbeb64 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/AbstractDropLocationStrategy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/AbstractDropLocationStrategy.java
@@ -33,6 +33,9 @@
 {
     private final EditPartViewer        _viewer;
     
+    /**
+     * @param viewer
+     */
     public AbstractDropLocationStrategy(EditPartViewer viewer)
     {
         _viewer = viewer;
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/CaretPositionResolver.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/CaretPositionResolver.java
index d3f5ea3..27aae69 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/CaretPositionResolver.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/CaretPositionResolver.java
@@ -34,6 +34,11 @@
 
 	private static CaretPositionResolver _instance;
 
+	/**
+	 * @param validator
+	 * @param point
+	 * @return the singleton instance
+	 */
 	public static CaretPositionResolver getInstance(
 			IPositionMediator validator, Point point) {
 		if (_instance == null) {
@@ -268,7 +273,7 @@
 	 * 
 	 * @param rect
 	 * @param point
-	 * @return
+	 * @return the X distance
 	 */
 	public static int getXDistance(Rectangle rect, Point point) {
 		if (rect.getRight().x <= point.x) {
@@ -287,7 +292,7 @@
 	 * 
 	 * @param rect
 	 * @param point
-	 * @return
+	 * @return the X distance
 	 */
 	public static int toXMiddle(Rectangle rect, Point point) {
 		return (point.x - (rect.x + rect.getRight().x) / 2);
@@ -299,12 +304,17 @@
 	 * 
 	 * @param rect
 	 * @param point
-	 * @return
+	 * @return the Y distance
 	 */
 	public static int toYMiddle(Rectangle rect, Point point) {
 		return (point.y - (rect.y + rect.getBottom().y) / 2);
 	}
 
+	/**
+	 * @param rect
+	 * @param point
+	 * @return the Y distance
+	 */
 	public static int getYDistance(Rectangle rect, Point point) {
 		if (rect.y + rect.height <= point.y) {
 			return point.y - (rect.y + rect.height);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/CaretUpdater.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/CaretUpdater.java
index 95f6742..dde0d69 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/CaretUpdater.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/CaretUpdater.java
@@ -37,7 +37,7 @@
  * 
  * @author mengbo
  */
-public class CaretUpdater implements IHTMLGraphicalViewerListener,
+/*package*/ class CaretUpdater implements IHTMLGraphicalViewerListener,
 		FigureListener {
 //	private static final Logger _log = PDPlugin.getLogger(CaretUpdater.class);
 
@@ -45,6 +45,9 @@
 
 	private boolean _viewerBatchChanging = false;
 
+	/**
+	 * the width value of the caret in pixels
+	 */
 	public static final int CARET_WIDTH = 2;
 
 	/**
@@ -53,15 +56,19 @@
 	 */
 	private IFigure _trackFigure;
 
-	//TODO: dead? private Polyline _rangeStartCaret;
-
+	/**
+	 * @param viewer
+	 */
 	public CaretUpdater(IHTMLGraphicalViewer viewer) {
 		_viewer = viewer;
 		setup();
 	}
 
+	/**
+	 * set up the
+	 */
 	public void setup() {
-		_viewer.addSelectionChangedListener(this);
+		_viewer.addHTMLViewerListener(this);
 	}
 
 	/**
@@ -98,14 +105,15 @@
 		}
 	}
 
+	/**
+	 * dispose the instance
+	 */
 	public void dispose() {
-		_viewer.removeSelectionChangedListener(this);
+		_viewer.removeHTMLViewerListener(this);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+	/**
+	 * Update the selection
 	 */
 	public void updateSelection() {
 		setCaretVisible(false);
@@ -130,12 +138,14 @@
 	private void updateRangeSelection() {
 		// FIXME: optimization needed here. Normally should not repaint the
 		// whole page.
-		// TODO: dead?? DesignRange range = _viewer.getRangeSelection();
 		((GraphicalEditPart) _viewer.getRootEditPart()).getFigure().repaint();
 		((GraphicalEditPart) _viewer.getRootEditPart()).getFigure()
 				.getUpdateManager().performUpdate();
 	}
 
+	/**
+	 * update the caret
+	 */
 	public void updateCaret() {
 		if (_trackFigure != null) {
 			_trackFigure.removeFigureListener(this);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DefaultDropLocationStrategy.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DefaultDropLocationStrategy.java
index 2e3bf6f..38f27cf 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DefaultDropLocationStrategy.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DefaultDropLocationStrategy.java
@@ -28,22 +28,38 @@
 import org.eclipse.jst.pagedesigner.parts.ElementEditPart;
 import org.eclipse.jst.pagedesigner.validation.caret.IPositionMediator;
 
+/**
+ * A default implementation of the drop location strategy
+ * @author cbateman
+ *
+ */
 public class DefaultDropLocationStrategy extends AbstractDropLocationStrategy 
 {
     // the amount of vertical offset below the mouse pointer to place
     // the upper left of the drop hint tooltip
     private static final int DROP_HINT_VERTICAL_OFFSET = 20;
 
+    /**
+     * @param viewer
+     */
     public DefaultDropLocationStrategy(EditPartViewer viewer) {
         super(viewer);
     }
 
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.pagedesigner.viewer.AbstractDropLocationStrategy#calculateDesignPosition(org.eclipse.gef.EditPart, org.eclipse.draw2d.geometry.Point, org.eclipse.jst.pagedesigner.validation.caret.IPositionMediator)
+     */
+    @Override
     public DesignPosition calculateDesignPosition(EditPart host, Point p,
             IPositionMediator validator) {
         return EditPartPositionHelper.findEditPartPosition(
                 host, p, validator);
     }
 
+    /* (non-Javadoc)
+     * @see org.eclipse.jst.pagedesigner.viewer.AbstractDropLocationStrategy#showTargetFeedback(org.eclipse.gef.EditPart, org.eclipse.jst.pagedesigner.viewer.DesignPosition, org.eclipse.gef.requests.DropRequest)
+     */
+    @Override
     public List showTargetFeedback(EditPart host, DesignPosition position, DropRequest request) 
     {
         List feedback = new ArrayList(4);
@@ -55,6 +71,10 @@
 
     
     
+    /**
+     * @param rect
+     * @return the default rectangle figure for the requested visual rectangle
+     */
     protected final RectangleFigure showFeedbackRect(Rectangle rect) {
         RectangleFigure pf = createFeedbackFigure();
         pf.translateToRelative(rect);
@@ -62,6 +82,11 @@
         return pf;
     }
     
+    /**
+     * @param position
+     * @return the bounding rectangle for the caret at the current
+     * position in absolute coords
+     */
     protected Rectangle createCaretBounds(DesignPosition position)
     {
         Rectangle rect = EditPartPositionHelper
@@ -73,6 +98,9 @@
         return rect;
     }
     
+    /**
+     * @return the newly created feedback figure
+     */
     protected RectangleFigure createFeedbackFigure() 
     {
         RectangleFigure feedbackFigure = new RectangleFigure();
@@ -90,6 +118,9 @@
      * Shows a label in a position relative to the drop marker
      * that hints where the new component will be dropped in
      * respect of components already there
+     * @param mousePosition 
+     * @param position 
+     * @return the drop hint label
      */
     protected final Label showDropHintLabel(Point mousePosition, DesignPosition position)
     {
@@ -128,6 +159,10 @@
         return dropHintLabel;
     }
     
+    /**
+     * @param position
+     * @return the drop hint text for the current position
+     */
     protected String getDropHintText(DesignPosition position)
     {
         StringBuffer buffer = new StringBuffer("Place");
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignPosition.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignPosition.java
index 3e10f32..237c656 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignPosition.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignPosition.java
@@ -21,6 +21,9 @@
  * @author mengbo
  */
 public class DesignPosition {
+	/**
+	 * a singleton that can be used as an invalid position
+	 */
 	public static final DesignPosition INVALID = new DesignPosition(null, -1);
 
 	private EditPart _containerPart;
@@ -41,12 +44,15 @@
 	/**
 	 * if _containerPart is null, means it is invalid
 	 * 
-	 * @return
+	 * @return the container edit part
 	 */
 	public EditPart getContainerPart() {
 		return _containerPart;
 	}
 
+	/**
+	 * @return the container node
+	 */
 	public Node getContainerNode() {
 		if (_containerPart != null) {
 			return (Node) _containerPart.getModel();
@@ -57,12 +63,15 @@
 	/**
 	 * if offset < 0, means it is invalid.
 	 * 
-	 * @return
+	 * @return the offset
 	 */
 	public int getOffset() {
 		return _offset;
 	}
 
+	/**
+	 * @return true if the design position is valid
+	 */
 	public boolean isValid() {
 		return (_containerPart != null) && (_offset >= 0);
 	}
@@ -71,7 +80,9 @@
 	 * This method should not be called when is text node.
 	 * 
 	 * @param forward
-	 * @return
+	 * @return the sibling part one to right in the tree if 
+	 * forward == true, one to the left if forward == false.  May
+	 * return null if position is invalid or there is no valid sibling.
 	 */
 	public EditPart getSiblingEditPart(boolean forward) {
 		if (!isValid()) {
@@ -92,7 +103,7 @@
 	 * factory method
 	 * 
 	 * @param part
-	 * @return
+	 * @return a design position one before part
 	 */
 	public static DesignPosition createPositionBeforePart(EditPart part) {
 		EditPart parent = part.getParent();
@@ -108,7 +119,7 @@
 	 * factory method
 	 * 
 	 * @param part
-	 * @return
+	 * @return the design position for one after part
 	 */
 	public static DesignPosition createPositionAfterPart(EditPart part) {
 		EditPart parent = part.getParent();
@@ -126,6 +137,11 @@
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
 	public boolean equals(Object obj) {
+	    if (obj == this)
+	    {
+	        return true;
+	    }
+	    
 		if (obj instanceof DesignPosition) {
 			DesignPosition p = (DesignPosition) obj;
 
@@ -136,10 +152,15 @@
 		return false;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Object#toString()
+	
+	@Override
+    public int hashCode() {
+	    return System.identityHashCode(_containerPart) ^ System.identityHashCode(Integer.valueOf(_offset));
+    }
+
+	/**
+	 * @param buffer
+	 * @return the buffer with the debug dump
 	 */
 	public StringBuffer debugDump(StringBuffer buffer) {
 //		try {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignRange.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignRange.java
index 468defa..a4a0939 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignRange.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignRange.java
@@ -16,33 +16,37 @@
 /**
  * @author mengbo
  */
-public class DesignRange implements ISelection {
-	public DesignPosition _start;
+public class DesignRange implements ISelection 
+{
+    private final DesignPosition _start;
+    private final DesignPosition _end;
 
-	public DesignPosition _end;
-
+	/**
+	 * @param start
+	 * @param end
+	 */
 	public DesignRange(DesignPosition start, DesignPosition end) {
 		_start = start;
 		_end = end;
 	}
 
+	/**
+	 * @return the start position in the range
+	 */
 	public DesignPosition getStartPosition() {
 		return _start;
 	}
 
+	/**
+	 * @return the end position in the range
+	 */
 	public DesignPosition getEndPosition() {
 		return _end;
 	}
 
-	// public boolean isCollapsed()
-	// {
-	// }
-
-	// public boolean fullyContains(EditPart part)
-	// {
-	//        
-	// }
-
+	/**
+	 * @return true if the range is valid
+	 */
 	public boolean isValid() {
 		return _start != null && _start.isValid() && _end != null
 				&& _end.isValid();
@@ -58,6 +62,10 @@
 		return !isValid() || _start.equals(_end);
 	}
 
+	/**
+	 * @param buffer
+	 * @return a buffer with the debug dum
+	 */
 	public StringBuffer debugDump(StringBuffer buffer) {
 		if (_start != null) {
 			buffer.append("Start: ").append(_start);
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignRefPosition.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignRefPosition.java
index d02733f..da6e305 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignRefPosition.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/DesignRefPosition.java
@@ -23,7 +23,7 @@
 
 	/**
 	 * @param part
-	 * @param offset
+	 * @param caretIsAfter
 	 */
 	public DesignRefPosition(EditPart part, boolean caretIsAfter) {
 		super(part.getParent(), 0);
@@ -33,6 +33,9 @@
 		_caretIsAtRight = caretIsAfter;
 	}
 
+	/**
+	 * @return the reference edit part
+	 */
 	public EditPart getRefPart() {
 		return _refPart;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/EditPartPositionHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/EditPartPositionHelper.java
index f2c2660..423b6df 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/EditPartPositionHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/EditPartPositionHelper.java
@@ -27,10 +27,8 @@
 import org.eclipse.jst.pagedesigner.dom.DOMPositionHelper;
 import org.eclipse.jst.pagedesigner.dom.DOMRefPosition;
 import org.eclipse.jst.pagedesigner.dom.EditModelQuery;
-import org.eclipse.jst.pagedesigner.dom.IDOMPosition;
 import org.eclipse.jst.pagedesigner.parts.NodeEditPart;
 import org.eclipse.jst.pagedesigner.parts.TextEditPart;
-import org.eclipse.jst.pagedesigner.utils.BodyHelper;
 import org.eclipse.jst.pagedesigner.validation.caret.IMovementMediator;
 import org.eclipse.jst.pagedesigner.validation.caret.IPositionMediator;
 import org.eclipse.jst.pagedesigner.validation.caret.Target;
@@ -68,7 +66,7 @@
 	}
 
 	/**
-	 * @param endPosition
+	 * @param position 
 	 * @return null means failed to convert to rect.
 	 */
 	public static Rectangle convertToAbsoluteCaretRect(DesignPosition position) {
@@ -128,7 +126,8 @@
 	 * 
 	 * @param host
 	 * @param p
-	 * @return
+	 * @param validator 
+	 * @return the design position
 	 */
 	public static DesignPosition findEditPartPosition(EditPart host, Point p,
 			IPositionMediator validator) {
@@ -160,12 +159,13 @@
 	 * This function find the position, if there is one which is widget or text
 	 * and it contains p, or there is not such widget, then boxLine will returns
 	 * the widget that are in a sameline which contains p;
+	 * @param rootHost 
+	 * @param host 
 	 * 
 	 * @param p
-	 * @param result
-	 * @param tagName
-	 * @param skip
-	 * @return
+	 * @param boxLine 
+	 * @param validator 
+	 * @return the design position
 	 */
     //TODO: needs refactoring
 	public static DesignPosition innerFindEditPartPosition(EditPart rootHost,
@@ -285,7 +285,8 @@
 	 * 
 	 * @param host
 	 * @param p
-	 * @return
+	 * @param validator 
+	 * @return the design position
 	 */
 	public static DesignPosition findEditPartPositionConstrained(EditPart host,
 			Point p, IMovementMediator validator) {
@@ -315,11 +316,12 @@
 	 * This method is used for move up/down, except for using tactics to deal
 	 * with container, this method is similiar to findEditPartPosition.
 	 * 
+	 * @param rootHost 
+	 * @param host 
 	 * @param p
-	 * @param result
-	 * @param tagName
-	 * @param skip
-	 * @return
+	 * @param boxLine 
+	 * @param validator 
+	 * @return the design position
 	 */
     // TODO: needs refactoring
 	public static DesignPosition innerFindEditPartPositionConstrained(
@@ -492,8 +494,12 @@
 //	}
 
 	/**
+	 * If child is a GraphicalEditPart, a new copy of its bounding rectangle
+	 * will be returned translated to absolute bounds. If child is not a GraphicalEditPart
+	 * then the empty rectangle (0,0,0,0) is returned.
+	 * 
 	 * @param child
-	 * @return
+	 * @return the bounding rectangle or (0,0,0,0) if none.
 	 */
 	public static Rectangle getAbsoluteBounds(EditPart child) {
 		if (child instanceof GraphicalEditPart) {
@@ -525,29 +531,29 @@
 	 * @return
 	 */
 	private static EditPart tryTwoWays(DesignPosition position,
-			List caretRefResult) {
+			List<Boolean> caretRefResult) {
 		EditPart result = null;
 		// Sibling first:
 		Node node = EditModelQuery.getInstance().getSibling(
 				DOMPositionHelper.toDOMPosition(position), true);
 		if (node != null && !EditModelQuery.isTransparentText(node)) {
 			result = Target.resolvePart(node);
-			caretRefResult.add(new Boolean(false));
+			caretRefResult.add(Boolean.FALSE);
 		} else {
 			node = EditModelQuery.getInstance().getSibling(
 					DOMPositionHelper.toDOMPosition(position), false);
 			if (node != null && !EditModelQuery.isTransparentText(node)) {
 				result = Target.resolvePart(node);
-				caretRefResult.add(new Boolean(true));
+				caretRefResult.add(Boolean.TRUE);
 			}
 		}
 		if (result == null) {
 			if (getConcretePart(position, false) != null) {
 				result = getConcretePart(position, false);
-				caretRefResult.add(new Boolean(true));
+				caretRefResult.add(Boolean.TRUE);
 			} else if (getConcretePart(position, true) != null) {
 				result = getConcretePart(position, true);
-				caretRefResult.add(new Boolean(false));
+				caretRefResult.add(Boolean.FALSE);
 			}
 		}
 		return result;
@@ -558,13 +564,13 @@
 	 * still need to improve whitespace tags's layout furthure more.
 	 */
 	private static EditPart getNextConcretPart(DesignPosition position,
-			List caretIsAtRightTest) {
+			List<Boolean> caretIsAtRightTest) {
 		EditPart result = null;
 		boolean caretIsAtRight = true;
 		if (position instanceof DesignRefPosition) {
 			caretIsAtRight = ((DesignRefPosition) position).caretIsAtRight();
 			result = ((DesignRefPosition) position).getRefPart();
-			caretIsAtRightTest.add(new Boolean(caretIsAtRight));
+			caretIsAtRightTest.add(Boolean.valueOf(caretIsAtRight));
 		}
 		if (result == null
 				|| EditModelQuery.isTransparentText(Target.resolveNode(result))) {
@@ -579,7 +585,7 @@
 	 * 
 	 * @param position
 	 * @param forward
-	 * @return
+	 * @return the edit part at position which is non-whitespace ? TODO:
 	 */
 	public static EditPart getConcretePart(DesignPosition position,
 			boolean forward) {
@@ -595,6 +601,11 @@
 		return result;
 	}
 
+	/**
+	 * @param position
+	 * @param forward
+	 * @return the next concrete part.
+	 */
 	public static EditPart getNextConcretPart(DesignPosition position,
 			boolean forward) {
 		Node node;
@@ -626,13 +637,13 @@
 	}
 
 	private static Rectangle getRefRect(DesignPosition position) {
-		List caretLocation = new ArrayList();
+		List<Boolean> caretLocation = new ArrayList<Boolean>();
 		EditPart part = getNextConcretPart(position, caretLocation);
 		LayoutPart layoutPart;
 		Rectangle rect = null;
 		if (part != null) {
 			layoutPart = new LayoutPart(part, null);
-			boolean caretIsAtRight = ((Boolean) caretLocation.get(0))
+			boolean caretIsAtRight = caretLocation.get(0)
 					.booleanValue();
 			final int CARET_OFFSET = 1;
 			Rectangle bounds = null;
@@ -664,19 +675,4 @@
 		}
 		return rect;
 	}
-
-	public static DesignPosition moveDesignPositionForInsert(
-			DesignPosition position, String uri, String tag) {
-		IDOMPosition domposition;
-		domposition = DOMPositionHelper.toDOMPosition(position);
-		if (domposition != null) {
-			domposition = BodyHelper
-					.adjustInsertPosition(uri, tag, domposition);
-		}
-        // TODO: huh?
-		if (domposition != null) {
-			return DOMPositionHelper.toDesignPosition(domposition);
-		}
-        return null;
-	}
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/FlowBoxLine.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/FlowBoxLine.java
index bfc0e12..5e45ac1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/FlowBoxLine.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/FlowBoxLine.java
@@ -14,6 +14,7 @@
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Map;
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.draw2d.geometry.Point;
@@ -54,6 +55,11 @@
 
 	private Point _point;
 
+	/**
+	 * @param rect
+	 * @param validator
+	 * @param point
+	 */
 	public FlowBoxLine(Rectangle rect, IPositionMediator validator, Point point) {
 		_x = rect.x;
 		_y = rect.y;
@@ -91,14 +97,25 @@
 		return _y;
 	}
 
-	public HashMap getPartsList() {
+	/**
+	 * @return the part list
+	 */
+	public Map getPartsList() {
 		return _parts;
 	}
 
+	/**
+	 * @return the right bottom coordiate
+	 */
 	public Point getRightBottom() {
 		return new Point(_x + _width, _y + _height);
 	}
 
+	/**
+	 * @param part
+	 * @param point
+	 * @return layout part added
+	 */
 	public boolean addLayoutPart(EditPart part, Point point) {
 		Assert.isTrue(part != null && point != null);
 		Rectangle rect = null;
@@ -127,24 +144,45 @@
 		return true;
 	}
 
+	/**
+	 * @param lPart
+	 * @return true if layout part is within the right bottom corner of the line
+	 */
 	public boolean interact(LayoutPart lPart) {
 		Rectangle rect = lPart.getAbsoluteBounds();
 		return !(rect.getBottom().y <= _y || getRightBottom().y <= rect.y);
 	}
 
+	/**
+	 * @param part
+	 * @return true if the line contains part
+	 */
 	public boolean contains(EditPart part) {
 		return _parts.containsKey(part);
 	}
 
+	/**
+	 * @param part
+	 * @return true if the line contains part
+	 */
 	public boolean contains(LayoutPart part) {
 		return _parts.containsValue(part);
 	}
 
+	/**
+	 * @param part
+	 * @return the layout part for part
+	 */
 	public LayoutPart getLayoutPart(EditPart part) {
 		return (LayoutPart) _parts.get(part);
 	}
 
-	// For vertical movement, we need to see if there is part cover p.x.
+	// 
+	/**
+	 * For vertical movement, we need to see if there is part cover p.x.
+	 * 
+	 * @return the closest edit part
+	 */
 	public EditPart getClosestPart() {
 		if (_parts.isEmpty()) {
 			return null;
@@ -187,6 +225,9 @@
 		return lineYOffset > partYOffset;
 	}
 
+	/**
+	 * @return the bounding rectangle of the line
+	 */
 	public Rectangle getBounds() {
 		return new Rectangle(_x, _y, _width, _height);
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/HTMLGraphicalViewer.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/HTMLGraphicalViewer.java
index ed7082f..7080136 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/HTMLGraphicalViewer.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/HTMLGraphicalViewer.java
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.jst.pagedesigner.viewer;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.draw2d.FigureCanvas;
@@ -47,27 +48,22 @@
  * 
  * @author mengbo
  */
-public class HTMLGraphicalViewer extends ScrollingGraphicalViewer implements
+/*package*/ class HTMLGraphicalViewer extends ScrollingGraphicalViewer implements
 		IHTMLGraphicalViewer, CaretPositionTracker {
 	private IEditorPart _parentPart;
-
 	private Caret _caret;
-
 	// initially nothing selected, treat as object selectin mode.
 	private boolean _rangeMode = false;
-
 	private DesignRange _selectionRange = null;
-
 	private int _inBatch = 0;
-
-	private CaretUpdater _caretUpdater = null;
-
+	private final CaretUpdater _caretUpdater;
 	private int _xOffset;
-
+	private final List<IHTMLGraphicalViewerListener>  _htmlViewerListeners;
 	// private ListenerList _postSelectionChangedListeners = new
 	// ListenerList(1);
 
 	/**
+	 * @param parent 
 	 * 
 	 */
 	public HTMLGraphicalViewer(IEditorPart parent) {
@@ -75,14 +71,36 @@
 		// CaretUpdater is not fully initialized yet, since this time the
 		// viewport is not
 		// initialized yet, and we need add listener to range model change.
+        _htmlViewerListeners = new ArrayList<IHTMLGraphicalViewerListener>();
 		_caretUpdater = new CaretUpdater(this);
 	}
 
 	/**
-	 * @return Returns the _caretUpdater.
+	 * Adds listener both as a selection changed listener and as an
+	 * {@link IHTMLGraphicalViewerListener}.  Callers of this method
+	 * need not call addSelectionChangedListener.
+	 * @param listener
 	 */
-	public CaretUpdater getCaretUpdater() {
-		return _caretUpdater;
+	public void addHTMLViewerListener(IHTMLGraphicalViewerListener listener)
+	{
+	    addSelectionChangedListener(listener);
+	    
+	    if (!_htmlViewerListeners.contains(listener))
+	    {
+	        _htmlViewerListeners.add(listener);
+	    }
+	}
+	
+	/**
+	 * Removes listener both as a selection changed listener and as an
+     * {@link IHTMLGraphicalViewerListener}.  Callers of this method
+     * need not call removeSelectionChangedListener.
+	 * @param listener
+	 */
+	public void removeHTMLViewerListener(IHTMLGraphicalViewerListener listener)
+	{
+	    removeSelectionChangedListener(listener);
+	    _htmlViewerListeners.remove(listener);
 	}
 
 	public Viewport getViewport() {
@@ -102,6 +120,9 @@
         return null;
 	}
 
+	/**
+	 * @return the status line manager
+	 */
 	public IStatusLineManager getStatusLineManager() {
 		if (_parentPart == null) {
 			return null;
@@ -127,7 +148,7 @@
 	/**
 	 * this method normally should only be called when in object selection mode.
 	 * 
-	 * @return
+	 * @return the edit part that has primary selection or null if none
 	 */
 	public EditPart getPrimarySelectedNode() {
 		List list = this.getSelectedEditParts();
@@ -218,26 +239,26 @@
 	 * 
 	 */
 	private void fireSelectionAboutToChange() {
-		Object listeners[] = selectionListeners.toArray();
-		for (int i = 0, n = selectionListeners.size(); i < n; i++) {
-			if (listeners[i] instanceof IHTMLGraphicalViewerListener) {
-				IHTMLGraphicalViewerListener l = (IHTMLGraphicalViewerListener) listeners[i];
-				l.selectionAboutToChange();
-			}
+		IHTMLGraphicalViewerListener listeners[] = 
+		    _htmlViewerListeners.toArray(new IHTMLGraphicalViewerListener[0]);
+
+		for (int i = 0; i < listeners.length; i++) 
+		{
+			listeners[i].selectionAboutToChange();
 		}
 	}
 
 	/**
 	 * 
 	 */
-	private void fireSelectionChangeFinished() {
-		Object listeners[] = selectionListeners.toArray();
-		for (int i = 0, n = selectionListeners.size(); i < n; i++) {
-			if (listeners[i] instanceof IHTMLGraphicalViewerListener) {
-				IHTMLGraphicalViewerListener l = (IHTMLGraphicalViewerListener) listeners[i];
-				l.selectionChangeFinished();
-			}
-		}
+	private void fireSelectionChangeFinished()
+	{
+        IHTMLGraphicalViewerListener listeners[] = 
+            _htmlViewerListeners.toArray(new IHTMLGraphicalViewerListener[0]);
+        for (int i = 0; i < listeners.length; i++) 
+        {
+            listeners[i].selectionChangeFinished();
+        }
 	}
 
 	/*
@@ -273,10 +294,9 @@
 		// else we don't support, ignore
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.gef.ui.parts.AbstractEditPartViewer#setSelection(org.eclipse.jface.viewers.ISelection)
+
+	/**
+	 * @param newSelection
 	 */
 	public void updateRangeSelection(ISelection newSelection) {
 		if (newSelection instanceof IStructuredSelection && //
@@ -474,6 +494,9 @@
 		this._xOffset = xoffset;
 	}
 
+	/**
+	 * 
+	 */
 	public void updateHorizontalPos() {
 		Caret caret = getCaret();
 		if (caret != null && !caret.isDisposed() && isInRangeMode()) {
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/HTMLGraphicalViewerListenenerAdapter.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/HTMLGraphicalViewerListenenerAdapter.java
new file mode 100644
index 0000000..11e2c33
--- /dev/null
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/HTMLGraphicalViewerListenenerAdapter.java
@@ -0,0 +1,26 @@
+package org.eclipse.jst.pagedesigner.viewer;
+
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+
+/**
+ * @author cbateman
+ * 
+ * Default adapter class for IHTMLGraphicalViewerListener
+ *
+ */
+public abstract class HTMLGraphicalViewerListenenerAdapter implements
+        IHTMLGraphicalViewerListener {
+
+    public void selectionAboutToChange() {
+        // do nothing -- override to implement
+    }
+
+    public void selectionChangeFinished() {
+        // do nothing -- override to implement
+    }
+
+    public void selectionChanged(SelectionChangedEvent event) {
+        // do nothing == override to implement
+    }
+
+}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/IHTMLGraphicalViewer.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/IHTMLGraphicalViewer.java
index 44e8452..6ee3ce4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/IHTMLGraphicalViewer.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/IHTMLGraphicalViewer.java
@@ -13,24 +13,56 @@
 
 import org.eclipse.draw2d.Viewport;
 import org.eclipse.gef.GraphicalViewer;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.swt.widgets.Caret;
+import org.eclipse.ui.IEditorPart;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
 
 /**
  * @author mengbo
  */
-public interface IHTMLGraphicalViewer extends GraphicalViewer {
+public interface IHTMLGraphicalViewer extends GraphicalViewer 
+{
+    /**
+     * Factory for IHTMLGraphicalViewers
+     *
+     */
+    static class Factory
+    {
+        /**
+         * @param part 
+         * @return a new graphical viewer for part
+         */
+        public static IHTMLGraphicalViewer createGraphicalViewer(IEditorPart part)
+        {
+            return new HTMLGraphicalViewer(part);
+        }
+    }
+
+	/**
+	 * @return the dom model
+	 */
 	public IDOMModel getModel();
 
+	/**
+	 * ensure we are in range selection mode
+	 */
 	public void ensureRangeSelectionMode();
 
+	/**
+	 * 
+	 */
 	public void ensureObjectSelectionMode();
 
 	/**
-	 * @return
+	 * @return true if in range mode
 	 */
 	public boolean isInRangeMode();
 
+	/**
+	 * @return the current selection range
+	 */
 	public DesignRange getRangeSelection();
 
 	/**
@@ -44,6 +76,9 @@
 	 */
 	public void setRangeEndPosition(DesignPosition position);
 
+	/**
+	 * @return the caret
+	 */
 	public Caret getCaret();
 
 	/**
@@ -59,5 +94,46 @@
 	 */
 	public void selectionChanged();
 
+	/**
+	 * @return the view port
+	 */
 	public Viewport getViewport();
+	
+	/**
+	 * @return the status line manager
+	 */
+	public IStatusLineManager getStatusLineManager();
+	
+	/**
+	 * @param newSelection
+	 */
+	public void updateRangeSelection(ISelection newSelection);
+	
+	/**
+	 * Update the horizontal position
+	 */
+	public void updateHorizontalPos();
+
+	/**
+	 * Clear the selection to null. When the model is modified, the selection is
+     * invalid, so we need to clear the selection. We change the selection
+     * directly, it won't need to fire selectionchange event to other part.
+     */
+	public void clearSelectionRange();
+
+	/**
+     * Adds listener both as a selection changed listener and as an
+     * {@link IHTMLGraphicalViewerListener}.  Callers of this method
+     * need not call addSelectionChangedListener.
+     * @param listener
+     */
+    public void addHTMLViewerListener(IHTMLGraphicalViewerListener listener);
+    
+    /**
+     * Removes listener both as a selection changed listener and as an
+     * {@link IHTMLGraphicalViewerListener}.  Callers of this method
+     * need not call removeSelectionChangedListener.
+     * @param listener
+     */
+    public void removeHTMLViewerListener(IHTMLGraphicalViewerListener listener);
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/IHTMLGraphicalViewerListener.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/IHTMLGraphicalViewerListener.java
index 6d16c47..0d48ca9 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/IHTMLGraphicalViewerListener.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/IHTMLGraphicalViewerListener.java
@@ -17,7 +17,14 @@
  * @author mengbo
  */
 public interface IHTMLGraphicalViewerListener extends ISelectionChangedListener {
+	/**
+	 * Fired before selection changes
+	 */
 	public void selectionAboutToChange();
 
+	/**
+	 * Fired after selection changed listeners have all been processed
+	 * for a change
+	 */
 	public void selectionChangeFinished();
 }
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/LayoutPart.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/LayoutPart.java
index 28c74de..31c3713 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/LayoutPart.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/LayoutPart.java
@@ -38,7 +38,7 @@
 /**
  * @author mengbo
  */
-public class LayoutPart {
+public final  class LayoutPart {
 	private final static int MAX_OFFSET_TO_EDGE = 10;
 
 	private EditPart _part;
@@ -96,8 +96,7 @@
 	/**
 	 * Try to get the closest flowbox absolute bounds.
 	 * 
-	 * @param point
-	 * @return
+	 * @return the bounding rectangle
 	 */
 	public Rectangle getAbsoluteBounds() {
 		Rectangle bounds = null;
@@ -111,13 +110,13 @@
 	/**
 	 * Get box's absolute bounds.
 	 * 
-	 * @param point
-	 * @return
+	 * @param box
+	 * @return the box's bounding rectangle
 	 */
 	public Rectangle getAbsoluteBounds(FlowBox box) {
 		if (box != null) {
 			IFigure figure = ((GraphicalEditPart) _part).getFigure();
-			Rectangle rect = new Rectangle(box._x, box._y, box.getWidth(), box
+			Rectangle rect = new Rectangle(box.getX(), box.getY(), box.getWidth(), box
 					.getHeight());
 			figure.translateToAbsolute(rect);
 			return rect;
@@ -180,12 +179,15 @@
 	 * The point is whitin the bounds of the figure.
 	 * 
 	 * @param point
-	 * @return
+	 * @return true if point is the absolute bounds of this
 	 */
 	public boolean contains(Point point) {
 		return getAbsoluteBounds().contains(point);
 	}
 
+	/**
+	 * @return the design position
+	 */
 	public DesignPosition resolveTextPosition() {
 		DesignPosition result = null;
 		if (_part instanceof TextEditPart
@@ -208,16 +210,18 @@
 		return result;
 	}
 
+	/**
+	 * @param validator
+	 * @return resolve the design position using validator
+	 */
 	public DesignPosition resolvePosition(IPositionMediator validator) {
 		DesignPosition result;
 		if ((result = resolveTextPosition()) == null) {
-			boolean atPointLeft = false;
-			boolean atPointRight = false;
-			atPointLeft = isBeforePoint(_point);
-			atPointRight = isAfterPoint(_point);
-			if (!(atPointLeft ^ atPointRight)) {
-			    // TODO: and...?
-			}
+			boolean atPointLeft = isBeforePoint(_point);
+//			boolean atPointRight = isAfterPoint(_point);
+//			if (atPointLeft == atPointRight) {
+//			    // TODO: and...?
+//			}
 			Target target = new Target(getPart());
 			if (validator.isValidPosition(new DOMRefPosition(target.getNode(),
 					atPointLeft))) {
@@ -242,7 +246,7 @@
 //		return ((GraphicalEditPart) _part).getFigure();
 //	}
 
-	public boolean isAfterPoint(Point point) {
+	private boolean isAfterPoint(Point point) {
 		boolean result = false;
 		FlowBox flowBox = getLine(0);
 		if (IHTMLConstants.TAG_BR.equalsIgnoreCase(Target.resolveNode(_part)
@@ -273,14 +277,7 @@
 
 	}
 
-	/**
-	 * EditPart is at point's left
-	 * 
-	 * @param part
-	 * @param point
-	 * @return
-	 */
-	public boolean isBeforePoint(Point point) {
+	/*package*/ boolean isBeforePoint(Point point) {
 		boolean result = false;
 		FlowBox flowBox = getLastLine();
 		if (flowBox != null) {
@@ -305,11 +302,11 @@
 		// return !isAfterPoint(point);
 	}
 
-	public boolean isBeforePoint() {
+	/*package*/ boolean isBeforePoint() {
 		return isBeforePoint(_point);
 	}
 
-	public boolean atLeftPart(Point point) {
+	/*package*/ boolean atLeftPart(Point point) {
 		FlowBox flowBox = getBox();
 		if (flowBox != null) {
 			Rectangle boxRect = getAbsoluteBounds(flowBox);
@@ -318,22 +315,23 @@
 		return true;
 	}
 
-	public boolean isAfterPoint() {
+	/*package*/ boolean isAfterPoint() {
 		return isAfterPoint(_point);
 	}
 
-	public boolean atSameLine(Point point) {
-		Rectangle bounds = getAbsoluteBounds();
-		return bounds.contains(bounds.getTop().x, point.y);
-	}
+	// TODO: dead but possibly useful?
+//	private boolean atSameLine(Point point) {
+//		Rectangle bounds = getAbsoluteBounds();
+//		return bounds.contains(bounds.getTop().x, point.y);
+//	}
 
-	public boolean atSameRow(Point point) {
+	/*package*/ boolean atSameRow(Point point) {
 		Rectangle bounds = getAbsoluteBounds();
 		return bounds.contains(point.x, bounds.getRight().y);
 	}
 
-	public static Rectangle getBounds(FlowBox box) {
-		return new Rectangle(box._x, box._y, box.getWidth(), box.getHeight());
+	/*package*/ static Rectangle getBounds(FlowBox box) {
+		return new Rectangle(box.getX(), box.getY(), box.getWidth(), box.getHeight());
 	}
 
 	/**
@@ -383,13 +381,11 @@
 
 	/**
 	 * To search for none empty string, this is not final.
+	 * @param part 
+	 * @return the edit part
 	 * 
-	 * @param lineBox
-	 * @param host
-	 * @param rect
-	 * @param validator
 	 */
-	public static EditPart getConcretePart(EditPart part) {
+	/*package*/ static EditPart getConcretePart(EditPart part) {
 		if (part != null) {
 			Node node = Target.resolveNode(part);
 			Node child = node.getFirstChild();
@@ -407,16 +403,19 @@
 
 	/**
 	 * To search for none empty string, this is not final.
+	 * Equivalent to getConcretePart(getPart())
 	 * 
-	 * @param lineBox
-	 * @param host
-	 * @param rect
-	 * @param validator
+	 * @return the edit part
+	 * 
 	 */
 	public EditPart getConcretePart() {
 		return getConcretePart(_part);
 	}
 
+	/**
+	 * @param node
+	 * @return the node
+	 */
 	public static Node getConcreteNode(Node node) {
 		if (node != null) {
 			Node child = node.getFirstChild();
@@ -430,6 +429,9 @@
 		return null;
 	}
 
+	/**
+	 * @return true if is close to edge
+	 */
 	public boolean isCloseToEdgeFromOutSide() {
 		boolean result = false;
 		if (EditModelQuery.isBlockNode(Target.resolveNode(_part))) {
@@ -449,7 +451,10 @@
 		return getAbsoluteBounds().getTop().y >= _point.y;
 	}
 
-	public boolean isInline() {
+	/**
+	 * @return tru if getPart() is considered inline
+	 */
+	/*package*/ boolean isInline() {
 		return EditModelQuery.isInline(Target.resolveNode(_part));
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/TextPosition.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/TextPosition.java
index a88c86b..46850b4 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/TextPosition.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/viewer/TextPosition.java
@@ -39,7 +39,7 @@
 	/**
 	 * if _containerPart is null, means it is invalid
 	 * 
-	 * @return
+	 * @return the text node
 	 */
 	public IDOMText getTextNode() {
 		return _containerNode;
@@ -48,12 +48,15 @@
 	/**
 	 * if offset < 0, means it is invalid.
 	 * 
-	 * @return
+	 * @return the offset
 	 */
 	public int getOffset() {
 		return _offset;
 	}
 
+	/**
+	 * @return if this position is considered valid
+	 */
 	public boolean isValid() {
 		return _containerNode != null && _offset >= 0;
 	}
@@ -71,4 +74,14 @@
 		}
 		return false;
 	}
+
+    @Override
+    public int hashCode() 
+    {
+        // match hash code to equals criteria
+        return System.identityHashCode(getTextNode()) 
+                ^ System.identityHashCode(Integer.valueOf(getOffset()));
+    }
+	
+	
 }